Aws lambda 如何在AWS IAM策略中为联邦用户提供lambda执行的选择性访问?
我正在尝试为组中的选定成员授予lambda执行权限。用户通过PingFederate进行身份验证。我在向联邦用户授予此选择性访问权限时遇到问题 我有一个自定义IAM策略(允许lambda调用选择性)附加到此角色。虽然策略似乎通过了验证,并且策略模拟显示允许访问,但当我尝试执行lambda函数时,我得到了一条消息Aws lambda 如何在AWS IAM策略中为联邦用户提供lambda执行的选择性访问?,aws-lambda,amazon-iam,federated-identity,pingfederate,Aws Lambda,Amazon Iam,Federated Identity,Pingfederate,我正在尝试为组中的选定成员授予lambda执行权限。用户通过PingFederate进行身份验证。我在向联邦用户授予此选择性访问权限时遇到问题 我有一个自定义IAM策略(允许lambda调用选择性)附加到此角色。虽然策略似乎通过了验证,并且策略模拟显示允许访问,但当我尝试执行lambda函数时,我得到了一条消息 Calling the invoke API action failed with this message: User:arn:aws:sts::123456789012:assume
Calling the invoke API action failed with this message: User:arn:aws:sts::123456789012:assumed-role/role-for-grp-l2/myuser1234 is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:us-east-1:123456789012:function:my-lambda-function
这是我的策略:允许lambda调用选择性
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction",
"lambda:InvokeAsync",
"lambda:ListVersionsByFunction",
"lambda:GetFunction",
"lambda:ListAliases"
],
"Resource": "arn:aws:lambda:*:123456789012:function:my-lambda-function",
"Condition": {
"StringEquals": {
"aws:userid": "arn:aws:sts::123456789012:assumed-role/role-for-grp-l2/myuser1234"
}
}
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"lambda:ListFunctions",
"lambda:ListEventSourceMappings",
"lambda:ListLayers",
"lambda:ListLayerVersions"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:userid": "arn:aws:sts::123456789012:assumed-role/role-for-grp-l2/myuser1234"
}
}
}
]
}
我遗漏了什么吗?我正在努力理解你的问题。如果我做了一个错误的假设,请纠正我
myuser1234
经过身份验证后,将收到arn:aws:sts::123456789012:假定角色/role-for-grp-l2/myuser1234
角色,对吗?是否可以为每个组创建一个角色并删除条件
属性(检查项目2解释原因)
aws:userid
的值类似于AIDAJQABLZS4A3QDU576Q:SomeNameYouGive
。因为这一点,您的条件永远不会匹配arn:aws:sts::123456789012:假定的角色/role-for-grp-l2/myuser1234
,然后用户就不能假定该操作
RoleSessionName
是用户名,您可以这样使用条件:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction",
"lambda:InvokeAsync",
"lambda:ListVersionsByFunction",
"lambda:GetFunction",
"lambda:ListAliases"
],
"Resource": "arn:aws:lambda:*:123456789012:function:my-lambda-function",
"Condition": {
"StringLike": {
"aws:userid": "*:myuser1234"
}
}
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"lambda:ListFunctions",
"lambda:ListEventSourceMappings",
"lambda:ListLayers",
"lambda:ListLayerVersions"
],
"Resource": "*",
"Condition": {
"StringLike": {
"aws:userid": "*:myuser1234"
}
}
}
]
}
如果愿意,可以通过以下命令使用AWS CLI删除*
通配符获取角色id
:
aws iam get-role --role-name ROLE_NAME
以及改变条件如下:
"Condition": {
"StringEquals": {
"aws:userid": "ROLE_ID:myuser1234"
}
}
谢谢你的回复,佩德罗。如果以上内容不清楚,请道歉。组中的每个成员获得的角色是“role-for-grp-l2”。i、 e.arn:aws:sts::123456789012:假定角色/role-for-grp-l2/So user1s arn将是arn:aws:sts::123456789012:假定角色/role-for-grp-l2/user1,而用户myuser1234将是arn:aws:sts::123456789012:假定角色/role-for-grp-l2/myuser1234我只希望允许此组中的特定用户(myuser1234)执行lambda函数。我无法创建单独的组并移动此用户(myuser1234)。所以我必须使用一个有条件的命令。@dadarw25检查我的更新。您可以将
aws:userid
的最后一部分与用户名进行比较。
"Condition": {
"StringEquals": {
"aws:userid": "ROLE_ID:myuser1234"
}
}