假如B帐号要Assume A帐号的Role:
登录到A帐号,新建一个Role,由于是授予其他帐号访问,所以信任实体选择其他AWS帐户
,并输入B帐户的id::
这里直接给它添加AmazonS3FullAccess
Policy, 为Role命名,比如s3-access-for-assume-role
,然后点击创建。
创建完成后,将这个role的ARN复制出来(这个ARN要在另一个帐号中使用):
登录到B
帐号,在当前用户下增加一条内联策略:
{
"Version": "2012-10-17",
"Statement":{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::256659126572:role/s3-access-for-assume-role"
}
}
现在,当前用户就可以切换角色来访问A帐户下的bucket(注意root帐户不能进行切换)。
在A帐号下创建完成Role时,同时显示了一条链接,用于控制台切换Role:
https://signin.aws.amazon.com/switchrole?roleName=s3-access-for-assume-role&account=kongpingfan2
在B帐号下访问上面链接,然后进行Role切换:
现在在B帐号下可访问A帐号的s3:
在B帐号下运行:
aws sts assume-role --role-arn "arn:aws:iam::256659126572:role/s3-access-for-assume-role" --role-session-name "s3-access"
得到类似结果:
得到AccessKeyId, SecretKey, SessionToken
后,生存时间只有1h, 直接写到环境变量里:
export AWS_ACCESS_KEY_ID=ASxxxxxxxxL7UXY7XL
export AWS_SECRET_ACCESS_KEY=JxFsx0KSIKmnYHxxxxxxxAU8THFXQJAmPRg3
export AWS_SESSION_TOKEN=IQoJb3JpZ2luX2VjEJz//////////wEaCXVzLXdlc3QtMiJHMEUCIQDJB7y4K14FvWY4iYcgZFRagGutXsH1FPNFiaYvFjxOUAIgM9LUojct2EYM1zsqUO4H1Fb6yNQTO+3LmPWCcKv85iQqlgIIFRACGgwyNTxxxxxxxxxxxxxxxxxxxwMPyrzAajFKLUkj6u+o0vcuQ6UI7MOI6/xmKvkQOfPHZ88nUk3gq08rdeZ63Krrh9YQXJfH0ZvxVJNX/lloE7LBMOqwXjfl3U805Viwb4nlQ6R4eb/txUgXKVuj+gWFG1e2epFYXECTU0PgDPHXbBr/+nYTyvV5qrCoYAMjDJefpgQIpf7RyA2t7LQUJRHmBr8lP11Kmo1xTTGG8g5GlR56Opu7+fkd30JmxroFpxPrkVXo9PS7tXuMnui8zryxzGHV06ocXgxKWpDhvRNRm5eg/7oG4HTjh7+pvpGxj5opFkxxQp1n6uHsT3CpxwUlFE99VUGMQlw4TCz5turBjqdAVnTkAqo6igrkKBS+F4SMSbCy1BdiR9xSCLii/J8iksDINyWtwW8Cdb/J0SuUWmtu3ttLF8q7ECiL1OTIvCW6IQhmczY0df2fjj77ZFSzdNLskwnkLljiJGvpVpzZLELm3dl2DvGj3AxHt9V9lmF0l4yuYjPWgvWmRIH6pjdbJmYiEewtTiKVY0d9bl3JzyAUKtW+RIYUrN41y1em3M=
此时,运行任何命令,都是另一个帐户的role权限。
例如运行ls,获取到另一个帐号下的所有桶:
aws s3 ls
我们之前执行的命令是:
aws sts assume-role --role-arn "arn:aws:iam::256659126572:role/s3-access-for-assume-role" --role-session-name "s3-access"
如果过期需要重新运行上面命令并设置环境变量,有没有方法自动获取到最新的凭证信息,并给CLI来使用呢?
在./aws/config
中加入:
[profile automation]
role_arn=arn:aws:iam::256659126572:role/s3-access-for-assume-role
source_profile=default
region=us-east-1
最后一行设置region很关键,否则执行aws cli有可能在其他region跑,报没有权限的错误
然后执行aws s3 ls --profile automation
参考: https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html