【问题标题】:Is using tag values to control access to a resource possible?是否可以使用标签值来控制对资源的访问?
【发布时间】:2021-05-18 06:38:33
【问题描述】:

为了尝试让实例访问 s3 存储桶中的特定文件夹,我在策略中包含了这个:

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

它不起作用。使用这样的标签的文档在这里:https://docs.aws.amazon.com/IAM/latest/UserGuide/access_iam-tags.html

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

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

【问题讨论】:

  • 标签控制权限的能力因资源类型而异。您当然不能将标签插入 ARN(根据您的示例),但某些资源允许标签,如您链接页面上的示例所示。您可以尝试 ARN (arn:aws:s3:::My_Bucket/db_backups/*) 和 Condition 的组合,然后看看它是否有效。您可能想要编辑您的问题以提供您想要实现的确切目标的详细信息。例如,您说您想授予实例对文件夹的访问权限,但随后您引用标签而没有解释您实际想要实现的目标。
  • 我希望每个实例都能够备份到存储桶中自己指定的文件夹,而无需授予它访问存储桶中其他文件夹的权限。我可以为每个实例编写单独的策略来完成此操作,但我宁愿避免这样做。

标签: amazon-web-services amazon-iam amazon-policy


【解决方案1】:

您可以使用 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/*

【讨论】:

  • 啊,好的。我不知道 aws:userid 为每个实例翻译成那个。这种方法的唯一缺点是备份目录的路径不是很明显。但毕竟这一切,我可能只使用 aws 备份服务而不是自己滚动。不过,很难弄清楚什么更划算。
【解决方案2】:

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

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

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

【讨论】:

  • 我已经尝试过使用 PrincipalTag(这是我尝试的第一件事)。它也没有用。对不起,我应该把它放在我原来的帖子里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
相关资源
最近更新 更多