如果请求者不是资源所有者,则拒绝访问 AWS 资源的 AWS 策略

AWS policy to deny access to AWS resource, if the requester is not the resource owner

我有一个用于培训的 AWS 账户,大约有 20 个用户。他们目前都拥有管理员权限。我正在尝试找出一种增加安全性的方法。从理论上讲,他们都知道不会删除彼此的资源,但这并不能阻止事故的发生。现在每个人都可以 delete/terminate 彼此的资源。我想建立一个允许用户对他们创建的资源执行任何操作的策略,但我不希望他们能够修改(主要是 delete/terminate)另一个用户资源。通常我会拒绝访问特定资源,但在这种情况下,由于每天或每周都会构建和销毁资源,因此需要尝试和管理的东西太多了。我研究过基于资源的 ownerId 和用户 ARN 拒绝访问。我一直无法找到在策略声明中获取 OwnerId 的方法,因此我可以对它们进行字符串比较。我目前认为我正在尝试做的事情目前是不可能的,正在寻找你们可能需要完成的任何想法。我有这个政策。

"Statement": {
"Effect": "deny",
"Action": "*",
"Resource": "*",
"Condition": {"StringNotEquals": {"Resource:OwnerId": "AccountID"}}

其中 AccountID 是用户的 AccountID,我必须以这种方式为每个用户创建一个策略。但是试图找出如何获取用户试图访问的资源的 OwnerId。

无法创建基于谁 "created the resource" 限制访问的 IAM 策略。这是因为创建者的身份未存储在资源中。 AWS 只是检查一个人是否有权创建某些东西,然后再去做。该资源则属于该帐户,而不是特定用户。

几个选项:

  • 给每个人一个单独的帐户:这保证了分离。可以通过合并账单加入账户以提供每月账单。但是,它很难 "share" 资源。

  • 使用标签来识别所有者:要求或强制使用标签来识别资源的创建者。然后,创建 IAM 规则,如果所有者标签设置为其标识符,则只允许某些 API 调用。如果有没有所有者标签的资源,请将其删除!但是,这需要您自己的代码来执行强制执行,可以使用 AWS Config 规则(通过 Lambda)或您自己的定期调用 APIs 的代码。此外,某些标签只能在创建资源(例如 EC2 实例)后应用,因此需要允许一个宽限期。

  • 不要让他们直接创建资源:而是提供一个代表他们创建资源的前端,该前端还会标记资源。它甚至可以在一定时间后删除资源。