我可以对 IAM 语句的资源键使用字符串插值吗?我正在尝试根据用户标记为的团队授予对存储桶的访问权限。
此语句无效
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::${aws:PrincipalTag/team}.example.com"
}
]
}
如果我用硬编码的团队名称替换 ${aws:PrincipalTag/team}
,它会按预期工作。
答案 0 :(得分:2)
您可以通过在 iam 角色/用户策略或 s3 存储桶策略中使用条件键来实现此目的。
要在 iam 策略中使用条件键,您需要添加一条语句,将用户 s3 操作限制为已使用特定 resource 标签标记的资源。这将阻止用户访问没有特定标签的 s3 对象。您可能会发现的一个问题是,您需要确保所有希望与之交互的对象也都带有标签。
iam 策略示例:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws: aws:ResourceTag/owningTeam": "team1"
}
}
}]
}
要在 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"
}
}
}
]
}
由于您最终希望利用主体上的标签,我建议使用存储桶策略方法。
资源: