介绍
简单来说,IAM 角色是一组权限的集合,IAM 用户或者 AWS 服务可以临时性代入这个角色,获得角色所拥有的权限;AWS 官方定义如下:
IAM 角色类似于用户,因为它是一个 AWS 实体,该实体具有确定其在 AWS 中可执行和不可执行的操作的权限策略。但是,角色旨在让需要它的任何人代入,而不是唯一地与某个人员关联。此外,角色没有关联的标准长期凭证 (密码或访问密钥)。相反,如果用户担任某个角色,则会动态创建临时安全凭证并为用户提供该凭证。
实战
在 AWS 实战 – 利用 IAM 对 S3 做访问控制中,我们的实战案例里有一个存储桶 derek-public2,除了 Harp-Admin,其余 IAM 用户都只有只读权限,现在我们来建立一个拥有写入该存储桶权限的角色,以便在某些特殊情况下,普通 IAM 用户可以临时代入这个角色来修改存储桶。
使用 Harp-Admin 登录 IAM 控制台,点击角色,创建角色;
在选择受信任实体的类型里,选择其他 AWS 账户,在账户 ID 中输入本 AWS 账号的 ID;
需要外部 ID 一般在授权其他 AWS 账户代入此角色的时候使用,需要 MFA 验证看情况选择;
点击下一步,到了权限策略页面,直接选择创建策略即可,权限策略如下,命名为 edit_public2:
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“s3:ListBucket”
],
“Resource”: [
“arn:aws:s3:::derek-public2”
]
},
{
“Effect”: “Allow”,
“Action”: [
“s3:PutObject”,
“s3:PutObjectAcl”,
“s3:GetObject”,
“s3:GetObjectAcl”,
“s3:DeleteObject”
],
“Resource”: [
“arn:aws:s3:::derek-public2/*”
]
}
]
}
策略创建完成,回到创建角色页面,勾选 edit_public2,需要注意的是,一个 IAM 用户切换角色后,它只会拥有角色赋予的权限,不会拥有 IAM 用户原先自带的权限,因此为了正常访问 S3,我们再勾选 s3_common_policy;
下一步创建 tag,再下一步,角色名称填写为 Public2_Manager,点击创建,角色创建完成;
为了让账户下的普通 IAM 用户可以正常访问 IAM 控制面板,我们直接给之前创建的 s3_common_group 组添加一条 AWS 托管策略 IAMReadOnlyAccess;
为了给 IAM 用户赋予切换角色的权限,我们需要再创建一条策略,附加给 s3_common_group,策略 json 如下:
{
“Version”: “2012-10-17”,
“Statement”: {
“Effect”: “Allow”,
“Action”: “sts:AssumeRole”,
“Resource”: “arn:aws:iam::712538533226:role/Public2_Manager”
}
}
使用 user1 登录,进入 S3,在 derek-public2 中创建文件夹,提示失败;
点击右上角用户处,点击切换角色,跳转到切换角色页面,账户文本框中输入账户 ID,角色输入 Public2_Manager,然后点击切换角色;
此时在 derek-public2 存储桶下,已经可以正常建立文件夹了;
通过控制台的角色切换在一个小时后自动失效,需要重新切换,也可以手动退出角色;
也可以使用 cli 的方式切换角色,详见切换到 IAM 角色(AWS CLI);