Skip to content

1. AWS IAM (Identity and Access Management)

1.1 AWS IAM (Identity and Access Management) 概述

AWS IAM (Identity and Access Management) 概述

基于身份的策略 (Identity-based Policies):附加到 IAM 用户、组或角色。这些策略可让您指定该身份可执行哪些操作(其权限)。

例如,您可以将策略附加到名为 John 的 IAM 用户,以声明允许他执行 Amazon EC2 RunInstances 操作。

基于资源的策略 (Resource-based Policies):附加到某个资源。

例如,您可以将基于资源的策略附加到 Amazon S3 存储桶、Amazon SQS 队列、VPC 端点AWS Key Management Service 加密密钥以及 Amazon DynamoDB 表和流。

1. 策略中的各键及其解释

JSON 策略文档结构

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": "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 存储桶

2. 基于身份的策略

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

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

3. 基于资源的策略

json
{
  "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/*"
    ]
  }]
}
{
  "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 基于身份的策略示例