

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# マルチターン強化学習のための保管時の暗号化
<a name="model-customize-mtrl-encryption-at-rest"></a>

## 保管時の暗号化オプション
<a name="model-customize-mtrl-encryption-options"></a>

Amazon SageMaker AI のマルチターン強化学習ジョブは、保管中のすべてのデータを暗号化します。トレーニング入力データ、出力データ (モデルチェックポイントとトレーニング済みモデルアーティファクトを含む）、および Amazon S3 に保存されている中間データは、サーバー側の暗号化を使用して暗号化されます。保管時にデータが暗号化されるように、追加の設定を実行する必要はありません。

Amazon SageMaker AI は、マルチターン RL ジョブに対して次の暗号化オプションをサポートしています。
+ ** AWS 所有 KMS キーによるサーバー側の暗号化** – デフォルトでは、Amazon SageMaker AI は AWS 所有 KMS キーを使用してすべてのトレーニング出力と中間データを暗号化します。追加の設定は必要ありません。
+ ** AWS KMS キーによるサーバー側の暗号化 (SSE-KMS)** – オプションでカスタマーマネージド KMS キーを指定して、Amazon S3 のトレーニング出力データを暗号化できます。Amazon S3 の入力データがすでにカスタマーマネージドキーで暗号化されている場合、実行ロールにはそのデータを復号するアクセス許可が必要です。

## カスタマーマネージド AWS KMS キーを使用した保管中のデータの暗号化
<a name="model-customize-mtrl-cmk"></a>

### マルチターン RL がカスタマーマネージド KMS キーを使用する方法
<a name="model-customize-mtrl-cmk-how"></a>

マルチターン RL ジョブの出力設定でカスタマーマネージド KMS キーを指定すると、Amazon SageMaker AI はそのキーを使用して Amazon S3 内の次のリソースを暗号化します。
+ トレーニング済みモデルアーティファクト (LoRA アダプターの重み) を含むトレーニング出力データ
+ 中間モデルの入出力 (再開可能なモデルチェックポイントと軌道データ)
+ MLflow 実験データとトレース

カスタマーマネージド KMS キーを指定すると、Amazon SageMaker AI は 2 つのメカニズムを使用してデータを暗号化します。
+ **権限** – ジョブの作成時に、Amazon SageMaker AI は発信者の認証情報を使用して KMS キーに 1 つまたは 2 つの権限を作成します。
  + **書き込み許可** – カスタマーマネージドキーを指定するジョブごとに作成されます。トレーニング中に、サービスが現在のジョブのチェックポイントとプラットフォーム内に保存された一時データを暗号化および復号できるようにします。
  + **読み取り許可** – 前のジョブがカスタマーマネージドキーも使用したときに、前のジョブのチェックポイントから再開する反復ジョブに対してのみ作成されます。サービスが前のジョブのチェックポイントデータを復号できるようにします。この許可は復号のみを許可し、新しいデータの書き込みは許可しません。

  すべての許可はジョブが完了すると自動的に廃止され、ジョブのライフサイクル終了後にサービスがキーにアクセスできなくなります。
+ **実行ロール** – 出力データ (モデルアーティファクト、チェックポイント) を Amazon S3 バケットに保存する場合、Amazon SageMaker AI は指定した実行ロールを使用します。実行ロールには、Amazon S3 を介した暗号化と復号に KMS キーを使用するためのアクセス許可が必要です。

トレーニングジョブ中に、次の AWS KMS オペレーションが発生します。
+ `kms:GenerateDataKey` – 暗号化された出力データ (モデルアーティファクト、チェックポイント、ログ) を書き込むときに Amazon S3 を介して呼び出されます。
+ `kms:Decrypt` – 暗号化された入力データまたは以前に書き込まれた出力データを読み取るときに Amazon S3 を介して呼び出されます。
+ `kms:DescribeKey` – KMS キーの設定と状態を検証するために、ジョブの作成時に発信者 ID によって呼び出されます。
+ `kms:CreateGrant` – ジョブの作成時に発信者 ID によって呼び出され、ジョブのライフサイクルのためにプラットフォーム内に一時データを保存するアクセス許可をサービスに付与します。

サービスはデータキーをキャッシュしません。各 Amazon S3 の読み取りまたは書き込みオペレーションはAmazon S3サービス統合を通じて AWS KMS 個別に を呼び出します。

### カスタマーマネージド KMS キーの設定
<a name="model-customize-mtrl-cmk-configure"></a>

マルチターン RL ジョブは対称 AWS KMS キーのみをサポートします。マルチリージョンキーはサポートされていません。

#### カスタマーマネージド KMS キーを使用するためのアクセス許可の設定
<a name="model-customize-mtrl-cmk-permissions"></a>

マルチターン RL ジョブでカスタマーマネージド KMS キーを使用するには、IAM 実行ロールと KMS キーポリシーの両方に対するアクセス許可を設定する必要があります。

`CreateJob` API に渡す IAM 実行ロールには、次の AWS KMS アクセス許可が必要です。これらのアクセス許可により、トレーニングジョブは Amazon S3 を介して出力データを暗号化し、入力データを復号できます。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "KMSPermissionsForS3Encryption",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:{{region}}:{{account-id}}:key/{{key-id}}",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": "s3.*.amazonaws.com"
                }
            }
        }
    ]
}
```
+ `kms:Decrypt` – Amazon S3 から暗号化された入力データと以前に書き込まれた出力データを読み取るために必要です。
+ `kms:GenerateDataKey` – Amazon S3 に書き込まれた出力データ (モデルアーティファクト、チェックポイント) を暗号化するために必要です。

この`kms:ViaService`条件は、キーの使用を Amazon S3 を通過するリクエストに制限し、キーが他の目的に使用されないようにします。

Amazon Bedrock AgentCore エージェントまたは AWS Lambda フォワーダーが引き受けるエージェントランタイムロールには、次の AWS KMS アクセス許可が必要です。SageMaker AI は、マルチターン強化学習 (RL) ジョブ中に KMS キーを使用する前に、発信者にこれらのアクセス許可があることを確認します。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "KMSPermissionsForMTRLRuntime",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:{{region}}:{{account-id}}:key/{{key-id}}",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": "sagemaker.*.amazonaws.com"
                }
            }
        }
    ]
}
```

