

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

# 在 Amazon 已验证权限中加密资源
<a name="security-data-protection-cmk"></a>

Amazon Verified Permissions 默认提供加密，以使用 AWS 自有的加密密钥保护敏感的静态客户数据。作为额外的保护层，Amazon Verified Permissions 允许您使用 AWS Key Management Service (AWS KMS) 客户托管式密钥 s (CMK) 加密您的策略存储。此功能可确保通过静态加密保护敏感数据，从而帮助您：
+ 减轻应用程序端的运营负担，以保护敏感数据
+ 控制谁可以通过您自己的权限查看您的授权策略 AWS KMS 客户托管式密钥的详细信息
+ 构建符合严格的加密合规性和法规要求的安全敏感型应用程序

以下各节说明如何为新的策略存储配置加密以及如何管理加密密钥。

## AWS KMS Amazon 验证权限的密钥类型
<a name="kms-key-types"></a>

Amazon 已验证权限 AWS KMS 与集成，用于管理用于 encrypting/decrypting 客户数据的加密密钥。要了解有关密钥类型和状态的更多信息，请参阅《AWS KMS Developer Guide》**中的 [AWS Key Management Service concepts](https://docs.aws.amazon.com/kms/latest/developerguide/concepts-intro.html)。创建新的策略存储时，可以从以下 AWS KMS 密钥类型中选择对数据进行加密：

### AWS 自有密钥
<a name="aws-owned-key"></a>

默认加密类型。Amazon Verified Permissions 拥有密钥，您无需支付任何额外费用，并且会在创建时对静态资源数据进行加密。使用已验证权限所拥有的密钥，无需在代码或应用程序中对数据进行额外配置。 encrypt/decrypt 

### 客户托管密钥
<a name="customer-managed-key"></a>

您在 AWS 账户中创建、拥有和管理密钥。你可以完全控制 AWS KMS 钥匙。 AWS KMS 客户托管式密钥 s 需收费。有关更多信息，请参阅 [AWS KMS 定价](https://aws.amazon.com/kms/pricing/)页面。有关密钥类型的更多信息，请参阅《*AWS KMS 开发人员指南》*中的[客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-mgn-key)。

当您 客户托管式密钥 为顶级资源（即策略存储）指定加密时，Verified Permissions 会使用该密钥对资源及其子资源进行加密。要使用加密策略存储 客户托管式密钥，您需要在密钥策略中授予对已验证权限的访问权限。密钥策略是一种[基于资源的策略，您可以将其附加到您的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based)上， 客户托管式密钥 以控制对该策略的访问权限。有关更多信息，请参阅[授权使用您的 AWS KMS 密钥获得 Amazon 验证权限](#authorizing-kms-key-use)。

此外，要创建带有的加密策略存储库 客户托管式密钥，或者要对由加密的策略存储进行 API 调用 客户托管式密钥，发出调用的 IAM 用户或角色还必须有权访问密钥。如果已验证权限无法访问密钥，则任何涉及由该密钥加密的资源的授权决策都可能过时或不准确。当您无法访问密钥时，您将无法访问通过该密钥加密的read/update/delete资源，并且任何使用该密钥进行加密的创建调用都将失败。

**注意**  
所有提供已验证权限的 AWS 区域均提供已验证权限的静态加密。

**重要**  
一旦使用 客户托管式密钥 对策略存储进行加密，就无法更新资源以使用其他密钥进行加密，也无法从该策略存储中移除该密钥。

## 使用 AWS KMS 具有 Amazon 验证权限的数据密钥
<a name="using-kms-data-keys"></a>

Amazon Verified Permissions 静态加密功能使用密 AWS KMS 钥和数据密钥层次结构来保护您的资源数据。

**注意**  
Amazon 验证权限仅支持对称 AWS KMS 密钥。您不能使用非对称 AWS KMS 密钥来加密您的 Amazon 验证权限资源。

### 使用 AWS 自有密钥
<a name="using-aws-owned-keys"></a>

默认情况下，Amazon 已验证权限使用 AWS 自有密钥加密所有资源。这些密钥可免费使用，并且每年轮换，以保护您的账户资源。您无需查看、管理、使用或审计这些密钥，因此无需采取任何措施来保护数据。有关 AWS 自有密钥的更多信息，请参阅《*AWS KMS 开发者指南》*中的[AWS 自有密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-key)。

### 使用客户托管密钥
<a name="using-customer-managed-keys"></a>

选择 客户托管式密钥 进行加密有以下好处：
+ 您可以创建和管理 AWS KMS 密钥，包括设置密钥策略和 IAM 策略以控制对 AWS KMS 密钥的访问。您可以启用和禁用 AWS KMS 密钥、启用和禁用自动密钥轮换，以及在不再使用 AWS KMS 密钥时将其删除。
+ 您可以在导入 客户托管式密钥 的密钥材料 客户托管式密钥 中使用，也可以在您拥有和管理的自定义密钥存储中使用。
+ 您可以通过检查日志 AWS KMS 中的 AWS CloudTrail Amazon 已验证权限 API 调用来审核您的已验证权限资源的加密和解密。

让 Amazon 验证权限代表您使用您的 客户托管式密钥 s 获取encryption/decryption, you will need to add specific key policies to allow Amazon Verified Permissions to encrypt/decrypt资源。

## 授权使用您的 AWS KMS 密钥获得 Amazon 验证权限
<a name="authorizing-kms-key-use"></a>

Amazon 验证权限至少需要以下权限 客户托管式密钥：
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:DescribeKey`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`
+ `kms:Decrypt`

密钥策略示例如下：

```
{  
    "Sid": "Enable AVP to use the KMS key for encrypting project J.A.K. policy resources",
    "Effect": "Allow",  
    "Principal": {  
        "Service": "verifiedpermissions.amazonaws.com"  
    },  
    "Action": [  
        "kms:Decrypt",  
        "kms:GenerateDataKeyWithoutPlaintext",  
        "kms:Encrypt",  
        "kms:ReEncryptFrom",  
        "kms:ReEncryptTo",  
        "kms:DescribeKey"  
    ],  
    "Resource": "*"  
}
```

### 了解源上下文
<a name="understanding-source-context"></a>

源上下文提供有关试图对给定密钥 AWS KMS 执行操作的源调用者的信息。这通过将上下文绑定到数据源来防止加密数据的混淆或滥用。

客户可以利用源上下文作为其密钥策略的附加条件，例如以下关键政策声明：

```
{  
    "Version": "2012-10-17", 		 	 	 
    "Statement": [  
        {  
            "Sid": "Enable this account full access to this key",  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": "arn:aws:iam::111122223333:root"  
            },  
            "Action": "kms:*",  
            "Resource": "*"  
        },  
        {  
            "Sid": "Enable AVP to retrieve this key's metadata",  
            "Effect": "Allow",  
            "Principal": {  
                "Service": "verifiedpermissions.amazonaws.com"  
            },  
            "Action": "kms:DescribeKey",  
            "Resource": "*",  
            "Condition": {  
                "StringEquals": {  
                    "aws:SourceAccount": "111122223333"  
                },  
                "StringLike": {  
                    "aws:SourceArn": "arn:aws:verifiedpermissions::111122223333:policy-store/*"  
                }  
            }  
        },  
        {  
            "Sid": "Enable AVP to encrypt/decrypt resources utilizing this key",  
            "Effect": "Allow",  
            "Principal": {  
                "Service": "verifiedpermissions.amazonaws.com"  
            },  
            "Action": [  
                "kms:Decrypt",  
                "kms:ReEncryptTo",  
                "kms:ReEncryptFrom",  
                "kms:GenerateDataKeyWithoutPlaintext",  
                "kms:Encrypt"  
            ],  
            "Resource": "*",  
            "Condition": {  
                "StringEquals": {  
                    "aws:SourceAccount": "111122223333"  
                },  
                "StringLike": {  
                    "aws:SourceArn": "arn:aws:verifiedpermissions::111122223333:policy-store/*"  
                }  
            }  
        }  
    ]  
}
```

如果源账户与该密钥所在的账户相同，则此 AWS KMS 密钥策略允许已验证权限代表您 AWS KMS 拨打电话。在检查 CMK 密钥的 AWS CloudTrail 审计日志时，这些值应该是可验证的。有关全局 AWS 条件键的更多信息，请参阅[使用`aws:SourceArn`或`aws:SourceAccount`条件键](https://docs.aws.amazon.com/kms/latest/developerguide/least-privilege.html#key-policy-least-privilege)。

### 了解加密上下文
<a name="understanding-encryption-context"></a>

加密上下文是一组键值对，其中包含用于加密完整性检查的其他经过身份验证的数据。当您在加密数据的请求中包含加密上下文时，会以加密 AWS KMS 方式将加密上下文绑定到加密数据。要解密数据，必须传递相同的加密上下文。

Amazon Verified Permissions 在所有 AWS KMS 加密操作中使用相同的加密上下文，当验证权限代表您 AWS KMS 调用 encryption/decryption 流程时，可以在 AWS CloudTrail 日志中进行验证。默认情况下，Verified Permissions 在加密资源时使用以下加密上下文键值对：

```
{  
    "aws:verifiedpermissions:policy-store-arn": "arn:aws:verifiedpermissions::111122223333:policy-store/PSt123456789012"  
}
```

Amazon Verified Permissions 还允许您附加自定义加密上下文，作为您希望在 encryption/decryption 流程中包含的其他元数据的一部分。这意味着您的密钥策略在授予权限时可以更加精细，如下例所示：

```
{  
    "Version": "2012-10-17", 		 	 	 
    "Statement": [  
        {  
            "Sid": "Enable this account full access to this key",  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": "arn:aws:iam::111122223333:root"  
            },  
            "Action": "kms:*",  
            "Resource": "*"  
        },  
        {  
            "Sid": "Enable AVP to retrieve this key's metadata",  
            "Effect": "Allow",  
            "Principal": {  
                "Service": "verifiedpermissions.amazonaws.com"  
            },  
            "Action": "kms:DescribeKey",  
            "Resource": "*"  
        },  
        {  
            "Sid": "Enable AVP to encrypt/decrypt resources utilizing this key",  
            "Effect": "Allow",  
            "Principal": {  
                "Service": "verifiedpermissions.amazonaws.com"  
            },  
            "Action": [  
                "kms:Decrypt",  
                "kms:ReEncryptTo",  
                "kms:ReEncryptFrom",  
                "kms:GenerateDataKeyWithoutPlaintext",  
                "kms:Encrypt"  
            ],  
            "Resource": "*",  
            "Condition": {  
                "StringLike": {  
                    "kms:EncryptionContext:aws:verifiedpermissions:policy-store-arn": "arn:aws:verifiedpermissions::111122223333:policy-store/*",  
                    "kms:EncryptionContext:policy_owner": "Tim"  
                }  
            }  
        }  
    ]  
}
```

如果加密上下文映射包含密钥，其值遵循的格式`arn:aws:verifiedpermissions::111122223333:policy-store/*`并且还包含键值对`aws:verifiedpermissions:policy-store-arn`，则此密钥策略允许已验证权限代表您 AWS KMS 拨打电话。`"policy_owner": "Tim"`[创建加密策略存储](#creating-encrypted-policy-store)有关如何设置自定义加密上下文的信息，请参阅。

**注意**  
建议将具有基于加密上下文的条件的密钥策略用于加密上下文映射的子集，而不是检查每个密钥值对。上游的服务及其依赖项可能会添加您看不到的其他键值对，如果密钥策略根据加密上下文映射的**确切**外观有条件地允许，则可能会影响已验证权限的密钥访问权限。

### 理解 kms: ViaService
<a name="understanding-kms-viaservice"></a>

`kms:ViaService`条件密钥将密 AWS KMS 钥的使用限制为来自指定 AWS 服务的请求。此条件密钥仅适用于[转发访问会话](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html) (FAS)。有关的更多信息`kms:ViaService`，请参阅《*AWS KMS 开发人员指南》ViaService*中的 [kms:](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service)。

例如，以下关键政策声明使用`kms:ViaService`条件密钥，仅当请求来自代表的美国东部（弗吉尼亚北部）地区的 Amazon Verified Permissions 时，才允许将用于指定操作`BrentRole`。[客户托管式密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-mgn-key)

```
{  
    "Sid": "Enable AVP to encrypt/decrypt resources using credentials of BrentRole",  
    "Effect": "Allow",  
    "Principal": {  
        "AWS": "arn:aws:iam::111122223333:role/BrentRole"  
    },  
    "Action": [  
        "kms:Decrypt",  
        "kms:GenerateDataKeyWithoutPlaintext",  
        "kms:Encrypt",  
        "kms:ReEncryptFrom",  
        "kms:ReEncryptTo",  
        "kms:DescribeKey"  
    ],  
    "Resource": "*",  
    "Condition": {  
        "StringEquals": {  
            "kms:ViaService": [  
                "verifiedpermissions.us-east-1.amazonaws.com"  
            ]  
        }  
    }  
}
```

当Verified Permissions代表您请求加密/解密时，为了使已验证的权限能够传递您的身份、权限和会话属性，这是必要的。 AWS KMS 有关 FAS 请求的更多信息，请参阅《*IAM 用户指南》*中的[转发访问会话](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)。

### 完成 AWS KMS 密钥政策
<a name="complete-kms-key-policy"></a>

根据前几节中的概念，这是一个密钥策略示例，它将允许 Amazon Verified Permissions 使用 CMK 进行加密/解密：

```
{  
    "Version": "2012-10-17", 		 	 	 
    "Statement": [  
        {  
            "Sid": "Enable this account full access to this key",  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": "arn:aws:iam::111122223333:root"  
            },  
            "Action": "kms:*",  
            "Resource": "*"  
        },  
        {  
            "Sid": "Enable AVP to retrieve this key's metadata",  
            "Effect": "Allow",  
            "Principal": {  
                "Service": "verifiedpermissions.amazonaws.com"  
            },  
            "Action": "kms:DescribeKey",  
            "Resource": "*",  
            "Condition": {  
                "StringEquals": {  
                    "aws:SourceAccount": "111122223333"  
                },  
                "StringLike": {  
                    "aws:SourceArn": "arn:aws:verifiedpermissions::111122223333:policy-store/*"  
                }  
            }  
        },  
        {  
            "Sid": "Enable AVP to encrypt/decrypt resources utilizing this key",  
            "Effect": "Allow",  
            "Principal": {  
                "Service": "verifiedpermissions.amazonaws.com"  
            },  
            "Action": [  
                "kms:Decrypt",  
                "kms:ReEncryptTo",  
                "kms:ReEncryptFrom",  
                "kms:Encrypt",  
                "kms:GenerateDataKeyWithoutPlaintext"  
            ],  
            "Resource": "*",  
            "Condition": {  
                "StringLike": {  
                    "kms:EncryptionContext:aws:verifiedpermissions:policy-store-arn": "arn:aws:verifiedpermissions::111122223333:policy-store/*",  
                    "kms:EncryptionContext:policy_owner": "Tim",  
                    "aws:SourceArn": "arn:aws:verifiedpermissions::111122223333:policy-store/*"  
                },  
                "StringEquals": {  
                    "aws:SourceAccount": "111122223333"  
                }  
            }  
        },  
        {  
            "Sid": "Enable AVP to encrypt/decrypt resources using credentials of BrentRole",  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": "arn:aws:iam::111122223333:role/BrentRole"  
            },  
            "Action": [  
                "kms:Decrypt",  
                "kms:GenerateDataKeyWithoutPlaintext",  
                "kms:Encrypt",  
                "kms:ReEncryptFrom",  
                "kms:ReEncryptTo",  
                "kms:DescribeKey"  
            ],  
            "Resource": "*",  
            "Condition": {  
                "StringEquals": {  
                    "kms:ViaService": [  
                        "verifiedpermissions.us-east-1.amazonaws.com"  
                    ]  
                },  
                "StringLike": {  
                    "kms:EncryptionContext:aws:verifiedpermissions:policy-store-arn": "arn:aws:verifiedpermissions::111122223333:policy-store/*",  
                    "kms:EncryptionContext:policy_owner": "Tim"  
                }  
            }  
        }  
    ]  
}
```

**警告**  
修改 AWS KMS 已由 Amazon 验证权限使用的密钥的密钥策略时，请谨慎行事。虽然在顶级资源创建期间最初配置密 AWS KMS 钥时，Verified Permissions 会验证加密和解密权限，但它无法根据需要验证后续的策略更改。无意中删除必要的权限可能会干扰您的授权决策和常规的已验证权限服务流程。有关排除与 Amazon 验证权限中相关的 客户托管式密钥常见错误的指南，请参阅[对 Amazon 验证权限中的客户托管密钥进行故障排除](#troubleshoot-cmk)。

### 加密资源的必要 IAM 策略
<a name="iam-policy-for-encrypted-resources"></a>

通过账户中的 IAM 角色调用 Verified Permissions 的客户需要确保相应的 IAM 策略具有适当的权限才能使用 客户托管式密钥 对资源进行加密和解密。

为了创建由加密的策略存储 客户托管式密钥，以下 IAM 策略说明了这样做所需的最低限度操作 AWS KMS 和已验证权限操作：

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Action": "verifiedpermissions:CreatePolicyStore",
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncryptTo",
                "kms:ReEncryptFrom",
                "kms:DescribeKey",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

**注意**  
要检索（Get\$1 和 List\$1 操作）和删除由加密的策略存储 客户托管式密钥，无需其他权限。

要更新由 a 加密的策略存储 客户托管式密钥、检索（获取\$1 和 List\$1 操作）、更新和删除由 a 加密的策略存储的子资源 客户托管式密钥，以下 IAM 策略说明了最低限度的必要操作 AWS KMS 和 “已验证权限” 操作的执行方式：

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Action": "verifiedpermissions:*",
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

作为单一 IAM 策略，客户只需在其 IAM 角色策略中添加以下内容即可：

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Action": "verifiedpermissions:*",
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncryptTo",
                "kms:ReEncryptFrom",
                "kms:DescribeKey",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

## 管理加密策略存储
<a name="managing-encrypted-policy-stores"></a>

策略存储是入门级容器，将包含所有相关的策略资源。有关策略存储和子资源层次结构的更多信息，请参阅《[亚马逊验证权限*用户指南》中的 Amazon 已验证权限*策略存储](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores.html)。

在已验证权限中创建策略存储时，您可以使用 AWS KMS 密钥启用静态加密。这可确保：
+ 对策略存储及其子资源进行的所有读取、更新和删除操作都将使用提供的 客户托管式密钥 解密过程
+ 任何授权决策调用（即 IsAuthorized BatchIsAuthorized IsAuthorizedWithToken、等）都将使用提供的 客户托管式密钥 解密过程

### 创建加密策略存储
<a name="creating-encrypted-policy-store"></a>

在创建加密策略存储库之前，请确保 客户托管式密钥 您正在使用的已为 Amazon Verified Permissions 设置了正确的密钥策略声明，以便使用该密钥进行加密/解密。[授权使用您的 AWS KMS 密钥获得 Amazon 验证权限](#authorizing-kms-key-use)有关哪些权限是必需的，请参阅。

使用 AWS CLI：

```
aws verifiedpermissions create-policy-store --region us-east-1 --encryption-settings file://encrypted.json --validation-settings "{\"mode\": \"OFF\"}"
```

哪里`encrypted.json`看起来像：

```
{  
    "kmsEncryptionSettings": {  
        "key": "arn:aws:kms:us-east-1:111122223333:key/12345678-90ab-cdef-ghij-klmnopqrstuv",  
        "encryptionContext": {  
            "<ENCRYPTION_CONTEXT_KEY_1>": "<ENCRYPTION_CONTEXT_VALUE_1>",  
            "<ENCRYPTION_CONTEXT_KEY_2>": "<ENCRYPTION_CONTEXT_VALUE_2>",  
            ...  
        }  
    }  
}
```

确保`key`用你的 客户托管式密钥 ARN 替换，然后用所需的`encryptionContext`键值对替换`<ENCRYPTION_CONTEXT_KEY>`和`<ENCRYPTION_CONTEXT_VALUE>`配对。 `encryptionContext`如果不需要添加键值对，则可以完全省略。

**重要**  
请勿在自定义加密上下文`aws:verifiedpermissions:policy-store-arn`中包含密钥值对。这是自动添加的，如果它是您传递的自定义加密上下文键值对的一部分，则会导致验证错误。

有关策略库可用 APIs 子资源的更多信息，请参阅 *Amazon Verified Permissions API 参考指南*中的[操作](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_Operations.html)。

**注意**  
如果您的 Amazon Verified Permissions 资源由于密 AWS KMS 钥策略不正确而被删除、禁用或无法访问，则资源解密将失败，从而导致授权决策过时。 AWS KMS 客户托管式密钥 访问丢失可能是暂时的（可以更正密钥策略）或永久的（已删除的密钥无法恢复），具体取决于情况。我们建议您[限制对关键操作的访问权限](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys-adding-permission.html)，例如删除或禁用 AWS KMS 密钥。此外，我们建议您的组织设置[AWS 漏洞访问程序，以确保您的特权用户能够 AWS 在无法访问](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/ag.sad.5-implement-break-glass-procedures.html) Amazon Verified Permissions 的情况下进行访问。

## 监控 Amazon 已验证的权限与之互动 AWS KMS
<a name="monitoring-kms-interaction"></a>

您可以监控 Amazon Verified Permissions 对您的 客户托管式密钥 直通的使用情况。 AWS CloudTrail AWS KMS 通过 Verified Permissions 发出的每个请求都包括加密上下文和请求参数中使用的密钥 ARN（您的 客户托管式密钥）：

以下内容的 AWS CloudTrail 日志条目示例`GenerateDataKeyWithoutPlaintext`：

```
{  
    "eventVersion": "1.11",  
    "userIdentity": {  
        "type": "AWSService",  
        "invokedBy": "verifiedpermissions.amazonaws.com"  
    },  
    "eventTime": "2025-09-28T16:51:04Z",  
    "eventSource": "kms.amazonaws.com",  
    "eventName": "GenerateDataKeyWithoutPlaintext",  
    "awsRegion": "us-east-1",  
    "sourceIPAddress": "verifiedpermissions.amazonaws.com",  
    "userAgent": "verifiedpermissions.amazonaws.com",  
    "requestParameters": {  
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/abcdefgh-0123-ijkl-4567-mnopqrstuvwx",  
        "encryptionContext": {  
            "aws:verifiedpermissions:policy-store-arn": "arn:aws:verifiedpermissions::111122223333:policy-store/PSt123456789012",  
            "policy_store_editor": "Janus"  
        },  
        ...  
    },  
    ...  
}
```

以下内容的 AWS CloudTrail 日志条目示例`Decrypt`：

```
{  
    "eventVersion": "1.11",  
    "userIdentity": {  
        "type": "AWSService",  
        "invokedBy": "verifiedpermissions.amazonaws.com"  
    },  
    "eventTime": "2025-09-28T16:53:21Z",  
    "eventSource": "kms.amazonaws.com",  
    "eventName": "Decrypt",  
    "awsRegion": "us-east-1",  
    "sourceIPAddress": "verifiedpermissions.amazonaws.com",  
    "userAgent": "verifiedpermissions.amazonaws.com",  
    "requestParameters": {  
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",  
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/abcdefgh-0123-ijkl-4567-mnopqrstuvwx",  
        "encryptionContext": {  
            "aws:verifiedpermissions:policy-store-arn": "arn:aws:verifiedpermissions::111122223333:policy-store/PSt123456789012",  
            "policy_store_owner": "Elias"  
        }  
    },  
    ...  
}
```

以下内容的 AWS CloudTrail 日志条目示例`ReEncrypt`：

```
{  
    "eventVersion": "1.11",  
    "userIdentity": {  
        "type": "AWSService",  
        "invokedBy": "verifiedpermissions.amazonaws.com"  
    },  
    "eventTime": "2025-09-28T16:51:04Z",  
    "eventSource": "kms.amazonaws.com",  
    "eventName": "ReEncrypt",  
    "awsRegion": "us-east-1",  
    "sourceIPAddress": "verifiedpermissions.amazonaws.com",  
    "userAgent": "verifiedpermissions.amazonaws.com",  
    "requestParameters": {  
        "sourceKeyId": "arn:aws:kms:us-east-1:111122223333:key/abcdefgh-0123-ijkl-4567-mnopqrstuvwx",  
        "destinationEncryptionContext": {  
            "aws:verifiedpermissions:policy-store-arn": "arn:aws:verifiedpermissions::111122223333:policy-store/PSt123456789012"  
        },  
        "sourceEncryptionAlgorithm": "SYMMETRIC_DEFAULT",  
        "destinationKeyId": "arn:aws:kms:us-east-1:111122223333:key/abcdefgh-0123-ijkl-4567-mnopqrstuvwx",  
        "sourceEncryptionContext": {  
            "aws:verifiedpermissions:policy_store_arn": "arn:aws:verifiedpermissions::111122223333:policy-store/PSt123456789012"  
        },  
        "destinationEncryptionAlgorithm": "SYMMETRIC_DEFAULT",  
        ...  
    },  
    ...  
}
```

请注意，日志条目包括`invokedBy`引用 Amazon Verified Permissions 的主体，并包含`encryptionContext/sourceEncryptionContext/destinationEncryptionContext`在地图中。`requestParameters`

以下内容的 AWS CloudTrail 日志条目示例`DescribeKey`：

```
{  
    "eventVersion": "1.11",  
    "userIdentity": {  
        "type": "AWSService",  
        "invokedBy": "verifiedpermissions.amazonaws.com"  
    },  
    "eventTime": "2025-09-28T16:51:02Z",  
    "eventSource": "kms.amazonaws.com",  
    "eventName": "DescribeKey",  
    "awsRegion": "us-east-1",  
    "sourceIPAddress": "verifiedpermissions.amazonaws.com",  
    "userAgent": "verifiedpermissions.amazonaws.com",  
    "requestParameters": {  
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/abcdefgh-0123-ijkl-4567-mnopqrstuvwx"  
    },  
    ...  
}
```

请注意，日志条目包括`invokedBy`引用 Amazon 已验证权限的主体。

有关 AWS CloudTrail 日志条目的更多信息，请参阅*AWS CloudTrail 用户指南*中的[了解 AWS CloudTrail 事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-events.html)。

## 限制
<a name="limitations"></a>

本主题介绍已验证权限的当前限制，以及使用 客户托管式密钥对资源进行加密。
+ 策略存储一旦启用，就无法禁用加密
+ 创建未加密的策略存储后，您无法将策略存储更新为由加密 客户托管式密钥
+ 撤销 客户托管式密钥 对现有加密策略存储的已验证权限访问权限后，可能会出现过时的授权决策
+ 使用创建策略存储后 客户托管式密钥，您无法修改自定义加密上下文值；这些值是在创建加密策略存储时设置的静态值

## 对 Amazon 验证权限中的客户托管密钥进行故障排除
<a name="troubleshoot-cmk"></a>

本主题描述了您在使用 Amazon Verified 权限时可能遇到的常见 客户托管式密钥 相关错误，并提供了解决这些错误的疑难解答步骤。

### 访问被拒绝： AWS KMS 权限问题
<a name="access-denied-kms-permission"></a>

**错误：**“服务或调用方无权使用提供的 AWS KMS 密钥，因为该区域不存在该资源，没有基于资源的策略允许访问，或者基于资源的策略明确拒绝访问”

这可能意味着服务或调用方在其 IAM 策略/AWS KMS 密钥策略中缺少所需的`kms:*`操作权限，或者所引用的密钥不存在或已不存在。

#### 故障排除 AWS CloudTrail：
<a name="troubleshooting-cloudtrail"></a>
+ 在中查找`kms.amazonaws.com`活动 AWS CloudTrail
+ 搜索被确定为不允许的 AWS KMS 操作的事件名称（即`Decrypt``ReEncrypt``GenerateDataKeyWithoutPlaintext`、`DescribeKey`、等）
+ 查看 `errorCode` 和 `errorMessage` 字段
+ 检查 `userIdentity` 以确认是哪个主体尝试了该操作

要解决此问题，请在其 IAM 策略和 AWS KMS 密钥策略中向用户或 IAM 委托人授予适当的 AWS KMS 操作访问权限。有关更多信息，请参阅 [完成 AWS KMS 密钥政策](#complete-kms-key-policy)。

### 验证异常： AWS KMS 密钥配置
<a name="validation-exception-kms-config"></a>

**错误：**“已配置的 AWS KMS 密钥没有有效的配置”

这意味着，由于其当前配置，服务无法使用所引用的密钥进行 客户托管式密钥 加密。原因可能包括密钥被禁用、密钥不支持 EncryptionAlgorithm或密钥的类型不受支持 KeyUsage 。

### 限制异常： AWS KMS 速率限制
<a name="throttling-exception-kms-rate"></a>

**错误：**“您已超出通话费率 AWS KMS”

此错误表示您的密钥已超出加密操作的 AWS KMS 限制：[https://docs.aws.amazon.com/kms/latest/developerguide/requests-per-second.html](https://docs.aws.amazon.com/kms/latest/developerguide/requests-per-second.html)。

## 相关信息
<a name="related-information"></a>
+ [管理经过验证的权限策略存储](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores.html)
+ [AWS KMS 最佳实践](https://docs.aws.amazon.com/kms/latest/developerguide/best-practices.html)
+ [AWS KMS 加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)
+ [AWS CloudTrail 集成](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/logging-monitoring.html)
+ [AWS CloudTrail 日志条目示例](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-log-file-examples.html)