iam:PassRole api 执行什么操作?

What action does iam:PassRole api perform?

在以下规则中:

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

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

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

简而言之,声明说您只能将名称以 some-role 开头的角色分配给 lambda 服务。

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

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

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

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

    "Condition": {
        "StringEquals": {
            "iam:PassedToService": "lambda.amazonaws.com"
        }
    }