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"
}
}
在以下规则中:
{
"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"
}
}