iam:PassRole
和普通的Action不一样,一般的Action直接操作的是资源,比如ec2:CreateInstances
,但PassRole并不直接对资源进行操作。
让我们用一个场景来说明iam:PassRole
的作用。
假设用户A具有Aministrator
权限,它为EC2也绑定了一个Role,该Role也具有Administrator
权限:
上面的操作没问题,因为用户本身权限就够大,不会产生越权的问题。
但如果用户自己的权限是缺失的,比如不能访问S3, DynamoDB
等资源,但他却可以给EC2绑任意的Role,这样就产生了安全问题—— 用户A在EC2上绑定一个具有Administrator权限的Role,然后登录到EC2, 就可以为所欲为了:
解决这个安全隐患的方案就是使用iam:PassRole
,我们限制用户A只能为EC2绑定特定的Role:
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:::123456789012:role/LimitedAccess"
}
这样用户A如果想绑定其他Role就会失败:
假设用户A权限被限制,但他此时要创建一个cloudformation stack
,stack里面会创建很多AWS资源。如果一一为用户A添加这些资源的创建权限,会把A本身的权限扩大,不符合安全的最佳实践。
使用iam:PassRole
就可以解决这个问题,我们创建一个Role,里面声明stack所需资源的创建权限。然后再为用户A添加iam:PassRole
的权限,用户在创建stack时就可以使用这个Role了:
如果一个用户被限制了iam:Passrole
权限,通常在控制台上会报错is not authorized to perform: iam:PassRole on resource xxx