当前位置: 首页 > 知识库问答 >
问题:

如何对多个帐户使用AWS CLI

寿亦
2023-03-14

我有一个根帐户是1234(帐户ID),我有启用MFA的身份验证,我的用户名是myuser12。我可以使用帐户ID、用户名和密码登录。它将请求MFA令牌代码。一旦我输入了令牌代码。我可以在我的根帐户下查看特定位置的实例。

我可以使用我的角色(在我的情况下,所有帐户的角色都是相同的)以及该角色的任何别名将角色切换到新帐户(5678)。切换角色完成后,我可以在特定位置看到新帐户下的所有实例。

通过网络控制台一切正常。当我尝试通过CLI访问它们时,我无法获得新帐户的结果(5678)。但它适用于1234帐户位置。

Account ID - Location   - No. of instances

1234       - us-east-1  - 5 instances

1234       - eu-west-3   - 2 instances

5678       - eu-north-1  - 5 instances

5678       - eu-west-1   - 5 instances

等等

我的初始.aws/config内容

[profile default]
region = us-east-1
output = json

.aws/credentials内容,

[default]
aws_access_key_id = accesskeyIdFromDownloadedCSV
aws_secrect_access_key = secrectAccessKeyFromDownloadedCSV

现在,如果我尝试查询任何实例,我会得到错误,因为我没有用MFA生成访问密钥令牌。

aws rds describe-db-instances --query 'DBInstances[?DBInstanceClass==`db.m3.large`]' --profile default --no-verify-ssl

所以,我必须得到我的MFA arn url,并获得即时访问密钥id,秘密访问密钥和会话令牌。

aws iam list-mfa-devices --user-name myuser12

我从上面的命令中得到了“SerialNumber”(mfaarnurl),我需要它来生成会话令牌。

现在

aws sts get-session-token --serial-number arn:aws:iam::1234:mfa/myuser12 --token-code 123456

注意:123456(令牌代码)从我的虚拟MFA设备生成

现在我有了上面命令中的SessionToken(aws\U会话\U令牌)、SecrectAccessKey(aws\U秘密\U访问\U密钥)、AccessKeyId(aws\U访问\U密钥\U id)以及过期时间戳。

因此,我已经根据新的凭据更新了. aws/config. aws/凭据文件。

. aws/config文件内容

[profile default]
region = us-east-1
output = json

[profile newacc]
region = eu-west-1
role_arn = arn:aws:iam::5678:role/myRole   
source_profile default                     
output = json

.aws/credentials内容,

[default]
aws_access_key_id = NewIdFromMFACommand
aws_secrect_access_key = NewKeyFromMFACommand
aws_aws_session_token = TokenFromMFACommand      

[newacc]
region = eu-west-1
role_arn = arn:aws:iam::5678:role/myRole   
source_profile default                     
output = json

现在,我可以执行我最初的命令

aws rds describe-db-instances --query 'DBInstances[?DBInstanceClass==`db.m3.large`]' --profile default --no-verify-ssl

并且,获取db.m3.large类型实例的列表。

但是,当我尝试使用--file newacc时,我没有得到任何东西。我真的很迷茫改什么,改哪里?

共有2个答案

邹京
2023-03-14

终于成功了!。似乎,我需要为每个帐户运行下面的命令。

aws sts assume-role --role-arn "arn:aws:iam::5678:role/MyRoleForThisAccount" --role-session-name AWSCLI-Session

注意:在IAM中为您的用户分配相应的角色(MyRoleForThisAccount),并确保您的用户有权调用AssumeRole

并更新~/.aws/credentials文件中每个相应块的结果(凭证)。因此,凭证文件看起来像

[default]
aws_access_key_id = NewIdFromMFACommand
aws_secrect_access_key = NewKeyFromMFACommand
aws_aws_session_token = TokenFromMFACommand      

[newacc]
aws_access_key_id = NewIdFromAssumeRoleCommandForThisAccount
aws_secrect_access_key = NewKeyFromAssumeRoleCommandForThisAccount
aws_aws_session_token = NewTokenFromAssumeRoleCommandForThisAccount

并且~/.aws/config文件将

[profile default]
region = us-east-1
output = json

[profile newacc]
region = eu-west-1
彭鸿哲
2023-03-14

此配置块:

[profile newacc]
region = eu-west-1
role_arn = arn:aws:iam::5678:role/myRole   
source_profile default                     
output = json

表示您希望担任myRole。但是,担任角色只能由授权担任该角色的IAM用户执行。因此,需要一些正常的IAM凭据来证明您的身份。这是通过源文件完成的。

source\u profile default行表示default配置文件中的凭据将用于调用AssumeRole

我建议您将默认凭据保留为常规IAM凭据。调用aws sts get session token时,将结果存储在不同的配置文件中(不是default,不是newacc)。您可以使用aws configure--profile sts(例如)来实现这一点。

当您希望担任myRole时,可以使用--profile newacc。这将使用您的默认凭据调用AssumeRole,并将使用角色的凭据进行调用。

结果是三个配置文件:

  • 默认值用于调用获取会话令牌假定角色
 类似资料:
  • 我有两个帐户和两个线程。1个线程将钱从1个帐户转到2个帐户,2个线程将钱从2个帐户转到1个帐户,当然前提是有足够的钱。我需要了解死锁情况,并解决死锁情况以确认安全转移。以下是我目前的想法: 账户.java 主类 传输线程.java 为了安全转移,我决定将存款和取款两种方法同步。但怀疑用方法运行实现。我有正确的实现吗?如果不是,解释和纠正将不胜感激。

  • 我的目标很简单:使用Azure AD多租户应用程序来调用其他租户上的Azure资源管理器API。但是,当你用微软个人帐户登录时,我想不出该怎么做。 null 从技术角度来看,这可能是有道理的,但当我用个人账户登录时,如何将AAD应用程序添加到另一个租户呢? 应该通过手工检测个人MS帐户并找到与AAD承租人的关联来完成,或者有没有API可以促进这一点?在这两种情况下,怎么做?如果一个帐户与多个租户相

  • 我目前正在开发一个需要gmail收件箱的应用程序。目前我正在使用带有凭据的Gmail API。json和令牌。pickle,虽然每次使用脚本时我都想使用其他凭据登录,但这很正常。我对这个API很陌生,想知道是否可以使用令牌所用凭据以外的其他凭据登录。泡菜。 Gmail API 要当前获取gmail收件箱,我使用以下代码: imaplib 我尝试获取某个用户收件箱的另一种方法是使用imaplib和电

  • 一个应用程序可以连接多个Firebase帐户吗? 在单个android应用程序中使用多个firebase帐户进行google analytics

  • 我搜索了在请求中使用的onBehalfOfContentOwner字段,但我不知道如何获得这个ID,也不确定这是否适用于我的情况,因为我们讨论的是品牌帐户,如果我错了请纠正我。