在 IAM 策略资源中使用标签

时间:2021-01-06 14:12:23

标签: amazon-web-services amazon-iam

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

此语句无效

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

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

1 个答案:

答案 0 :(得分:2)

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

IAM 政策

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

iam 策略示例:

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


s3 存储桶策略

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

存储桶策略示例:

{
    "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" 
                }
            } 
        } 
    ]
} 

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

资源: