【问题标题】:Attribute Based Access Controll issue for AWS Lambda with IAM policy具有 IAM 策略的 AWS Lambda 的基于属性的访问控制问题
【发布时间】:2023-03-16 21:32:01
【问题描述】:

我正在尝试关注 Secret Manager 的 this article,并尝试使用此用户角色策略链接为 AWS Lambda 应用基于属性的访问控制 (ABAC):

  1. 创建 IAM 用户
  2. 为该 IAM 用户分配角色
  3. 为角色分配了 lambda 的 ABAC 策略。

目前我在一个项目中针对不同用户使用 Lambda 的 ABAC 政策如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "LambdaPolicyForProject",
            "Effect": "Allow",
            "Action": [
                "cloudformation:DescribeStacks",
                "cloudformation:ListStackResources",
                "cloudwatch:GetMetricData",
                "cloudwatch:ListMetrics",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs",
                "kms:ListAliases",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:ListAttachedRolePolicies",
                "iam:ListRolePolicies",
                "iam:ListRoles",
                "logs:DescribeLogGroups",
                "lambda:Get*",
                "lambda:List*",
                "states:DescribeStateMachine",
                "states:ListStateMachines",
                "tag:GetResources",
                "xray:GetTraceSummaries",
                "xray:BatchGetTraces"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/accessproject": "${aws:PrincipalTag/accessproject}",
                    "aws:ResourceTag/accessteam": "${aws:PrincipalTag/accessteam}",
                    "aws:ResourceTag/costcenter": "${aws:PrincipalTag/costcenter}"
                }
            }
        }
    ]
}

costcenteraccessteamaccessproject 标签对于 IAM 用户和 lambda 而言相似时,这对用户不起作用。

但是,当我删除上述策略中的条件时,它会起作用(这表明 IAM 能够访问 lambda 策略)。

我能知道我在上面的教程中缺少什么吗?我确实交叉检查了 lambda、策略和 IAM 用户的所有标签,它们与文档相同。

【问题讨论】:

  • costcenteraccessteamaccessproject 标签对于 IAM 用户和 lambda 是什么意思?相似还是相同?
  • 现在还不清楚该怎么办吗?
  • 不,感谢您的预先回答,我现在明白了,“某些 Secrets Manager 操作不支持该资源类型”是有道理的。
  • costcenter, accessteam, accessproject 与 IAM 用户和 lambda 标签相同
  • 很高兴听到。如果很清楚,请随意投票或标记为已接受的答案。

标签: amazon-web-services aws-lambda amazon-iam aws-secrets-manager


【解决方案1】:

问题似乎出在您定义的Actions 中。根据您遵循的教程:

[...] 请参阅 Actions, Resources, and Condition Keys 了解 AWS Secrets Manager。该页面显示在Secret resource type 上执行的操作支持secretsmanager:ResourceTag/tag-key 条件键。某些 Secrets Manager 操作不支持该资源类型,包括 GetRandomPasswordListSecrets

查看actions, resources, and condition keys for AWS services 并确保每个服务的操作支持aws:ResourceTag/${TagKey} 条件。我没有通过所有权限,但 CloudWatch 操作 GetMetricDataListMetrics 不支持 aws:ResourceTag/${TagKey} 条件。 ec2:DescribeSecurityGroups 也是如此, ec2:DescribeSubnetsec2:DescribeVpcs,可能还有更多。

您必须创建额外的语句以允许这些操作,即:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "LambdaPolicyForProject",
            "Effect": "Allow",
            "Action": [
                "cloudformation:DescribeStacks",
                "cloudformation:ListStackResources",
                "kms:ListAliases",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:ListAttachedRolePolicies",
                "iam:ListRolePolicies",
                "iam:ListRoles",
                "logs:DescribeLogGroups",
                "lambda:Get*",
                "lambda:List*",
                "states:DescribeStateMachine",
                "states:ListStateMachines",
                "tag:GetResources",
                "xray:GetTraceSummaries",
                "xray:BatchGetTraces"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/accessproject": "${aws:PrincipalTag/accessproject}",
                    "aws:ResourceTag/accessteam": "${aws:PrincipalTag/accessteam}",
                    "aws:ResourceTag/costcenter": "${aws:PrincipalTag/costcenter}"
                }
            }
        },{
            "Sid": "LambdaPolicyForProjectNoTags",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:GetMetricData",
                "cloudwatch:ListMetrics",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        }
    ]
}

一旦制定了有效的政策,请熟悉IAM best practices,因为应尽可能避免使用通配符资源访问(授予最小权限的原则)。

【讨论】:

    猜你喜欢
    • 2016-01-17
    • 2019-07-07
    • 2020-10-02
    • 1970-01-01
    • 2015-03-02
    • 2017-11-12
    • 2020-12-15
    • 1970-01-01
    • 2014-10-31
    相关资源
    最近更新 更多