

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

# 客户托管的 AWS KMS key 加密 SageMaker HyperPod
<a name="smcluster-cmk"></a>

默认情况下，连接到您的 SageMaker HyperPod 集群的 Amazon EBS 根卷使用所 AWS KMS key AWS拥有的进行加密。现在，您可以选择使用自己的客户自主管理型 KMS 密钥对根 Amazon EBS 卷和辅助卷进行加密。以下主题描述了客户托管密钥 (CMKs) 如何处理 HyperPod集群中的卷。

**注意**  
在 SageMaker HyperPod集群中使用客户托管密钥时，以下例外情况适用：  
客户自主管理型密钥加密仅在使用连续节点预调配模式的集群中受支持。受限实例组不支持客户自主管理型密钥。
HyperPod 集群目前不支持在客户托管密钥 AWS KMS 加密请求中传递加密上下文。因此，请确保您的 KMS 密钥策略未通过加密上下文条件缩小范围，因为这会导致集群无法使用该密钥。
KMS 密钥转换目前不受支持，因此您无法更改配置中指定的 KMS 密钥。要使用其他密钥，请使用所需密钥创建新的实例组，然后删除旧实例组。
目前不支持通过控制台为 HyperPod 集群指定客户托管密钥。

## Permissions
<a name="smcluster-cmk-permissions"></a>

