是否可以使用标签值来控制对资源的访问?

Is using tag values to control access to a resource possible?

为了尝试授予实例访问 s3 存储桶中特定文件夹的权限,我在策略中得到了这个:

"Resource": "arn:aws:s3:::My_Bucket/db_backups/${aws:ResourceTag/Name}/*"

没用。使用此类标签的文档位于:https://docs.aws.amazon.com/IAM/latest/UserGuide/access_iam-tags.html

所以也许我正在尝试做的事情是不可能的。

但我不想为每个需要访问文件夹的实例创建新角色。还有其他方法可以解决这个问题吗?

您可以使用 IAM policy elements: Variables and tags - AWS Identity and Access Management 编写适用于多个 IAM 用户/IAM 角色的单个策略。

如该文档所示,使用 aws:userid 变量将插入 role-id:ec2-instance-id。因此,实例可以被授予访问与其角色和实例匹配的路径的权限,例如:

s3://bucketname/AROAU2DKSKXYQTOSDGTGX:i-abcd1234/*

没有为 S3 资源定义 aws:ResourceTag。 S3在访问对象时只提供tag作为策略变量,在变量s3:ExistingObjectTag.

为了最近的一次参与,我不得不这样做,而让这件事变得困难的一件事是,并非所有服务都将它们的标签作为策略变量提供,而那些确实使用不同名称的服务。 aws:ResourceTag 变量仅在您访问的资源是 KMS 和一些其他服务时提供。

无论如何,我不确定你的说法是否有效。我认为您真正想要的是使用 aws:PrincipalTag/Name — 即 "Resource": "arn:aws:s3:::My_Bucket/db_backups/${aws:PrincipalTag/Name}/*"。这将嵌入用于访问资源的 IAM 主体(用户或角色)的 Name 标签。