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

Posted

技术标签:

【中文标题】如何从命令行使用多个 AWS 账户?【英文标题】:How to use multiple AWS accounts from the command line? 【发布时间】:2010-10-10 06:00:11 【问题描述】:

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

如何在命令行 (Mac OS X) 上同时使用这两个帐户,但将 EC2 密钥和证书分开?我需要在每个 ec2-* 命令之前更改我的环境变量吗?

是否会使用别名并将其用于在线设置环境?比如:

alias ec2-describe-instances1 = export EC2_PRIVATE_KEY=/path; ec2-describe-instances

【问题讨论】:

【参考方案1】:

您可以通过在 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

【讨论】:

配置区域 - 这里是区域“代码”列表 - docs.aws.amazon.com/general/latest/gr/rande.html【参考方案2】:

也许它仍然可以帮助某人。您可以手动设置。

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
aws_access_key_id 您可以在AWS Console > Identity and Access Management > Security Credentials > Access Keys 部分获得

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

【讨论】:

@iBrianCox -- 最好将此信息合并到最受好评的答案 (***.com/a/34246053/1199564) 中,因为它允许用户了解如何将设置从一个配置文件移动到另一个配置文件,例如,您开始时仅使用默认配置文件,并希望继续使用专用的单独配置文件。 @slm 请阅读我上面的评论(每条评论只能提及一次) @mgd 谢谢你的建议,但不 - 因为起初这个答案不是我的 - 其次这是如何设置它的不同方法 @mgd Q 你能更详细地描述一下“每条评论一个提及”的意思吗? 我的意思是,在我的第一条评论中,我打算提到 both iBrianCox 和 slm(分别是另一个答案的作者和编辑),但你只能做一个提及每条评论,所以我不得不添加另一条评论才能提及两者。您是正确的,您的答案是一种不同的方法,但了解信息的存储位置非常有帮助,特别是如果您打算在配置文件之间复制设置。【参考方案3】:

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

-K <private key> -C <certificate>

您可以将这些放在别名中,例如

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

然后您可以添加其他配置文件 - 更多详细信息,请访问:

http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-multiple-profiles

【讨论】:

【参考方案6】:

我创建了一个简单的工具,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

【讨论】:

【参考方案7】:

创建或编辑此文件:

% 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

【讨论】:

我试图根据具体问题来定制这个答案 - 只是想帮助???【参考方案8】:

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

【讨论】:

【参考方案9】:

要使用 IAM 角色,您必须对 STS:AssumeRole 进行 API 调用,这将返回一个临时访问密钥 ID、秘密密钥和安全令牌,然后可用于签署未来的 API 调用。以前,为了从 AWS 命令​​行界面 (CLI) 实现安全的跨账户、基于角色的访问,需要显式调用 STS:AssumeRole,并使用您的长期凭证。生成的临时凭证被捕获并存储在您的配置文件中,并且该配置文件用于后续的 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 账户?的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行简化 aws DynamoDB 查询 JSON 输出?

我可以使用其他命令行参数从命令行启动 aws fargate 进程吗?

将命令行参数传递给 AWS Fargate 容器

如何使用多个包从命令行运行 Selenium testNG 文件?

如何使用自动化或命令行工具管理 AWS Redshift 中的存储过程?

我如何通过 aws 命令行界面命令提及实例的关闭行为。请帮忙