我的根帐户是1234(帐户ID),并且已启用MFA身份验证,我的用户名是myuser12。我可以使用帐户ID和用户名以及密码登录。它将要求提供MFA令牌代码。一旦我输入了令牌代码。我可以在根帐户下看到特定位置的实例。
我可以使用我的角色(在我的情况下,所有帐户中的角色都相同)以及任何别名来将角色切换到新帐户(5678)。切换角色完成后,我可以在特定位置查看新帐户下的所有实例。
通过Web控制台,一切都很好。当我尝试通过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”(MFA网址),以后需要它来生成会话令牌。
现在,
aws sts get-session-token --serial-number arn:aws:iam::1234:mfa/myuser12 --token-code 123456
注意:从我的虚拟MFA设备生成的123456
(令牌代码)
现在,我从上述命令中获得了SessionToken(aws_session_token),SecrectAccessKey(aws_secret_access_key),AccessKeyId(aws_access_key_id)以及到期时间戳记。
因此,我已根据新凭据更新了.aws/config
和.aws/credential
文件。
.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
类型实例的列表。
但是,当我尝试使用--profile newacc
时,我什么也没得到。我真的很困惑要更改什么以及在哪里更改?
答案 0 :(得分:0)
此配置块:
[profile newacc]
region = eu-west-1
role_arn = arn:aws:iam::5678:role/myRole
source_profile default
output = json
表示您希望承担myRole
。但是,假设角色只能由被授权承担该角色的IAM用户完成。因此,需要一些常规的IAM凭据来证明您的身份。这是通过source_profile
完成的。
source_profile default
行意味着default
个人资料中的凭据将用于呼叫AssumeRole
。
我建议您保留默认凭据作为常规IAM凭据。调用aws sts get-session-token
时,将结果存储在其他配置文件中(不是default
,不是newacc
)。您可以使用aws configure --profile sts
来做到这一点(例如)。
当您希望使用myRole
时,可以使用--profile newacc
。这将使用您的default
凭据来呼叫AssumeRole
,并将使用角色的凭据来进行呼叫。
结果是三个配置文件:
default
用于呼叫get-session-token
和AssumeRole
sts
用于证明您拥有MFA newacc
使用角色答案 1 :(得分:0)
终于可以了!看来,我需要为每个帐户在命令下运行。
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