

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

# 检查密钥策略
<a name="determining-access-key-policy"></a>

[密钥策略](key-policies.md)是控制对 KMS 密钥访问的主要方法。每个 KMS 密钥都有且只有一个密钥策略。

如果密钥策略由[默认密钥策略](key-policy-default.md#key-policy-default-allow-root-enable-iam)组成或包含默认密钥策略，则密钥策略允许账户中的 IAM 管理员使用 IAM policy 控制对 KMS 密钥的访问。此外，如果密钥策略赋予[其他 Amazon Web Services 账户](key-policy-modifying-external-accounts.md) 使用 KMS 密钥的权限，则外部账户中的 IAM 管理员可以使用 IAM policy 委派这些权限。要确定可访问 KMS 密钥的委托人的完整列表，[请检查 IAM policy](determining-access-iam-policies.md)。

要查看 Amazon KMS [客户托管密钥或您账户[Amazon 托管式密钥](concepts.md#aws-managed-key)中的密钥](concepts.md#customer-mgn-key)政策，请在 Amazon KMS API 中使用 Amazon Web Services 管理控制台 或[GetKeyPolicy](https://docs.amazonaws.cn/kms/latest/APIReference/API_GetKeyPolicy.html)操作。要查看密钥策略，必须对 KMS 密钥具备 `kms:GetKeyPolicy` 权限。有关查看 KMS 密钥的密钥策略的说明，请参阅 [查看密钥政策](key-policy-viewing.md)。

检查密钥策略文档，并记下每个策略语句的 `Principal` 元素中指定的所有委托人。在`Allow`生效的策略声明中，IAM 用户、IAM 角色以及`Principal`元素 Amazon Web Services 账户 中的角色有权访问此 KMS 密钥。

**注意**  
除非您使用[条件](policy-conditions.md)限制密钥政策，否则不要在允许权限的任何密钥政策语句将主体设置为星号（\*）。星号赋予每个身份使用 KMS 密钥的 Amazon Web Services 账户 权限，除非其他策略声明明确拒绝。其他用户只要在自己的账户中拥有相应权限，就 Amazon Web Services 账户 可以使用您的 KMS 密钥。

以下示例使用[默认密钥策略](key-policy-default.md)中的策略语句来演示如何执行该操作。

**Example 策略语句 1**  

```
{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
  "Action": "kms:*",
  "Resource": "*"
}
```
在保单声明1中，`arn:aws:iam::111122223333:root`是指 Amazon Web Services 账户 111122223333的[Amazon 账户本金](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)。（这不是账户的根用户。） 默认情况下，当您使用创建新的 KMS 密钥或以编程方式创建新的 KMS 密钥但不提供密钥策略时 Amazon Web Services 管理控制台，密钥策略文档中会包含类似这样的策略声明。  
包含允许访问[账户中的 IAM 策略的声明的 Amazon Web Services 账户 密钥策略文档，允许访问 KMS 密钥](key-policy-default.md#key-policy-default-allow-root-enable-iam)。这意味着，即使账户中的用户和角色未在密钥策略文档中显式列为主体，也可以访问 KMS 密钥。请[仔细检查所有 Amazon Web Services 账户 列为委托人的所有 IAM 策略](determining-access-iam-policies.md)，以确定它们是否允许访问此 KMS 密钥。

**Example 策略语句 2**  

```
{
  "Sid": "Allow access for Key Administrators",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/KMSKeyAdmins"},
  "Action": [
    "kms:Describe*",
    "kms:Put*",
    "kms:Create*",
    "kms:Update*",
    "kms:Enable*",
    "kms:Revoke*",
    "kms:List*",
    "kms:Disable*",
    "kms:Get*",
    "kms:Delete*",
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion"
  ],
  "Resource": "*"
}
```
在政策声明 2 中，`arn:aws:iam::111122223333:role/KMSKeyAdmins`提及 Amazon Web Services 账户 111122223333 中名为 KMSKey Admins 的 IAM 角色。被授权代入该角色的用户被允许执行策略语句中列出的操作，即用于管理 KMS 密钥的管理操作。

**Example 策略语句 3**  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"},
  "Action": [
    "kms:DescribeKey",
    "kms:GenerateDataKey*",
    "kms:Encrypt",
    "kms:ReEncrypt*",
    "kms:Decrypt"
  ],
  "Resource": "*"
}
```
在政策声明 3 中，`arn:aws:iam::111122223333:role/EncryptionApp`指的是在 Amazon Web Services 账户 111122223333 EncryptionApp 中命名的 IAM 角色。被授权代入此角色的主体被允许执行策略语句中列出的操作，这包括对称加密 KMS 密钥的 [加密操作](kms-cryptography.md#cryptographic-operations)。

**Example 策略语句 4**  

```
{
  "Sid": "Allow attachment of persistent resources",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"},
  "Action": [
    "kms:ListGrants",
    "kms:CreateGrant",
    "kms:RevokeGrant"
  ],
  "Resource": "*",
  "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
}
```
在政策声明 4 中，`arn:aws:iam::111122223333:role/EncryptionApp`指的是在 Amazon Web Services 账户 111122223333 EncryptionApp 中命名的 IAM 角色。被授权代入此角色的主体被允许执行策略语句中列出的操作。向大多数[与 Amazon KMS集成的Amazon 服务](service-integration.md)（特别是使用[授权](grants.md)的服务）委托 KMS 密钥使用权限时，都将需要将这些操作以及**示例策略语句 3** 中允许的操作结合使用。`Condition`元素中的 [kms: GrantIsFor AWSResource](conditions-kms.md#conditions-kms-grant-is-for-aws-resource) 值可确保只有当委托是与授权集成 Amazon KMS 并使用授权进行授权的 Amazon 服务时，才允许委托。

要了解可以在密钥策略文档中指定委托人的所有不同方法，请参阅 *IAM 用户指南*中的[指定委托人](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements.html#Principal_specifying)。

要了解有关 Amazon KMS 密钥策略的更多信息，请参阅[中的关键政策 Amazon KMS](key-policies.md)。