iam:PassRole api 执行什么操作?

ove*_*nge 3 amazon-web-services amazon-iam aws-sam

在以下规则中:

{
    "Condition": {
        "StringLikeIfExists": {
            "iam:PassedToService": "lambda.amazonaws.com"
        }
    },
    "Action": [
        "iam:PassRole"
    ],
    "Resource": [
        "arn:aws:iam::${AWS::AccountId}:role/some-role*"
    ],
    "Effect": "Allow"
}
Run Code Online (Sandbox Code Playgroud)

我们正在使用此规则来创建 SAM 模板(sam deploy)的云形成堆栈。SAM 模板具有 lambda 和 lambda 的自定义角色。

上面的规则我们到底在说什么?

Mat*_*ava 6

简而言之,该语句说您可以将名称以some-role仅开头的角色分配给 lambda 服务。

如果要为 lambda 或 EC2 等服务分配角色,则需要具有执行iam:PassRole操作的权限。

"iam:PassedToService": "lambda.amazonaws.com"指定您可以将角色传递给哪个服务,在这种情况下传递给 lambda 服务。例如,在这种情况下,您将无法将此角色分配给 EC2 实例。

虽然这会起作用,但最好使用StringEquals而不是StringLikeIfExists. 首先,您不需要使用,like因为服务名称中没有可变部分。很简单lambda.amazonaws.com,它会保持这种状态。其次,您将此角色传递给服务,因此提到的字符串将始终存在,因此无需使用IfExists,这用于在单个语句中指定多个操作但条件仅适用于某些情况的情况其中。在这种情况下,您可以使用IfExistspart 以便不必将语句分成多个较小的语句。

所以在你的情况下,你可以这样写条件

    "Condition": {
        "StringEquals": {
            "iam:PassedToService": "lambda.amazonaws.com"
        }
    }
Run Code Online (Sandbox Code Playgroud)