

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# IAM 策略示例
<a name="customer-managed-policies"></a>

在此部分中，可以找到允许执行各种 AWS KMS 操作的权限的示例 IAM policy。

**重要**  
仅当 KMS 密钥的密钥策略也允许时，才允许提供以下策略中的某些权限。有关更多信息，请参阅 [权限参考](kms-api-permissions-reference.md)。

有关编写和格式化 JSON 策略文档的帮助，请参阅 *IAM 用户指南*中的 [IAM JSON 策略参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

**Topics**
+ [允许用户在 AWS KMS 控制台中查看 KMS 密钥](#iam-policy-example-read-only-console)
+ [允许用户创建 KMS 密钥](#iam-policy-example-create-key)
+ [允许用户使用特定 KMS 密钥进行加密和解密 AWS 账户](#iam-policy-example-encrypt-decrypt-one-account)
+ [允许用户使用特定 AWS 账户 和区域中的任何 KMS 密钥进行加密和解密](#iam-policy-example-encrypt-decrypt-one-account-one-region)
+ [允许用户使用特定 KMS 密钥进行加密和解密](#iam-policy-example-encrypt-decrypt-specific-cmks)
+ [阻止用户禁用或删除任何 KMS 密钥](#iam-policy-example-deny-disable-delete)

## 允许用户在 AWS KMS 控制台中查看 KMS 密钥
<a name="iam-policy-example-read-only-console"></a>

以下 IAM 策略允许用户以只读方式访问 AWS KMS 控制台。拥有这些权限的用户可以查看其中的所有 KMS 密钥 AWS 账户，但他们无法创建或更改任何 KMS 密钥。

要在**AWS 托管式密钥**和**客户托管密钥页面上查看 [K](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html) MS 密钥**，即使密钥没有[标签或别名ListAliases，委托人也需要 k [m](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) s:、kms: 和 tag: GetResources](https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html) 权限。ListKeys在 [KMS 密钥详细信息页面上查看可选的 KMS 密钥表列和数据需要其余权限，尤其是 kms: DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)。需要 ia [m: ListUsers](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html) 和 ia ListRoles m[: 权限](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html)才能在默认视图中毫无错误地显示密钥策略。要查看**自定义密钥存储库页面上的数据以及自定义密钥存储库**中 KMS 密钥的详细信息，委托人还需要 k [ms: DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 权限。

如果您限制用户的控制台对特定 KMS 密钥的访问，控制台将显示不可见的每个 KMS 密钥的错误。

此策略包含两个策略语句。第一个策略语句中的 `Resource` 元素允许对示例 AWS 账户的所有区域中的所有 KMS 密钥的指定权限。控制台查看器不需要额外的访问权限，因为 AWS KMS 控制台仅显示委托人账户中的 KMS 密钥。即使他们有权在其他版本中查看 KMS 密钥，也是如此 AWS 账户。其余 AWS KMS 和 IAM 权限需要一个`"Resource": "*"`元素，因为它们不适用于任何特定的 KMS 密钥。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ReadOnlyAccessForAllKMSKeysInAccount",
      "Effect": "Allow",
      "Action": [
        "kms:GetPublicKey",        
        "kms:GetKeyRotationStatus",
        "kms:GetKeyPolicy",
        "kms:DescribeKey",
        "kms:ListKeyPolicies",
        "kms:ListResourceTags",
        "tag:GetResources"
      ],
      "Resource": "arn:aws:kms:*:{{111122223333}}:key/*"
    },
    {
      "Sid": "ReadOnlyAccessForOperationsWithNoKMSKey",
      "Effect": "Allow",
      "Action": [
        "kms:ListKeys",
        "kms:ListAliases",
        "iam:ListRoles",
        "iam:ListUsers"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## 允许用户创建 KMS 密钥
<a name="iam-policy-example-create-key"></a>

以下 IAM policy 允许用户创建所有类型的 KMS 密钥。该`Resource`元素的值`*`是因为该`CreateKey`操作不使用任何特定的 AWS KMS 资源（KMS 密钥或别名）。

要限制用户使用特定类型的 KMS 密钥，请使用 k [ms: KeySpec](conditions-kms.md#conditions-kms-key-spec)、[kms: KeyUsage](conditions-kms.md#conditions-kms-key-usage) 和 k [ms: KeyOrigin](conditions-kms.md#conditions-kms-key-origin) 条件密钥。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "kms:CreateKey",
    "Resource": "*"
  }
}
```

------

创建密钥的委托人可能需要一些相关权限。
+ **kms: PutKeyPolicy** — 拥有`kms:CreateKey`权限的委托人可以为 KMS 密钥设置初始密钥策略。但是，`CreateKey`调用者必须拥有 k [ms: PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 权限，允许他们更改 KMS 密钥策略，或者必须指定`BypassPolicyLockoutSafetyCheck`参数`CreateKey`，但不建议这样做。`CreateKey` 调用方可以从 IAM policy 中获得对 KMS 密钥的 `kms:PutKeyPolicy` 权限，也可以将此权限包含在他们正在创建的 KMS 密钥的密钥策略中。
+ **kms: TagResource** — 要在`CreateKey`操作期间向 KMS 密钥添加标签，`CreateKey`调用者必须在 IAM 策略中TagResource拥有 [kms:](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html) 权限。将此权限包含在新 KMS 密钥的密钥策略中是不够的。但是，如果 `CreateKey` 调用方在初始密钥策略中包括 `kms:TagResource`，他们可以在创建 KMS 密钥后在单独调用中添加标签。
+ **kms: CreateAlias** — 在 AWS KMS 控制台中创建 KMS 密钥的委托人必须对 [KMS 密钥和别名拥有 kms: CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) 权限。（控制台进行两次调用；一次对 `CreateKey`，一次对 `CreateAlias`）。您必须在 IAM policy 中提供别名权限。您可以在密钥策略或 IAM policy 中提供 KMS 密钥权限。有关更多信息，请参阅 [控制对别名的访问](alias-access.md)。

此外`kms:CreateKey`，以下 IAM 策略提供`kms:TagResource`对中所有 KMS 密钥的`kms:CreateAlias`权限 AWS 账户 以及对账户所有别名的权限。它还包括一些只能在 IAM policy 中提供的有用的只读权限。

此 IAM policy 不包含 `kms:PutKeyPolicy` 权限或可以在密钥策略中设置的任何其他权限。它是在密钥策略中设置这些权限的[最佳实践](iam-policies-best-practices.md)，在该密钥策略中，这些权限专门应用于一个 KMS 密钥。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPermissionsForParticularKMSKeys",
      "Effect": "Allow",
      "Action": "kms:TagResource",
      "Resource": "arn:aws:kms:*:{{111122223333}}:key/*"
    },
    {
      "Sid": "IAMPermissionsForParticularAliases",
      "Effect": "Allow",
      "Action": "kms:CreateAlias",
      "Resource": "arn:aws:kms:*:{{111122223333}}:alias/*"
    },
    {
      "Sid": "IAMPermissionsForAllKMSKeys",
      "Effect": "Allow",
      "Action": [
        "kms:CreateKey",
        "kms:ListKeys",
        "kms:ListAliases"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## 允许用户使用特定 KMS 密钥进行加密和解密 AWS 账户
<a name="iam-policy-example-encrypt-decrypt-one-account"></a>

以下 IAM 策略允许用户使用 111122223333 中的 AWS 账户 任何 KMS 密钥加密和解密数据。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": "arn:aws:kms:*:{{111122223333}}:key/*"
  }
}
```

------

## 允许用户使用特定 AWS 账户 和区域中的任何 KMS 密钥进行加密和解密
<a name="iam-policy-example-encrypt-decrypt-one-account-one-region"></a>

以下 IAM 策略允许用户使用美国西部（俄勒冈）地区的任何 KMS 密钥加密和解密数据。 AWS 账户 `111122223333`

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": [
      "arn:aws:kms:us-west-2:{{111122223333}}:key/*"
    ]
  }
}
```

------

## 允许用户使用特定 KMS 密钥进行加密和解密
<a name="iam-policy-example-encrypt-decrypt-specific-cmks"></a>

以下 IAM policy 允许用户使用 `Resource` 元素中指定的两个 KMS 密钥来加密和解密数据。在 IAM policy 语句中指定 KMS 密钥时，必须使用 KMS 密钥的[密钥 ARN](concepts.md#key-id-key-ARN)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": [
      "arn:aws:kms:us-west-2:{{111122223333}}:key/1234abcd-12ab-34cd-56ef-1234567890ab",
      "arn:aws:kms:us-west-2:{{111122223333}}:key/01234abc-d12a-b34c-d56e-f1234567890a'"
    ]
  }
}
```

------

## 阻止用户禁用或删除任何 KMS 密钥
<a name="iam-policy-example-deny-disable-delete"></a>

以下 IAM policy 阻止用户禁用或删除任何 KMS 密钥，即使其他 IAM policy 或密钥策略允许这些权限时也是如此。以显式方式拒绝权限的策略将覆盖所有其他策略，甚至包括那些以显式方式允许相同权限的策略。有关更多信息，请参阅 [AWS KMS 权限疑难解答](policy-evaluation.md)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Deny",
    "Action": [
      "kms:DisableKey",
      "kms:ScheduleKeyDeletion"
    ],
    "Resource": "*"
  }
}
```

------