

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

# 默认密钥策略
<a name="key-policy-default"></a>

创建 KMS 密钥时，您可以为新的 KMS 密钥指定密钥策略。如果您不提供一个，请为您 AWS KMS 创建一个。 AWS KMS 使用的默认密钥策略会有所不同，具体取决于您是在 AWS KMS 控制台中创建密钥还是使用 AWS KMS API。

**以编程方式创建 KMS 密钥时采用的默认密钥策略**  
当您使用 [AWS KMS API](https://docs.aws.amazon.com/kms/latest/APIReference/) 以编程方式创建 KMS 密钥（包括使用[AWS SDKs](https://aws.amazon.com/tools/#sdk)、[AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/)或 [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)），并且未指定密钥策略时，会 AWS KMS 应用非常简单的默认密钥策略。此默认密钥策略有一个策略声明，该声明向拥有 KMS 密钥的用户授予使用 IAM 策略的权限，以允许对 KMS 密钥进行所有 AWS KMS 操作。 AWS 账户 有关此策略语句的更多信息，请参阅[允许访问 AWS 账户 并启用 IAM 策略](#key-policy-default-allow-root-enable-iam)。

**使用创建 KMS 密钥时的默认密钥策略 AWS 管理控制台**  
使用[创建 KMS 密钥](create-keys.md)时 AWS 管理控制台，密钥策略[以允许访问 AWS 账户 并启用 IAM 策略的策略](#key-policy-default-allow-root-enable-iam)声明开头。然后，控制台会添加[密钥管理员声明](#key-policy-default-allow-administrators)、[密钥用户声明](#key-policy-default-allow-users)以及（对于大多数密钥类型）一条允许委托人将 KMS 密钥用于[其他 AWS 服务的](#key-policy-service-integration)声明。您可以使用 AWS KMS 控制台的功能来指定 IAM 用户、IAM 角色、 AWS 账户 谁是密钥管理员以及谁是关键用户（或两者兼而有之）。

**权限**
+ [允许访问 AWS 账户 并启用 IAM 策略](#key-policy-default-allow-root-enable-iam)
+ [允许密钥管理员管理 KMS 密钥](#key-policy-default-allow-administrators)
+ [允许密钥用户使用 KMS 密钥](#key-policy-default-allow-users)
  + [允许密钥用户使用 KMS 密钥进行加密操作](#key-policy-users-crypto)
  + [允许密钥用户将 KMS 密钥用于 AWS 服务](#key-policy-service-integration)

## 允许访问 AWS 账户 并启用 IAM 策略
<a name="key-policy-default-allow-root-enable-iam"></a>

以下默认密钥策略语句至关重要。
+ 它为拥有 KMS 密钥的人提供对 KMS 密钥的完全访问权限。 AWS 账户 

  与其他 AWS 资源策略不同， AWS KMS 密钥策略不会自动向账户或其任何身份授予权限。若要授予账户管理员权限，密钥策略必须包含提供此权限的显式语句，如下所示。
+ 除密钥策略外，还允许账户使用 IAM policy 允许对 KMS 密钥进行访问。

  如果没有此权限，尽管拒绝访问密钥的 IAM policy 仍然有效，但是允许访问密钥的 IAM policy 将无效。
+ 此权限通过向账户管理员（包括账户根用户）授予无法删除的访问控制权限，来降低密钥变得无法管理的风险。

以下密钥策略语句是以编程方式创建的 KMS 密钥的完整默认密钥策略。这是 AWS KMS 控制台中创建的 KMS 密钥的默认密钥策略中的第一条策略声明。

```
{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:root"
   },
  "Action": "kms:*",
  "Resource": "*"
}
```

**允许 IAM policy 允许对 KMS 密钥的访问。**  <a name="allow-iam-policies"></a>
上面显示的密钥策略声明为拥有密钥的用户提供了使用 IAM 策略和密钥策略的权限，以允许对 KMS 密钥执行所有操作 (`kms:*`)。 AWS 账户   
本密钥策略声明中的主体是[账户主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)，其由此格式 (`arn:aws:iam::account-id:root`) 的 ARN 进行表示。账户委托人代表 AWS 账户及其管理员。  
当密钥策略语句中的主体是账户主体时，该策略语句不会向任何 IAM 主体授予使用 KMS 密钥的权限。相反，其授予账户使用 IAM policy *委托*密钥语句中指定的权限。此默认密钥策略语句允许账户使用 IAM policy 委托 KMS 密钥上所有操作 (`kms:*`) 的权限。

** 可以降低 KMS 密钥变得不可管理的风险。**  
与其他 AWS 资源策略不同， AWS KMS 密钥策略不会自动向账户或其任何委托人授予权限。若要授予任何主体（包括[账户主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)）权限，您必须使用明确提供权限的密钥策略语句。您无需授予账户主体或任何主体访问 KMS 密钥的权限。但是，授予账户主体访问权限有助于防止无法管理密钥。  
例如，假设您创建的密钥策略仅授予一个用户访问 KMS 密钥的权限。如果删除该用户，则密钥将变得无法管理，您必须[联系 AWS Support](https://console.aws.amazon.com/support/home#/case/create) 才能重新获得 KMS 密钥的访问权限。  
上面显示的密钥策略语句将向[账户主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)授予控制密钥的权限。账户委托人代表 AWS 账户 及其管理员，包括[账户 root 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html)。除非您删除 AWS 账户，否则账户根用户是唯一无法删除的主体。IAM 最佳实践不鼓励代表账户根用户采取操作，但紧急情况除外。但是，如果删除所有其他具有 KMS 密钥访问权限的用户和角色，则您可能需要充当账户根用户。

## 允许密钥管理员管理 KMS 密钥
<a name="key-policy-default-allow-administrators"></a>

控制台创建的默认密钥策略允许您选择账户中的 IAM 用户和角色，并使其成为*密钥管理员*。此语句称为*密钥管理员语句*。密钥管理员有权管理 KMS 密钥，但无权在[加密操作](kms-cryptography.md#cryptographic-operations)中使用 KMS 密钥。在原定设置视图或策略视图中创建 KMS 密钥时，您可以将 IAM 用户和角色添加到密钥管理员列表。

**警告**  
由于密钥管理员有权更改密钥策略和创建授权，因此他们可以向自己和其他人 AWS KMS 授予此策略中未指定的权限。  
有权管理标签和别名的委托人也可以控制对 KMS 密钥的访问。有关更多信息，请参阅 [ABAC for AWS KMS](abac.md)。

**注意**  
IAM 最佳实践不鼓励使用具有长期凭证的 IAM 用户。而应尽可能使用提供临时凭证的 IAM 角色。有关更多信息，请参阅《IAM 用户指南》中的 [IAM 安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)**。

以下示例在 AWS KMS 控制台的原定设置视图中显示了密钥管理员语句。

![\[控制台默认密钥策略中的密钥管理员，默认视图\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/console-key-policy-administrators-60.png)


以下示例是 AWS KMS 控制台的策略视图中的密钥管理员语句。此密钥管理员语句适用于单区域对称加密 KMS 密钥。

**注意**  
 AWS KMS 控制台在语句标识符下将密钥管理员添加到密钥策略中`"Allow access for Key Administrators"`。如果修改此语句标识符，则可能会影响控制台显示您对该语句所做修改的方式。

```
{
  "Sid": "Allow access for Key Administrators",
  "Effect": "Allow",
  "Principal": {"AWS":"arn:aws:iam::111122223333:role/ExampleAdminRole"},
  "Action": [
    "kms:Create*",
    "kms:Describe*",
    "kms:Enable*",
    "kms:List*",
    "kms:Put*",
    "kms:Update*",
    "kms:Revoke*",
    "kms:Disable*",
    "kms:Get*",
    "kms:Delete*",
    "kms:TagResource",
    "kms:UntagResource",
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion",
    "kms:RotateKeyOnDemand"
  ],
  "Resource": "*"
}
```

最常见 KMS 密钥、单区域对称加密 KMS 密钥的原定设置密钥管理员语句允许以下权限。有关每个权限的详细信息，请参阅 [AWS KMS 权限](kms-api-permissions-reference.md)。

当您使用 AWS KMS 控制台创建 KMS 密钥时，控制台会将您指定的用户和角色添加到密钥管理员语句中的`Principal`元素中。

这些权限中有很多都包含通配符 (`*`)，使用它可以允许以指定动词开头的所有权限。因此，在 AWS KMS 添加新的 API 操作时，自动允许密钥管理员使用它们。您不必更新密钥策略即可包含新操作。如果您希望将密钥管理员限制在一组固定的 API 操作中，则可以[更改密钥策略](key-policy-modifying.md)。

**`kms:Create*`**  
允许 [`kms:CreateAlias`](kms-alias.md) 和 [`kms:CreateGrant`](grants.md)。（`kms:CreateKey` 权限仅在 IAM policy 中有效。）

**`kms:Describe*`**  
允许 [`kms:DescribeKey`](viewing-keys.md)。需要 `kms:DescribeKey` 权限才能查看 AWS 管理控制台中 KMS 密钥的密钥详细信息页面。

**`kms:Enable*`**  
允许 [`kms:EnableKey`](enabling-keys.md)。对于对称加密 KMS 密钥，它还允许 [`kms:EnableKeyRotation`](rotate-keys.md)。

**`kms:List*`**  
允许 [`kms:ListGrants`](grants.md)、[https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeyPolicies.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeyPolicies.html) 和 [`kms:ListResourceTags`](tagging-keys.md)。（查看 AWS 管理控制台中的 KMS 密钥所需的 `kms:ListAliases` 和 `kms:ListKeys` 权限仅在 IAM policy 中有效。）

**`kms:Put*`**  
允许 [https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html)。此权限允许密钥管理员更改此 KMS 密钥的密钥策略。

**`kms:Update*`**  
允许 [`kms:UpdateAlias`](alias-update.md) 和 [https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html)。对于多区域密钥，它允许此 KMS 密钥上的 [`kms:UpdatePrimaryRegion`](multi-region-update.md#update-primary-console)。

**`kms:Revoke*`**  
允许 [`kms:RevokeGrant`](grant-delete.md)，即允许密钥管理员[删除授权](grant-delete.md)，即使管理员不是授权中的[停用主体](grants.md#terms-retiring-principal)。

**`kms:Disable*`**  
允许 [`kms:DisableKey`](enabling-keys.md)。对于对称加密 KMS 密钥，它还允许 [`kms:DisableKeyRotation`](rotate-keys.md)。

**`kms:Get*`**  
允许 [`kms:GetKeyPolicy`](key-policy-viewing.md) 和 [`kms:GetKeyRotationStatus`](rotate-keys.md)。对于具有导入密钥材料的 KMS 密钥，它允许 [https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html)。对于非对称 KMS 密钥，它允许 [https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)。需要 `kms:GetKeyPolicy` 权限才能查看 AWS 管理控制台中 KMS 密钥的密钥策略。

**`kms:Delete*`**  
允许 [`kms:DeleteAlias`](kms-alias.md)。对于具有导入密钥材料的密钥，它允许 [`kms:DeleteImportedKeyMaterial`](importing-keys.md)。`kms:Delete*` 权限不允许密钥管理员删除 KMS 密钥 (`ScheduleKeyDeletion`)。

**`kms:TagResource`**  
允许 [`kms:TagResource`](tagging-keys.md)，以此允许密钥管理员向 KMS 密钥添加标签。由于标签也可用于控制对 KMS 密钥的访问，因此管理员通过此权限可允许或拒绝对 KMS 密钥的访问。有关更多信息，请参阅 [ABAC for AWS KMS](abac.md)。

**`kms:UntagResource`**  
允许 [`kms:UntagResource`](tagging-keys.md)，以此允许密钥管理员从 KMS 密钥删除标签。由于标签可用于控制对密钥的访问，因此管理员通过此权限可允许或拒绝对 KMS 密钥的访问。有关更多信息，请参阅 [ABAC for AWS KMS](abac.md)。

**`kms:ScheduleKeyDeletion`**  
允许 [https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html)，以此允许密钥管理员[删除此 KMS 密钥](deleting-keys.md)。要删除此权限，请清除 **Allow key administrators to delete this key**（允许密钥管理员删除此密钥）选项。

**`kms:CancelKeyDeletion`**  
允许 [https://docs.aws.amazon.com/kms/latest/APIReference/API_CancelKeyDeletion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_CancelKeyDeletion.html)，以此允许密钥管理员[取消此 KMS 密钥的删除](deleting-keys.md)。要删除此权限，请清除 **Allow key administrators to delete this key**（允许密钥管理员删除此密钥）选项。

**`kms:RotateKeyOnDemand`**  
允许 [https://docs.aws.amazon.com/kms/latest/APIReference/API_RotateKeyOnDemand.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_RotateKeyOnDemand.html)，此操作将允许密钥管理员[按需轮换此 KMS 密钥中的密钥材料](rotating-keys-on-demand.md)。

 

AWS KMS 在创建特殊用途密钥时，将以下权限添加到默认密钥管理员语句中。

**`kms:ImportKeyMaterial`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 权限允许密钥管理员将密钥材料导入 KMS 密钥。仅当[创建不含密钥材料的 KMS 密钥](importing-keys-create-cmk.md)时，此权限才包含在密钥策略中。

**`kms:ReplicateKey`**  
该[https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html)权限允许密钥管理员在不同的 AWS 区域中[创建多区域主密钥的副本](multi-region-keys-replicate.md)。仅当您创建多区域主键或副本键时，此权限才会包含在密钥策略中。

**`kms:UpdatePrimaryRegion`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) 权限允许密钥管理员[将多区域副本密钥更改为多区域主键](multi-region-update.md)。仅当您创建多区域主键或副本键时，此权限才会包含在密钥策略中。

## 允许密钥用户使用 KMS 密钥
<a name="key-policy-default-allow-users"></a>

控制台为 KMS 密钥创建的默认密钥策略允许您在账户中选择 IAM 用户和 IAM 角色以及外部角色 AWS 账户，并使其成为*密钥用户*。

控制台将两个策略语句添加到密钥用户的密钥策略中。
+ [直接使用 KMS 密钥](#key-policy-users-crypto) — 第一个密钥策略语句授予密钥用户将 KMS 密钥直接用于该类型 KMS 密钥支持的所有[加密操作](kms-cryptography.md#cryptographic-operations)的权限。
+ 将 [KMS 密钥用于 AWS 服务](#key-policy-service-integration) — 第二项策略声明允许密钥用户允许与其集成的 AWS 服务代表他们使用 KMS 密钥 AWS KMS 来保护资源，例如 Amazon S3 存储桶和 Amazon DynamoDB 表。

创建 KMS 密钥时，您可以将 IAM 用户、IAM 角色和其他 AWS 账户 角色添加到密钥用户列表中。您也可以使用控制台的默认密钥策略视图来编辑该列表，如下图所示。默认密钥策略视图可从密钥详细信息页面获取。有关允许其他 AWS 账户 用户使用 KMS 密钥的更多信息，请参阅[允许其他账户中的用户使用 KMS 密钥](key-policy-modifying-external-accounts.md)。

**注意**  
IAM 最佳实践不鼓励使用具有长期凭证的 IAM 用户。而应尽可能使用提供临时凭证的 IAM 角色。有关更多信息，请参阅《IAM 用户指南》中的 [IAM 安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)**。

![\[控制台默认密钥策略中的密钥用户，默认视图\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/console-key-policy-users-sm.png)


单区域对称的原定设置*密钥用户语句*允许以下权限。有关每个权限的详细信息，请参阅 [AWS KMS 权限](kms-api-permissions-reference.md)。

当您使用 AWS KMS 控制台创建 KMS 密钥时，控制台会将您指定的用户和角色添加到每个密钥用户语句中的`Principal`元素中。

**注意**  
 AWS KMS 控制台在语句标识符`"Allow use of the key"`和下将密钥用户添加到密钥策略中`"Allow attachment of persistent resources"`。如果修改这些语句标识符，则可能会影响控制台显示您对该语句所做修改的方式。

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": [
    "arn:aws:iam::111122223333:role/ExampleRole",
    "arn:aws:iam::444455556666:root"
  ]},
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
  ],
  "Resource": "*"
},
{
  "Sid": "Allow attachment of persistent resources",
  "Effect": "Allow",
  "Principal": {"AWS": [
    "arn:aws:iam::111122223333:role/ExampleRole",
    "arn:aws:iam::444455556666:root"
  ]},
  "Action": [
    "kms:CreateGrant",
    "kms:ListGrants",
    "kms:RevokeGrant"
  ],
  "Resource": "*",
  "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
}
```

## 允许密钥用户使用 KMS 密钥进行加密操作
<a name="key-policy-users-crypto"></a>

密钥用户有权在 KMS 密钥支持的所有[加密操作](kms-cryptography.md#cryptographic-operations)中直接使用 KMS 密钥。他们还可以使用该[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)操作在 AWS KMS 控制台或使用 AWS KMS API 操作来获取有关 KMS 密钥的详细信息。

默认情况下， AWS KMS 控制台会将密钥用户语句添加到默认密钥策略中，如下例所示。由于支持的 API 操作不同，策略语句中针对对称加密 KMS 密钥、HMAC KMS 密钥、用于公有密钥加密的非对称 KMS 密钥以及用于签名和验证的非对称 KMS 密钥的操作略有不同。

**对称加密 KMS 密钥**  
控制台将以下语句添加到对称加密 KMS 密钥的密钥策略中。  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",  
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:Decrypt",
    "kms:DescribeKey",
    "kms:Encrypt",
    "kms:GenerateDataKey*",
    "kms:ReEncrypt*"
  ],
  "Resource": "*"
}
```

**HMAC KMS 密钥**  
控制台将以下语句添加到 HMAC KMS 密钥的密钥策略中。  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",  
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:DescribeKey",
    "kms:GenerateMac",
    "kms:VerifyMac"
  ],
  "Resource": "*"
}
```

**用于公有密钥加密的非对称 KMS 密钥**  
对于密钥用法为 **Encrypt and decrypt**（加密和解密）的非对称 KMS 密钥，控制台将以下语句添加到其密钥策略中。  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:DescribeKey",
    "kms:GetPublicKey"
  ],
  "Resource": "*"
}
```

**用于签名和验证的非对称 KMS 密钥**  
对于密钥用法为 **Sign and verify**（签名和验证）的非对称 KMS 密钥，控制台将以下语句添加到其密钥策略中。  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:DescribeKey",
    "kms:GetPublicKey",
    "kms:Sign",
    "kms:Verify"
  ],
  "Resource": "*"
}
```

**用于派生共享密钥的非对称 KMS 密钥**  
对于密钥用法为**密钥协议**的非对称 KMS 密钥，控制台会将以下语句添加到其密钥政策中。  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:DescribeKey",
    "kms:GetPublicKey",
    "kms:DeriveSharedSecret"
  ],
  "Resource": "*"
}
```

这些语句中的操作赋予密钥用户以下权限。

[https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)  
允许密钥用户使用此 KMS 密钥加密数据。

[https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)  
允许密钥用户使用此 KMS 密钥解密数据。

[https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)  
允许密钥用户使用此 KMS 密钥派生共享密钥。

[https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)  
允许密钥用户获取有关此 KMS 密钥的详细信息，包括其标识符、创建日期和密钥状态。它还允许密钥用户在 AWS KMS 控制台中显示有关 KMS 密钥的详细信息。

`kms:GenerateDataKey*`  
允许密钥用户请求对称数据密钥或非对称数据密钥对，以执行客户端加密操作。控制台使用\$1 通配符表示对以下 API 操作的权限：[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyWithoutPlaintext[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)、和[GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)。这些权限仅对加密数据密钥的对称 KMS 密钥有效。

[kms: GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)  
允许密钥用户使用 HMAC KMS 密钥生成 HMAC 标签。

[kms: GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)  
允许密钥用户下载非对称 KMS 密钥的公有密钥。与您共享此公钥的各方可以对外部的数据进行加密 AWS KMS。但是，这些密文只能通过调用 AWS KMS中的 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作进行解密。

[kms: ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) \$1   
允许密钥用户重新加密最初使用此 KMS 密钥加密的数据，或使用此 KMS 密钥重新加密之前已加密的数据。该[ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)操作需要同时访问源 KMS 密钥和目标 KMS 密钥。为此，可以允许对源 KMS 密钥具备 `kms:ReEncryptFrom` 权限，对目标 KMS 密钥具备 `kms:ReEncryptTo` 权限。但是，为简单起见，控制台允许对两个 KMS 密钥具备 `kms:ReEncrypt*` 权限（采用 `*` 通配符）。

[kms:Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)  
允许密钥用户使用此 KMS 密钥签署消息。

[kms:Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)  
允许密钥用户使用此 KMS 密钥验证签名。

[kms: VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)  
允许密钥用户使用 HMAC KMS 密钥验证 HMAC 标签。

## 允许密钥用户将 KMS 密钥用于 AWS 服务
<a name="key-policy-service-integration"></a>

控制台中的默认密钥策略还为密钥用户提供了在使用授权的 AWS 服务中保护其数据所需的授予权限。 AWS 服务通常使用授权来获得使用 KMS 密钥的特定和有限权限。

此密钥策略声明允许密钥用户创建、查看和撤消对 KMS 密钥的授权，但前提是授权操作请求来自[与 AWS KMS集成的AWS 服务](https://aws.amazon.com/kms/features/#AWS_Service_Integration)。[kms: GrantIsFor AWSResource](conditions-kms.md#conditions-kms-grant-is-for-aws-resource) 策略条件不允许用户直接调用这些授权操作。当密钥用户允许时， AWS 服务可以代表用户创建授权，允许该服务使用 KMS 密钥来保护用户的数据。

密钥用户必须具备这些授权权限，才能一起使用 KMS 密钥和集成服务，但仅有这些权限还不够。密钥用户还必须具备使用集成服务的权限。有关向用户提供与集成的 AWS 服务的访问权限的详细信息 AWS KMS，请参阅集成服务的文档。

```
{
  "Sid": "Allow attachment of persistent resources",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:CreateGrant",
    "kms:ListGrants",
    "kms:RevokeGrant"
  ],
  "Resource": "*",
  "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
}
```

例如，密钥用户可以通过以下方式对 KMS 密钥使用这些权限。
+ 将此 KMS 密钥与 Amazon Elastic Block Store (Amazon EBS) 和 Amazon Elastic Compute Cloud (Amazon EC2) 结合使用，将加密的 EBS 卷附加到 EC2 实例。密钥用户向 Amazon EC2 隐式授予使用 KMS 密钥将加密卷挂载到实例的权限。有关更多信息，请参阅[亚马逊 Elastic Block Store (Amazon EBS) 的使用方式 AWS KMS](services-ebs.md)。
+ 将此 KMS 密钥用于 Amazon Redshift 以启动加密集群。密钥用户向 Amazon Redshift 隐式授予使用 KMS 密钥启动加密集群并创建加密快照的权限。有关更多信息，请参阅[亚马逊 Redshift 的使用方式 AWS KMS](services-redshift.md)。
+ 将此 KMS 密钥与其他[与 AWS KMS集成的AWS 服务](service-integration.md)一起使用，这些服务使用授权服务创建、管理或使用这些服务加密的资源。

默认密钥策略允许密钥用户向*所有*使用授权的集成服务委托授权权限。但是，您可以创建自定义密钥策略，将权限限制为指定 AWS 服务。有关更多信息，请参阅 [kms: ViaService](conditions-kms.md#conditions-kms-via-service) 条件键。