PassRole

iam:PassRole和普通的Action不一样,一般的Action直接操作的是资源,比如ec2:CreateInstances,但PassRole并不直接对资源进行操作。

让我们用一个场景来说明iam:PassRole的作用。

假设用户A具有Aministrator权限,它为EC2也绑定了一个Role,该Role也具有Administrator权限:

IAM PassRole when everything works fine

上面的操作没问题,因为用户本身权限就够大,不会产生越权的问题。

但如果用户自己的权限是缺失的,比如不能访问S3, DynamoDB等资源,但他却可以给EC2绑任意的Role,这样就产生了安全问题—— 用户A在EC2上绑定一个具有Administrator权限的Role,然后登录到EC2, 就可以为所欲为了:

Without PassRole to check permissions, users can escalate their privileges

解决这个安全隐患的方案就是使用iam:PassRole,我们限制用户A只能为EC2绑定特定的Role:

{
  "Effect": "Allow",
  "Action": "iam:PassRole",
  "Resource": "arn:aws:::123456789012:role/LimitedAccess"
}

这样用户A如果想绑定其他Role就会失败:

With iam:PassRole in place, users can only attach certain roles

PassRole在CloudFormation上的使用场景

假设用户A权限被限制,但他此时要创建一个cloudformation stack,stack里面会创建很多AWS资源。如果一一为用户A添加这些资源的创建权限,会把A本身的权限扩大,不符合安全的最佳实践。

使用iam:PassRole就可以解决这个问题,我们创建一个Role,里面声明stack所需资源的创建权限。然后再为用户A添加iam:PassRole的权限,用户在创建stack时就可以使用这个Role了:

image-20230815233426243

如果一个用户被限制了iam:Passrole权限,通常在控制台上会报错is not authorized to perform: iam:PassRole on resource xxx