エージェントランタイムロール`kms:ViaService`の条件は、SageMaker AI ランタイムサービスが発信者に代わって AWS KMS オペレーションを実行する`sagemaker.*.amazonaws.com`ため、 を指定します。これとは対照的に、実行ロールは Amazon S3 を介してキーにアクセスする`s3.*.amazonaws.com`ため、 を使用します。 Amazon S3

デフォルトの KMS キーポリシーでは、同じアカウントの IAM ロールにキーの使用が既に許可されています。必要に応じて、次のステートメントを追加して、実行ロールとエージェントランタイムロールのみにアクセスをさらに制限できます。

```
{
    "Sid": "AllowMTRLJobEncryption",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::{{account-id}}:role/{{SageMakerExecutionRole}}",
            "arn:aws:iam::{{account-id}}:role/{{AgentRuntimeRole}}"
        ]
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
    ],
    "Resource": "*",
    "Condition": {
        "StringLike": {
            "kms:ViaService": [
                "s3.*.amazonaws.com",
                "sagemaker.*.amazonaws.com"
            ]
        }
    }
}
```

発信者が許可を作成してキーを記述できるようにするには、キーポリシーに次のステートメントを追加します。

```
{
    "Sid": "AllowCreateGrantForCaller",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::{{account-id}}:role/{{CallerRole}}"
    },
    "Action": [
        "kms:CreateGrant",
        "kms:DescribeKey"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "kms:CallerAccount": "{{account-id}}"
        },
        "StringLike": {
            "kms:ViaService": "sagemaker.*.amazonaws.com"
        },
        "Bool": {
            "kms:GrantIsForAWSResource": "true"
        }
    }
}
```

#### カスタマーマネージド KMS キーを使用したマルチターン RL ジョブの作成
<a name="model-customize-mtrl-cmk-create-job"></a>

