【发布时间】:2023-01-04 16:55:18
【问题描述】:
我需要分配给开发人员的角色才能读取具有特定标签的 lambda 函数。
为此,我在所有资源上分配了以下标签:
| Tag | Value |
|---|---|
| team | developers, devops, etc... |
| environment | dev, stg, prod |
团队标签可以有多个团队,以空格分隔,因为多个团队可以拥有同一资源。
- 例1:
team: developers - 例子2:
team: developers devops finance根据显示可以grant access by tags 的 AWS 文档(尽管有部分支持,因为有些操作不允许这样做),我为分配给开发人员的 IAM 角色创建了以下策略,包括标签的条件:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowReadingFunctionsByTags", "Effect": "Allow", "Action": [ "lambda:ListTags", "lambda:GetFunction" ], "Resource": "*", "Condition": { "StringLike": { "aws:ResourceTag/team": "*developers*" }, "StringEquals": { "aws:ResourceTag/environment": [ "dev" , "stg" ] } } }, { "Sid": "ListAllFunctions", "Effect": "Allow", "Action": [ "lambda:ListFunctions", "lambda:GetAccountSettings" ], "Resource": "*" } ] }最后,为了对其进行测试,我承担了在 AWS 控制台上分配策略的角色。
我期待我可以看到没有错误的功能,但是,显示以下错误:
User: arn:aws:sts::[REDACTED]:assumed-role/lambda_role/[REDACTED] is not authorized to perform: lambda:GetFunction on resource: arn:aws:lambda:eu-central-1:[REDACTED]:function:[LAMBDA NAME] because no identity-based policy allows the lambda:GetFunction action我还尝试了以下内容:
- 无条件限制为特定资源:有效。
- 限制为具有条件的特定资源:不工作。
- 仅使用团队标签:不起作用。
- 仅使用环境标签:不起作用。
- 在团队标签上使用 StringEquals,资源只有一个团队:不起作用。
- 添加支持“AllowReadingFunctionsByTags”条件的所有 Lambda 读取和列表操作:不起作用。
- 使用
arn:aws:lambda:*:*:function:*作为资源选择器:不工作。
此外,IAM 策略模拟器根据输入显示以下内容。
该政策有什么问题,我该如何进一步调试它?
【问题讨论】:
-
也许问题在于你担任角色的方式。重新检查您授予您的用户承担该角色的权限,并且该角色与您的用户有信任关系
-
@Mink 我已经尝试使用附加了策略的 IAM 用户,但它仍然无法正常工作。与该角色的信任关系正常,因为其他策略按预期工作。
标签: amazon-web-services aws-lambda amazon-iam aws-iam-policy