一,引言
今天额外分享一篇 AWS 的技术内容,需要在 EC2 切换到跨账号 IAM 角色(AWS CLI)。假设我们使用两个 AWS 账户,A账号,B账号。我们希望允许 A 账号用于 "iam-role-iam-readonly" 的 AWS IAM Role 的只读权限。而 EC2 实例却位于 B 账户中。该实例包含 "iam-role-ec2" 实例配置文件角色,我们希望 “iam-role-ec2” 允许跨账户 A 中的 IAM Role 的只读权限。所有需要设置 “iam-role-ec2” 的切换角色权限,以及设置 “iam-role-iam-readonly” 的授权实体。接下啦,就正式开始我们今天的内容。
二,正文
1,添加账户A “iam-role-iam-readonly”的角色权限策略
选择 “Access managemrnt =》Roles”,点击 “Create” 创建角色
选择授信实体,我们切换到到 “Another AWS account”(Belonging to you or 3rd party)
输入可以使用此账号的ID,也就是我的值的 B 账号的ID,点击 “Next:Permissions”
权限选择 “IAMReadOnlyAccess”,并且选中所需要的权限,点击 “Next:Tags”
Add tags 是可选择的,我们不需要添加任何操作,直接点击 “Next:Review”
Review页面,我们输入相关参数
Role name:“iam-role-iam-readonly”
点击 “Create role”
创建成功后,我们可以查看到当前 “iam-role-iam-readonly” 的相关信息
2,添加账户B “iam-role-iam-ec2” 的角色权限策略
首先我们需要添加对 A 账号上的 “iam-role-iam-readonly” 的角色切线权限
选择 “Acces management=》Policy",并点击 “Create policy” 创建新的策略
切换到JSON,添加对应的切换 A 账号的 “iam-role-iam-readonly” 的权限
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIPToAssumeCrossAccountRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::xxxxxxxxxxxx:role/iam-role-iam-readonly" } ] }
点击 “Next:Tags”
输入Rolicy Name :“iam-pol-sts-iam-readonly”,点击“Create Policy”
创建成功后,我们在策略中找到创建好的Policy “iam-pol-sts-iam-readonly”
接下来,我们需要创建 B 账号上 EC2 使用的角色 “iam-role-ec2”,并且给当前 “iam-role-ec2” 添加刚刚创建好的切换角色的权限
选择相关参数
Select type of trusted entity:“AWS service”
Choose a use case:“EC2”
点击 “Next:Permissions”
选择附加 “iam-pol-sts-iam-readonly”,点击 “Next:Tags”
继续跳过 Add tags 页面
在 Review 页面,输入
Role name:“iam-role-ec2“ 后,点击 ”Create role“
”iam-role-ec2“ 创建成功后,可以点击查看详细信息
3,修改 A 账号角色的受信实体
先复制 B 账号 ”iam-role-ec2“ 的 Role ARN
回到 A 账号下点击 ” “ 编辑 ”iam-role-iam-readonly“ 的 Trust relationships
将刚刚复制好的 B 账号上 ”iam-role-ec2“ 角色的 arn 替换到下图圈中的位置
4,登陆 B 账号上的EC2 虚机,通过切换角色,使用AWS CLI 获取 IAM RoleId
创建EC2 虚拟机,并且赋予 "iam-role-ec2" 角色
接下来 SSH 远程登录到这台 EC2 上尝试执行AWS CLI 命令
aws iam get-role --role-name iam-role-iam-readonly
此时会提示,当前缺少安全Token,也就是我们并没有给当前账号配置 ak,sk
接下来,我们在当前 "~\.aws\config" 的文件中配置新的角色配置,并且该校色必须具有 role_arn 中指定的校色的 sts:AssumeRole 权限
打开 aws 配置文件
vim ~/.aws/config
添加新的角色配置
[profile iam-role-iam-readonly] role_arn = arn:aws:iam::xxxxxxxxxxxx:role/iam-role-iam-readonly credential_source = Ec2InstanceMetadata
保存并退出,再次执行aws cli 命令。这次我们在命名中加上 --profile 这个参数
aws iam get-role --role-name iam-role-iam-readonly --profile iam-role-iam-readonly
Bingo!!!,成功, 成功的运行EC2示例配置文件切换到另外的账号中的角色。
如果我们要回复 B 账号的中 EC2 原来的实例配置文件权限,可以不用在 aws cli 命令的结尾加 --profile 这个参数了。
*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。