如何从命令行使用多个AWS帐户?

我在Amazon EC2上托管了两个不同的应用程序(好吧,第二个应用程序即将上线)。

我如何在命令行(Mac OS X)与两个帐户一起工作,但保留EC2密钥&单独的证书吗?我是否需要在每个ec2-*命令之前更改我的环境变量?

是否使用别名并将其设置为环境在线工作?喜欢的东西:

alias ec2-describe-instances1 = export EC2_PRIVATE_KEY=/path; ec2-describe-instances
123254 次浏览

你应该能够使用以下命令选项来代替EC2_PRIVATE_KEY(甚至EC2_CERT)环境变量:

  • -K <private key>
  • -C <certificate>

你可以把这些放在别名里面。

alias ec2-describe-instances1 ec2-describe-instances -K /path/to/key.pem

您可以编写shell脚本,根据用户的输入,为每个帐号设置相应的环境变量值。这样做,您不需要创建任何别名,此外,ELB工具,自动缩放命令行工具等工具也可以在多个帐户下工作。

新的aws工具现在支持多个配置文件。

如果您使用工具配置访问,它会自动在~/.aws/config中创建一个默认值。

然后您可以添加额外的配置文件-更多详细信息:

< a href = " http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html cli-multiple-profiles " > http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html cli-multiple-profiles < / >

你可以通过在aws命令行上创建两个配置文件来使用两个帐户。 它会提示你的AWS访问密钥ID, AWS秘密访问密钥和想要的区域,所以准备好它们。< / p >

例子:

$ 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

我创建了一个简单的工具aaws,用于在AWS帐户之间切换。

它通过在shell中设置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

要使用IAM角色,您必须对STS:假设角色进行API调用,它将返回一个临时访问密钥ID、秘密密钥和安全令牌,然后可用于对未来的API调用进行签名。以前,为了从AWS命令行接口(CLI)实现安全的跨帐户、基于角色的访问,需要显式调用STS:假设角色,并且使用长期凭据。生成的临时凭证被捕获并存储在概要文件中,该概要文件用于后续的AWS API调用。当临时凭据过期时(默认为1小时后),必须重复此过程。

https://aws.amazon.com/blogs/security/how-to-use-a-single-iam-user-to-easily-access-all-your-accounts-by-using-the-aws-cli/

恕我直言,最简单的方法是手动编辑.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

创建或编辑此文件:

% 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
< p >更多细节: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html < / p >

我写了一个工具箱来切换默认的AWS配置文件。

该机制是物理地将配置文件键移动到configcredentials文件中的default部分。

今天更好的解决方案应该是以下方法之一:

  • 使用aws命令选项--profile
  • 使用环境变量AWS_PROFILE

我不记得为什么我没有使用--profile的解决方案,可能我没有意识到它的存在。

然而,该工具包在做其他事情时仍然有用。以后我将使用AWS_PROFILE的方式添加软开关标志。

$ xsh list aws/cfg
[functions] aws/cfg/move
[functions] aws/cfg/set
[functions] aws/cfg/activate
[functions] aws/cfg/get
[functions] aws/cfg/delete
[functions] aws/cfg/list
[functions] aws/cfg/copy

回购:https://github.com/xsh-lib/aws

安装:

curl -s https://raw.githubusercontent.com/alexzhangs/xsh/master/boot | bash && . ~/.xshrc
xsh load xsh-lib/aws

用法:

xsh aws/cfg/list
xsh aws/cfg/activate <profilename>