我在Amazon EC2上有两个不同的应用程序(第二个即将上市)。
如何在命令行(Mac OS X)中使用这两个帐户,但保留EC2密钥&证书分开?在每个ec2- *命令之前,我是否需要更改环境变量?
是否会使用别名并将其设置为环境内联工作?类似的东西:
alias ec2-describe-instances1 = export EC2_PRIVATE_KEY = / path; EC2-描述-实例
答案 0 :(得分:205)
您可以通过在aws命令行上创建两个profiles来使用两个帐户。 它会提示您输入AWS Access Key ID, AWS Secret Access Key和所需的区域,以便准备好它们。
示例:
$ 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
Windows示例:
$ set AWS_DEFAULT_PROFILE=account1
$ aws s3 ls
答案 1 :(得分:38)
也许它仍然有助于某人。您可以手动设置它。
1)设置文件
~/.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}}
2)设置文件
~/.aws/config
此
[default]
region={{region}}
output={{output:"json||text"}}
[profile {{profile_name}}]
region={{region}}
output={{output:"json||text"}}
3)用AWS Command Line测试它,命令输出为JSON
aws ec2 describe-instances --profile {{profile_name}}
参考
http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-multiple-profiles
答案 2 :(得分:15)
您应该能够使用以下命令选项代替EC2_PRIVATE_KEY
(甚至EC2_CERT
)环境变量:
-K <private key>
-C <certificate>
您可以将这些放在别名中,例如
alias ec2-describe-instances1 ec2-describe-instances -K /path/to/key.pem
答案 3 :(得分:6)
新的aws工具现在支持多个配置文件。
如果使用工具配置访问权限,它会自动在〜/ .aws / config。
中创建默认值然后,您可以添加其他个人资料 - 更多详情:
http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-multiple-profiles
答案 4 :(得分:1)
我创建了一个简单的工具aaws,可以在AWS账户之间进行切换。
通过在外壳程序中设置AWS_DEFAULT_PROFILE
来起作用。只要确保您的~/.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
答案 5 :(得分:1)
恕我直言,最简单的方法是手动编辑 .aws/credentials
和 .aws/config
文件。
它很简单,适用于 Linux、Mac 和 Windows。只需read this了解更多详情(阅读 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
答案 6 :(得分:0)
您可以编写shell脚本,根据用户输入为每个帐户设置相应的环境变量值。这样做,您不需要创建任何别名,此外,ELB工具,Auto Scaling命令行工具等工具也可以在多个帐户下工作。
答案 7 :(得分:0)
要使用IAM角色,您必须对STS:AssumeRole进行API调用,该API将返回一个临时访问密钥ID,私钥和安全令牌,这些令牌可用于对以后的API调用进行签名。以前,为了从AWS命令行界面(CLI)实现安全的跨账户,基于角色的访问,需要显式调用STS:AssumeRole,并且使用了您的长期凭证。捕获的结果临时凭证已捕获并存储在您的配置文件中,该配置文件用于后续的AWS API调用。临时凭据过期后(默认情况下为1小时),必须重复此过程。
答案 8 :(得分:-1)
我建议检查docker container封装的CLI。您可以为每个帐户运行容器,以便更好地隔离。