カスタマーマネージド KMS キーを使用して出力データを暗号化するには、`OutputDataConfig``CreateJob`リクエストの `KmsKeyArn`フィールドでキー ARN を指定します。詳細については、*SageMaker AI API リファレンス*の[CreateJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateJob.html)」を参照してください。

次の例は、 で KMS キーを指定する方法を示しています`OutputDataConfig`。

```
{
    "OutputDataConfig": {
        "S3OutputPath": "s3://{{your-bucket}}/output/",
        "KmsKeyArn": "arn:aws:kms:{{region}}:{{account-id}}:key/{{key-id}}"
    }
}
```

Amazon S3 の入力データがカスタマーマネージドキー (SSE-KMS) で暗号化されている場合は、実行ロールにそのキーに対する`kms:Decrypt`アクセス許可があることを確認します。入力暗号化と出力暗号化の両方に同じキーを使用することも、異なるキーを使用することもできます。

#### カスタマーマネージド KMS キーへのアクセスのスコープダウン
<a name="model-customize-mtrl-cmk-scope-down"></a>

次のメカニズムを使用して、カスタマーマネージド KMS キーへのアクセスを制限できます。

sagemaker:OutputKmsKeyArn 条件キー  
呼び出し元の IAM ポリシーで `sagemaker:OutputKmsKeyArn`条件キーを使用して、ジョブ出力の暗号化に指定できる KMS キーを制御します。これにより、管理者は、マルチターン RL ジョブの作成時に承認されたキーのみを使用するように強制できます。SageMaker AI 条件キーの完全なリストについては、[Amazon SageMakerのアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsagemaker.html)」を参照してください。  

```
"Condition": {
    "ArnEquals": {
        "sagemaker:OutputKmsKeyArn": "arn:aws:kms:{{region}}:{{account-id}}:key/{{key-id}}"
    }
}
```

混乱した代理の保護  
KMS キーポリシーで `aws:SourceArn`または `aws:SourceAccount`条件キーを使用して、混乱した代理問題を防止します。これにより、特定のアカウントまたはリソースから発信されたリクエストのみがキーを使用できるようになります。  

```
"Condition": {
    "StringEquals": {
        "aws:SourceAccount": "{{account-id}}"
    },
    "ArnLike": {
        "aws:SourceArn": "arn:aws:sagemaker:{{region}}:{{account-id}}:job/*"
    }
}
```

## マルチターン RL ジョブの暗号化コンテキスト
<a name="model-customize-mtrl-cmk-encryption-context"></a>

マルチターン RL ジョブがカスタマーマネージド KMS キーを使用してデータを暗号化する場合、Amazon SageMaker AI は Amazon S3 を介して行われるすべての AWS KMS リクエストに*暗号化コンテキスト*を含めます。暗号化コンテキストは、 AWS KMS オペレーションに追加の認証データ (AAD) を提供するキーと値のペアのセットです。暗号化コンテキストはログイン AWS CloudTrail され、KMS キーポリシーで使用でき、アクセスをさらに制限するための制約を付与できます。

Amazon SageMaker AI は、マルチターン RL トレーニングジョブに次の暗号化コンテキストのキーと値のペアを使用します。

```
{
    "aws:sagemaker:finetuning-job-arn": "arn:aws:sagemaker:{{region}}:{{account-id}}:job/AgentRFT/{{job-name}}"
}
```

マルチターン RL 評価ジョブの場合、暗号化コンテキストは以下を使用します。

```
{
    "aws:sagemaker:agent-rft-evaluation-job-arn": "arn:aws:sagemaker:{{region}}:{{account-id}}:job/AgentRFTEvaluation/{{job-name}}"
}
```

暗号化コンテキストは、暗号化されたデータを作成する特定のジョブにバインドされます。各ジョブは、暗号化コンテキストで独自の ARN を使用して独自の出力を暗号化します。これにより、暗号化されたデータとそれを生成したジョブとの間に暗号化バインディングが提供されます。

