Skip to content
Go back

AWS 知识点 - IAM 策略(重点解析)

| 0 Views Edit page

AWS IAM 策略的重点解析。


IAM 策略的重点解析

一、策略中的各键及其解释

JSON 策略文档结构

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "FirstStatement",
      "Effect": "Allow",
      "Action": ["iam:ChangePassword"],
      "Resource": "*"
    },
    {
      "Sid": "SecondStatement",
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*"
    },
    {
      "Sid": "ThirdStatement",
      "Effect": "Allow",
      "Action": [
        "s3:List*",
        "s3:Get*"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket-confidential-data",
        "arn:aws:s3:::amzn-s3-demo-bucket-confidential-data/*"
      ],
      "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
    }
  ]
}
  • Version - 指定要使用的策略语言版本。建议您使用最新的 2012-10-17 版本。
  • Statement - 将该主要策略元素作为以下元素的容器。可以在一个策略中包含多个语句。
  • Sid(可选) - 包括可选的语句 ID 以区分不同的语句。
  • Effect - 使用 Allow 或 Deny 指示策略是允许还是拒绝访问。
  • Principal(仅在某些情况下需要) - 如果创建基于资源的策略,您必须指示要允许或拒绝访问的账户、用户、角色或联合身份用户。如果要创建 IAM 权限策略以附加到用户或角色,则不能包含该元素。主体暗示为该用户或角色。
  • Action - 包括策略允许或拒绝的操作列表。
  • Resource(仅在某些情况下需要)- 如果创建 IAM 权限策略,您必须指定操作适用的资源列表。如果创建基于资源的策略,则该元素是可选的。如果不包含该元素,则该操作适用的资源是策略附加到的资源。
  • Condition(可选) - 指定策略在哪些情况下授予权限。

上述的例子是基于身份的策略,因此没有指定 Principal

  • Sid(语句 ID)为 FirstStatement 的第一个语句让具有附加策略的用户更改自己的密码。

    该语句中的 Resource 元素是“*”(这表示“所有资源”)。但实际上,ChangePassword API 操作(或等效的 change-password CLI 命令)仅影响发出请求的用户的密码。

  • 第二个语句使用户可以列出其 AWS 账户 中的所有 Amazon S3 存储桶。

    该语句中的 Resource 元素是 ”*“(这表示“所有资源”)。但由于策略没有为其他账户中的资源授予访问权限,因此,用户只能列出自己的 AWS 账户 中的存储桶。

  • 第三个语句允许用户列出和检索名为 amzn-s3-demo-bucket-confidential-data 的存储桶中的任何对象,但是仅当使用 Multi-Factor Authentication (MFA) 对用户进行了身份验证时才能如此。策略中的 Condition 元素将强制实施 MFA 身份验证。
    如果策略语句包含 Condition 元素,则仅当 Condition 元素计算为 true 时,语句才有效。在此示例中,Condition 在用户进行了 MFA 身份验证时计算为 true。如果用户没有进行 MFA 身份验证,则此 Condition 计算为 false。在这种情况下,此策略中的第三个语句不会应用,因此用户将无法访问 amzn-s3-demo-bucket-confidential-data 存储桶

二、基于身份的策略

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "s3:ListBucket",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
  }
}

由于基于身份的策略之后会分配给用户、组和角色,因此不需要指定 Principal 主体

三、基于资源的策略

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "1",
    "Effect": "Allow",
    "Principal": {"AWS": ["arn:aws:iam::account-id:root"]},
    "Action": "s3:*",
    "Resource": [
      "arn:aws:s3:::amzn-s3-demo-bucket",
      "arn:aws:s3:::amzn-s3-demo-bucket/*"
    ]
  }]
}

而基于资源的策略需要指定 Principal 主体,来限制特定的用户、组和角色可以操作该资源。

四、策略示例

IAM 基于身份的策略示例


Edit page