我在 Amazon EC2 上托管了两个不同的应用程序(第二个即将上线)。
如何在命令行 (Mac OS X) 上使用两个帐户,但将 EC2 密钥和证书分开?我需要在每个 ec2-* 命令之前更改我的环境变量吗?
是否会使用别名并将其用于在线环境的设置?就像是:
alias ec2-describe-instances1 = export EC2_PRIVATE_KEY=/path; ec2-describe-instances
我在 Amazon EC2 上托管了两个不同的应用程序(第二个即将上线)。
如何在命令行 (Mac OS X) 上使用两个帐户,但将 EC2 密钥和证书分开?我需要在每个 ec2-* 命令之前更改我的环境变量吗?
是否会使用别名并将其用于在线环境的设置?就像是:
alias ec2-describe-instances1 = export EC2_PRIVATE_KEY=/path; ec2-describe-instances
您可以通过在 aws 命令行上创建两个配置文件来使用两个帐户。它会提示您输入您的AWS 访问密钥 ID、AWS 秘密访问密钥和所需区域,因此请准备好它们。
例子:
$ aws configure --profile account1
$ aws configure --profile account2
然后,您可以通过在命令中传递配置文件来在帐户之间切换。
$ aws dynamodb list-tables --profile account1
$ aws s3 ls --profile account2
笔记:
如果您将配置文件命名为default
,它将成为默认配置文件,即当--profile
命令中没有参数时。
如果您花费更多时间使用account1,则可以通过设置 AWS_DEFAULT_PROFILE 环境变量将其设为默认值。设置默认环境变量后,您无需在每个命令上指定配置文件。
Linux、OS X 示例:
$ export AWS_DEFAULT_PROFILE=account1
$ aws dynamodb list-tables
窗口示例:
$ set AWS_DEFAULT_PROFILE=account1
$ aws s3 ls
1) 获取访问密钥
AWS 控制台 > 身份和访问管理 (IAM) > 您的安全凭证 > 访问密钥
2)在文件中设置访问权限
~/.aws/credentials
[default]
aws_access_key_id={{aws_access_key_id}}
aws_secret_access_key={{aws_secret_access_key}}
[{{profile_name}}]
aws_access_key_id={{aws_access_key_id}}
aws_secret_access_key={{aws_secret_access_key}}
3)在文件中设置配置文件
~/.aws/config
[default]
region={{region}}
output={{output:"json||text"}}
[profile {{profile_name}}]
region={{region}}
output={{output:"json||text"}}
4)测试它
安装命令行应用程序AWS Command Line并使用命令 - 例如产品 EC2
aws ec2 describe-instances --profile {{profile_name}}
参考
您应该能够使用以下命令选项代替EC2_PRIVATE_KEY
(甚至EC2_CERT
)环境变量:
-K <private key>
-C <certificate>
您可以将这些放在别名中,例如
alias ec2-describe-instances1 ec2-describe-instances -K /path/to/key.pem
恕我直言,最简单的方法是手动编辑.aws/credentials
和文件。.aws/config
它很简单,适用于 Linux、Mac 和 Windows。只需阅读此内容以了解更多详细信息(1 分钟阅读)。
.aws/credentials
文件:
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[user1]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
.aws/config
文件:
[default]
region=us-west-2
output=json
[profile user1] <-- 'profile' in front of 'profile_name' (not for default)!!
region=us-east-1
output=text
新的 aws 工具现在支持多个配置文件。
如果您使用工具配置访问权限,它会自动在 ~/.aws/config 中创建一个默认值。
然后,您可以添加其他配置文件 - 更多详细信息,请访问:
http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-multiple-profiles
创建或编辑此文件:
% vim ~/.aws/credentials
列出任意数量的密钥对:
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[user1]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
设置一个局部变量以选择您要使用的键对:
% export AWS_PROFILE=user1
你喜欢什么:
aws s3api list-buckets # any aws cli command now using user1 pair of keys
如果您希望包含--profile user1
每个命令,也可以逐个命令执行它:
aws s3api list-buckets --profile user1
# any aws cli command now using user1 pair of keys
更多详细信息: https ://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html
我创建了一个简单的工具aaws来在 AWS 账户之间切换。
它通过AWS_DEFAULT_PROFILE
在你的shell中设置来工作。只需确保您的~/.aws/credentials
文件中有一些条目,它就会在多个帐户之间轻松切换。
/tmp
$ aws s3 ls
Unable to locate credentials. You can configure credentials by running "aws configure".
/tmp
$ aaws luk3
[luk3] /tmp
$ aws s3 ls
2013-11-05 21:40:04 luk3thomas.com
您可以编写shell脚本根据用户输入为每个帐户设置相应的环境变量值。这样做,您不需要创建任何别名,此外,ELB 工具、Auto Scaling 命令行工具等工具也可以在多个帐户下工作。
要使用 IAM 角色,您必须对 STS:AssumeRole 进行 API 调用,这将返回一个临时访问密钥 ID、秘密密钥和安全令牌,然后可用于签署未来的 API 调用。以前,为了从 AWS 命令行界面 (CLI) 实现安全的跨账户、基于角色的访问,需要显式调用 STS:AssumeRole,并使用您的长期凭证。生成的临时凭证被捕获并存储在您的配置文件中,并且该配置文件用于后续的 AWS API 调用。当临时凭证过期时(默认为 1 小时后),必须重复此过程。