必须先满足以下先决条件 HyperPod，然后才能将客户托管密钥用于中：
+ 确保您用于 A SageMaker I AWS 的 IAM 执行角色具有以下权限可供 AWS KMS 添加。该`[ kms:CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)`权限 HyperPod 允许使用您的 KMS 密钥的权限执行以下操作：
  + 扩展您的实例数量（UpdateCluster 操作）
  + 添加群集节点（BatchAddClusterNodes 操作）
  + 修补软件（UpdateClusterSoftware 操作）

  有关更新 IAM 角色的权限的更多信息，请参阅《IAM 用户指南》**中的[添加和删除 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

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

****  

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

------
+ 将以下权限添加到您的 KMS 密钥策略。有关更多信息，请参阅《AWS KMS 开发人员指南》**中的[更改密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html)。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Id": "hyperpod-key-policy",
      "Statement": [
          {
              "Sid": "Enable IAM User Permissions",
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::111122223333:root"
              },
              "Action": "kms:*",
              "Resource": "*"
          },
          {
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::111122223333:role/<iam-role>"
              },
              "Action": "kms:CreateGrant",
              "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id",
              "Condition": {
                  "StringEquals": {
                      "kms:ViaService": "sagemaker.us-east-1.amazonaws.com"
                  },
                  "Bool": {
                      "kms:GrantIsForAWSResource": "true"
                  }
              }
          },
          {
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::111122223333:role/<iam-role>"
              },
              "Action": "kms:DescribeKey",
              "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id",
              "Condition": {
                  "StringEquals": {
                      "kms:ViaService": "sagemaker.us-east-1.amazonaws.com"
                  }
              }
          }
      ]
  }
  ```

------

## 如何使用 KM 密钥
<a name="smcluster-cmk-usage"></a>

在创建或更新集群时，您可以使用[CreateCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCluster.html)和 [UpdateCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateCluster.html)API 操作指定您的客户托管密钥。`InstanceStorageConfigs` 结构最多允许两种 `EbsVolumeConfig` 配置，在这两种配置中，您可以配置根 Amazon EBS 卷，也可以选择配置一个辅助卷。您可以根据需求对每个卷使用相同的 KMS 密钥或不同的 KMS 密钥。

您可以选择为这两个卷都指定或都不指定客户自主管理型密钥，也可以选择为任一卷指定客户自主管理型密钥。但是，您不能指定两个根卷或两个辅助卷。

在配置根卷时，以下要求将适用：
+ `RootVolume` 必须设置为 `True`。默认值为 `False`，这将改为配置辅助卷。
+ `VolumeKmsKeyId` 字段为必填字段，您必须指定客户自主管理型密钥。这是因为根卷必须始终使用 AWS 自有密钥或客户管理的密钥进行加密（如果您未指定自己的密钥，则使用 AWS 自有密钥）。
+ 您无法为根卷指定`VolumeSizeInGB`字段，因为根卷的大小将由您 HyperPod 决定。

在配置辅助卷时，以下要求将适用：
+ `RootVolume` 必须为 `False`（该字段的默认值为 `False`）。
+ `VolumeKmsKeyId` 字段为可选项。您可以使用为根卷指定的同一客户自主管理型密钥，也可以使用其他密钥。
+ `VolumeSizeInGB` 字段为必填字段，因为您必须为辅助卷指定所需的大小。

**重要**  
在使用客户自主管理型密钥时，我们强烈建议您为集群中的每个实例组使用不同的 KMS 密钥。在多个实例组之间使用相同的客户自主管理型密钥，可能导致权限意外地继续有效，即使您尝试撤销授权也是如此。例如，如果您撤销对一个实例组的卷的 AWS KMS 授权，则该实例组可能仍允许扩展和修补操作，因为其他实例组上存在使用相同密钥的授权。为避免出现此问题，需确保为集群中的每个实例组分配唯一的 KMS 密钥。如果您需要限制对实例组的权限，可以尝试使用下列选项之一：  
禁用 KMS 密钥。
将拒绝策略应用于 KMS 密钥策略。
撤销该密钥的所有实例组授权（而不是仅撤销某项授权）。
删除实例组。
请删除集群。

以下示例说明如何使用和为根卷和辅助卷指定客户托管的 CreateCluster 密钥 UpdateCluster APIs。这些示例仅显示客户自主管理型密钥集成的必填字段。要仅为其中一个卷配置客户自主管理型密钥，只需指定一个 `EbsVolumeConfig`。

有关配置集群创建和更新请求的更多信息，请参阅[创建集 SageMaker HyperPod 群](sagemaker-hyperpod-eks-operate-cli-command-create-cluster.md)和[更新 SageMaker HyperPod 集群配置](sagemaker-hyperpod-eks-operate-cli-command-update-cluster.md)。

------
#### [ CreateCluster ]

以下示例显示了[使用客户托管密钥加密的创建集群](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-cluster.html) AWS CLI 请求。

```
aws sagemaker create-cluster \
  --cluster-name <your-hyperpod-cluster> \
  --instance-groups '[{
    "ExecutionRole": "arn:aws:iam::111122223333:role/<your-SageMaker-Execution-Role>",
    "InstanceCount": 2,
    "InstanceGroupName": "<your-ig-name>",
    "InstanceStorageConfigs": [
            {
                "EbsVolumeConfig": {
                    "RootVolume": True,
                    "VolumeKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/root-volume-key-id"
                }
            },
            {
                "EbsVolumeConfig": {
                    "VolumeSizeInGB": 100,
                    "VolumeKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/secondary-volume-key-id"
                }
            }
    ],
    "InstanceType": "<desired-instance-type>"
  }]' \
  --vpc-config '{
    "SecurityGroupIds": ["<sg-id>"],
    "Subnets": ["<subnet-id>"]
  }'
```

------
#### [ UpdateCluster ]

以下示例显示了使用客户托管[密钥加密的更新集群](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster.html) AWS CLI 请求。

```
aws sagemaker update-cluster \
  --cluster-name <your-hyperpod-cluster> \
  --instance-groups '[{
    "InstanceGroupName": "<your-ig-name>",
    "InstanceStorageConfigs": [
            {
                "EbsVolumeConfig": {
                    "RootVolume": true,
                    "VolumeKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/root-volume-key-id"
                }
            },
            {
                "EbsVolumeConfig": {
                    "VolumeSizeInGB": 100,
                    "VolumeKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/secondary-volume-key-id"
                }
            }
    ]
  }]'
```

------