AWS Switching to an IAM role (AWS CLI)

时间:2024-01-28 16:13:56

一,引言

  今天额外分享一篇 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 这个参数了。

*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。