首页 > 解决方案 > 在 IAM 策略资源中使用标签

问题描述

我可以对 IAM 语句的资源键使用字符串插值吗?我正在尝试根据用户标记为的团队授予对存储桶的访问权限。

这个说法不成立

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::${aws:PrincipalTag/team}.example.com"
        }
    ]
}

如果我${aws:PrincipalTag/team}用硬编码的团队名称替换它会按预期工作。

标签: amazon-web-servicesamazon-iam

解决方案


您可以通过在 iam 角色/用户的策略或 s3 存储桶策略中使用条件键来完成此操作。

IAM 政策

要在 iam 策略中使用条件键,您需要添加一条语句,将用户的 s3 操作限制为已使用特定资源标签标记的资源。这将阻止用户访问没有特定标签的 s3 对象。您可能会发现的一个问题是,您需要确保您希望与之交互的所有对象也都被标记。

iam 策略示例:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws: aws:ResourceTag/owningTeam": "team1"
            }
        }
    }]
}


s3 存储桶策略

要在 s3 存储桶策略中使用条件键,您需要添加一条语句,将存储桶的访问权限限制为具有特定主体标签的用户/角色。用户仍然需要具有执行 s3 操作的权限,但资源策略将限制访问。除了条件键之外,您还可以根据用户/角色进行限制。

存储桶策略示例:

{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": "*",
            "Action":"s3:GetObject",
            "Resource": "arn:aws:s3:::awsexamplebucket1/*",
            "Condition" : {
                "StringEquals" : {
                    "aws:PrincipalTag/team": "team1" 
                }
            } 
        } 
    ]
} 

由于您最终希望利用主体上的标签,因此我建议您使用存储桶策略方法。

资源:


推荐阅读