AWS 资源策略中“资源”的用途是什么?

cpp*_*ner 6 amazon-web-services amazon-iam

根据标题,当资源策略已经应用于特定资源时,定义资源策略时拥有资源字段的目的是什么。

例如,在本 aws教程中,定义了以下策略并附加到队列。该字段的目的是什么resource

{
 "Version": "2008-10-17",
 "Id": "example-ID",
 "Statement": [
  {
   "Sid": "example-statement-ID",
   "Effect": "Allow",
   "Principal": {
     "AWS": "*"  
   },
   "Action": [
    "SQS:SendMessage"
   ],
   "Resource": "arn:aws:sqs:REGION:ACCOUNT-ID:QUEUENAMEHERE",
   "Condition": {
      "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
   }
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

Wal*_*tDe 6

S3 是一个很好的示例,说明您需要在策略中包含资源声明。假设您希望在 S3 存储桶上有一个上传位置。

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"Upload",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:PutObject"],
      "Resource":["arn:aws:s3:::examplebucket/uploads/*"]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

在这些情况下,您确实不希望将资源默认到存储桶,因为这可能会意外导致全局访问。最好确保用户清楚了解允许或拒绝哪些访问。

但是,为什么在不需要像 SQS 那样的资源策略中需要它呢?为此,让我们深入了解如何使用资源策略。

您可以通过两种方式授予对资源的访问权限:

  1. IAM 主体(用户和角色)的基于身份的策略。
  2. 基于资源的政策

需要理解的重要部分是如何使用资源策略?资源策略实际上是IAM在策略评估逻辑中用于授权的。换句话说,资源不负责留给 IAM(身份和访问管理)的实际授权。

由于 IAM 要求每个策略语句都具有 Resource 或 NotResource,这意味着如果资源丢失,服务在将资源发送到 IAM 时需要添加该资源。因此,让我们从设计角度看一下让服务添加缺少的资源的含义。

  1. 该服务不再需要仅仅验证策略是否正确。
  2. 如果语句中缺少资源,服务将需要在将其发送到 IAM 之前更新策略。
  3. 现在可能存在两种不同版本的资源策略。用户创建用于编辑的一份和发送到 IAM 的一份。
  4. 它增加了用户出错以及通过将策略附加到错误资源而意外打开访问的可能性。如果我们修改问题中的策略声明,删除资源和条件声明,我们就有一个相当开放的策略。这很容易附加到错误的资源,尤其是从 CLI 或 terraform 中。
  {
   "Sid": "example-statement-ID",
   "Effect": "Allow",
   "Principal": {
     "AWS": "*"  
   },
   "Action": [
    "*"
   ]
  }
Run Code Online (Sandbox Code Playgroud)

注:我根据我对 AWS 如何实现访问管理的理解,从一般设计的角度回答了这个问题。AWS 实现该系统的方式可能有点不同,但我对此表示怀疑,因为策略评估逻辑确实需要针对性能进行优化,因此最好在一项服务 IAM 中实现这一点,而不是在每项服务中实现这一点。

希望有帮助。

如果您对政策评估逻辑的详细信息感兴趣,请额外阅读。

您可以通过 6 种方式拒绝访问:

  1. 身份政策
  2. 资源政策
  3. 组织政策(如果您的帐户属于组织)
  4. IAM 权限边界(如果设置)
  5. 会话假定策略(如果使用)
  6. 如果没有允许政策则隐含

以下是完整的 IAM 策略评估逻辑工作流程。 完整的 IAM 政策评估