

# カスタマーマネージド KMS キーを使用して AgentCore ゲートウェイを暗号化する
<a name="gateway-encryption"></a>

デフォルトでは、Gateway はサービス管理の AWS Key Management Service キーを使用して保管中のデータを暗号化します。ただし、必要に応じて、以下の場合に保管中のデータを暗号化するための独自のカスタマーマネージド KMS キーを指定できます。
+ ゲートウェイを作成します。
+ ゲートウェイの設定を更新します。

カスタマーマネージドキーを使用すると、次の機能を含め、暗号化プロセスをより詳細に制御できます。
+ 独自のスケジュールでキーをローテーションする
+ IAM ポリシーを使用してキーへのアクセスを制御する
+ 不要になったキーを無効化または削除します。
+ CloudWatch ログと AWS CloudTrail によるキー使用状況の監査

詳細については、[AWS 「 Key Management Service デベロッパーガイド](https://docs.aws.amazon.com/kms/latest/developerguide/)」を参照してください。

**注記**  
カスタマーマネージドキーを使用する場合は、キーとそのアクセス許可を管理する責任があります。キーが無効または削除された場合、または Gateway がキーを使用するアクセス許可を失った場合、暗号化されたデータにアクセスできなくなります。

## AgentCore ゲートウェイを暗号化するための前提条件
<a name="gateway-encryption-prereqs"></a>

ゲートウェイを暗号化する前に、次の前提条件を満たしていることを確認してください。
+ KMS キーにアクセスできます。KMS キーの作成については、[「KMS キーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)」を参照してください。
+ KMS キーには、次のアクセス許可を許可するキーポリシーがアタッチされています。
  + ゲートウェイサービスロールが次のアクションを実行できるようにするアクセス許可。
    + kms:CreateGrant
    + kms:DescribeKey
    + kms:Decrypt
    + kms:GenerateDataKey
  + (ゲートウェイの CloudWatch Logs を有効にする場合) CloudWatch Logs サービスがキーを復号できるようにするアクセス許可。

    KMS キーの IAM アクセス許可の制御の詳細については、「 Key Management Service デベロッパーガイド」の[「KMS キーのアクセスとアクセス許可](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)」を参照してください。 AWS 

 **キーポリシーの例** 

次のポリシー例では、ゲートウェイを暗号化し、暗号化されたゲートウェイを使用するために必要なアクセス許可を提供します。4 番目のステートメントでは、暗号化されたゲートウェイのキー使用状況の CloudWatch Logs ログ記録も許可します。このポリシーには、セキュリティのベストプラクティスに準拠するための条件キーが含まれています。

```
{
"Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowServiceRoleDescribeKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/GatewayServiceRole"
      },
      "Action": [
        "kms:DescribeKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": [
            "bedrock-agentcore.us-east-1.amazonaws.com"
          ]
        }
      }
    },
    {
      "Sid": "AllowServiceRoleDecryptKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/GatewayServiceRole"
      },
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": [
            "bedrock-agentcore.us-east-1.amazonaws.com"
          ]
        },
        "StringLike": {
          "kms:EncryptionContext:aws:bedrock-agentcore-gateway:arn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/GatewayId"
        }
      }
    },
    {
      "Sid": "AllowServiceRoleCreateGrant",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/GatewayServiceRole"
      },
      "Action": "kms:CreateGrant",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": [
            "bedrock-agentcore.us-east-1.amazonaws.com"
          ],
          "kms:GrantConstraintType": "EncryptionContextSubset"
        },
        "ForAllValues:StringEquals": {
          "kms:GrantOperations": [
            "Decrypt",
            "GenerateDataKey"
          ]
        },
        "StringLike": {
          "kms:EncryptionContext:aws:bedrock-agentcore-gateway:arn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/GatewayId"
        }
      }
    },
    {
      "Sid": "AllowKMSDecryptionLogging",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:EncryptionContext:SourceArn": "arn:aws:logs:us-east-1:123456789012:*"
        }
      }
    }
  ]
}
```

ポリシーには、次のステートメントが含まれています。
+  **AllowServiceRoleDescribeKKey** – AgentCore サービスを介してリクエストが行われた場合に、指定されたプリンシパルがキーを記述できるようにします。次のフィールドの値を置き換えます。
  +  `Principal` – `AWS`値をゲートウェイサービスロールの実際の ARN に置き換えます。
  +  `Condition` – `kms:ViaService`配列で、{{us-east-1}} を、キーの説明を許可する実際の AWS リージョンに置き換えます。
+  **AllowServiceRoleDecryptKey** – リクエストが AgentCore サービスを介して行われ、リクエストが行われたゲートウェイの ARN が `kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn`フィールドの ARN と一致する場合、指定されたプリンシパルがキーを復号できるようにします。以下の値を置き換えます:
  +  `Principal` – `AWS`値をゲートウェイサービスロールの実際の ARN に置き換えます。
  +  `Condition` – 以下を実行します。
    + `kms:ViaService` 配列で、{{us-east-1}} をキーの復号を許可する実際の AWS リージョンに置き換えます。
    + `kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn` 値をゲートウェイの実際の ARN に置き換えます。
+  **AllowServiceRoleCreateGrant** – リクエストが AgentCore サービスを介して行われ、リクエストが行われたゲートウェイの ARN が `kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn`フィールドの ARN と一致する場合、指定されたプリンシパルがキーの許可を作成できるようにします。以下の値を置き換えます:
  +  `Principal` – `AWS`値をゲートウェイサービスロールの実際の ARN に置き換えます。
  +  `Condition` – 以下を実行します。
    + `kms:ViaService` 配列で、{{us-east-1}} をキーの復号を許可する実際の AWS リージョンに置き換えます。
    + `kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn` 値をゲートウェイの実際の ARN に置き換えます (許可する場合）。
+  **AllowKMSDecryptionLogging** – 指定されたプリンシパルが CloudWatch Logs を通じてキーの使用状況を監査するために、カスタマーマネージド KMS キーを復号できるようにします。`kms:EncryptionContext:SourceArn` 値で、{{us-east-1}} および {{123456789012}} の値を実際の AWS リージョンとアカウント ID に置き換えます。

**Example**  

1. ======= カスタマー管理の KMS キーを使用してゲートウェイを暗号化するには

1. [「Amazon Bedrock AgentCore ゲートウェイの作成](gateway-create.md)」の**コンソール**ステップに従い、**KMS キー - オプション**セクションを展開します。

1. **暗号化設定をカスタマイズ (詳細) **を選択します。

1. KMS キーを選択し、その詳細を確認します。
**注記**  
KMS キーが表示されない場合は、[AgentCore ゲートウェイを暗号化するための前提条件](#gateway-encryption-prereqs)を確認し、アクセス許可が正しく設定されていることを確認します。

1. 残りのコンソールステップを続行します。

1. CLI を使用してゲートウェイを暗号化するには、[AgentCore コントロールプレーン](https://docs.aws.amazon.com/cli/latest/reference/bedrock-agentcore-control/)クライアントを介して次のいずれかのリクエストを送信する`kms-key-arn`ときに、 AWS を含めます。
   +  [create-gateway](https://docs.aws.amazon.com/cli/latest/reference/bedrock-agentcore-control/create-gateway.html) 
   +  [update-gateway](https://docs.aws.amazon.com/cli/latest/reference/bedrock-agentcore-control/update-gateway.html) 

     次の例は、 `kms-key-arn`引数を使用して指定された KMS AWS キーを使用してゲートウェイを作成する CLI リクエストの例を示しています。

     ```
     aws bedrock-agentcore-control create-gateway \
       --name "MyGateway" \
       --role-arn "arn:aws:iam::123456789012:role/GatewayRole" \
       --protocol-type "MCP" \
       --kms-key-arn "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" \
       --authorizer-type "CUSTOM_JWT" \
       --authorizer-configuration '{
         "customJWTAuthorizer": {
           "allowedAudience": ["myAudience"],
           "discoveryUrl": "https://example.com/.well-known/openid-configuration"
         }
       }'
     ```

1. Python SDK (Boto3) AWS を使用してゲートウェイを暗号化するには、[AgentCore コントロールプレーン](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-agentcore-control.html)クライアントを介して次のいずれかのリクエストを送信する`kms-key-arn`ときに を含めます。
   +  [create\_gateway](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-agentcore-control/client/create_gateway.html) 
   +  [update\_gateway](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-agentcore-control/client/update_gateway.html) 

     次の例は、 `kmsKeyArn`引数を使用して指定された KMS AWS キーを使用してゲートウェイを作成する Boto3 リクエストの例を示しています。

     ```
     import boto3
     # Create client
     agentcore_client = boto3.client('bedrock-agentcore-control')
     
     # Create gateway and specify
     gateway = agentcore_client.create_gateway(
       name="MyGateway",
       roleArn="arn:aws:iam::123456789012:role/GatewayRole",
       protocolType="MCP",
       kmsKeyArn="arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
       authorizerType="CUSTOM_JWT",
       authorizerConfiguration= {
         "customJWTAuthorizer": {
           "allowedAudience": ["myAudience"],
           "discoveryUrl": "https://example.com/.well-known/openid-configuration"
         }
       }
     )
     ```