暗号化コンテキストは、Amazon SageMaker AI がジョブ作成時に作成する許可制約を通じて自動的に適用されます。暗号化コンテキスト条件を KMS キーポリシーに追加して、暗号化が正しく機能するようにする必要はありません。

KMS キーポリシーの `kms:CreateGrant`ステートメントに暗号化コンテキスト条件を追加する場合は、反復トレーニングチェーンで現在のジョブと以前のジョブの両方の許可を許可する必要があります。次の例では、Amazon SageMaker AI が暗号化コンテキストでトレーニングジョブ ARN を使用して許可を作成できるようにします。

```
{
    "Sid": "AllowCreateGrantForCaller",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::{{account-id}}:role/{{CallerRole}}"
    },
    "Action": [
        "kms:CreateGrant",
        "kms:DescribeKey"
    ],
    "Resource": "*",
    "Condition": {
        "StringLike": {
            "kms:ViaService": "sagemaker.*.amazonaws.com",
            "kms:EncryptionContext:aws:sagemaker:finetuning-job-arn": "arn:aws:sagemaker:{{region}}:{{account-id}}:job/AgentRFT/*"
        },
        "Bool": {
            "kms:GrantIsForAWSResource": "true"
        }
    }
}
```

**注記**  
暗号化コンテキストで `kms:CreateGrant` 1 つの特定のジョブ ARN に制限すると、Amazon SageMaker AI も前のジョブの ARN を暗号化コンテキストとして使用して読み取り許可を作成するため、反復トレーニングは失敗します。ワイルドカードパターンを使用して、アカウント内のすべてのジョブの許可を許可します。

反復トレーニングジョブ (後続のジョブが前のジョブのチェックポイントから再開される) を実行すると、各ジョブの暗号化コンテキストにそのジョブ独自の ARN が含まれます。Amazon SageMaker AI は、反復トレーニングをサポートするために 2 つの AWS KMS グラントを自動的に管理します。
+ **書き込み許可** – 現在のジョブの ARN を暗号化コンテキストとして使用して、現在のジョブが独自のチェックポイントデータを暗号化できるようにします。
+ **読み取り許可** – 現在のジョブが、前のジョブの ARN を暗号化コンテキストとして使用して、前のジョブからチェックポイントデータを復号できるようにします。

両方の許可は、ジョブが完了すると自動的に廃止されます。カスタマーマネージドキーを操作するために、反復トレーニング用のキーポリシーステートメントを追加する必要はありません。

マルチターン RL ジョブによって行われた AWS KMS API コールの CloudTrail ログを確認すると、暗号化コンテキストがログエントリの `requestParameters`フィールドに表示されます。この情報を使用して、データに対して特定の暗号化または復号オペレーションを実行したジョブを特定できます。

## とのマルチターン RL インタラクションのモニタリング AWS KMS
<a name="model-customize-mtrl-cmk-monitoring"></a>

を使用して AWS CloudTrail 、マルチターン RL ジョブに代わって行われた AWS KMS API コールをモニタリングできます。次の CloudTrail イベント名は、KMS キーの使用状況のモニタリングに関連しています。
+ `Decrypt` – ジョブが Amazon S3 から暗号化されたデータを読み取りたときにログに記録されます。
+ `GenerateDataKey` – ジョブが暗号化されたデータを Amazon S3 に書き込むときにログに記録されます。
+ `CreateGrant` – 呼び出し元がジョブ作成時に許可を作成するとログに記録されます。
+ `DescribeKey` – ジョブが検証用の KMS キーを記述したときにログに記録されます。

これらのイベントの CloudTrail ログエントリで、次の値を探します。
+ **requestParameters.granteePrincipal** – `CreateGrant`イベントの場合、 はグラントを受け取ったサービスプリンシパル () を表示します`job.sagemaker.amazonaws.com`。

 AWS KMS API コールのログ記録の詳細については、 *AWS KMS デベロッパーガイド*の「 [を使用した AWS KMS API コールのログ記録 AWS CloudTrail](https://docs.aws.amazon.com/kms/latest/developerguide/logging-using-cloudtrail.html#searching-kms-ct)」を参照してください。