Amazon Redshift Data API で AWS KMS を使用する - Amazon Redshift

Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、ブログ記事を参照してください。

Amazon Redshift Data API で AWS KMS を使用する

Amazon Redshift クラスターまたは Redshift Serverless ワークグループをカスタマーマネージドキーで暗号化すると、Amazon Redshift Data API は同じカスタマーマネージドキーを使用してクエリと結果を保存および暗号化します。

Data API は、デフォルトでデータを暗号化して、クエリテキストやクエリ結果などの機密情報を保護します。この保護には、AWS が所有する AWS KMS 暗号化キーを使用します。

保管中のデータをデフォルトで暗号化して、機密データの保護に伴う運用上のオーバーヘッドと複雑な作業を軽減します。このアプローチにより、厳格な暗号化のコンプライアンスと規制要件に対応する安全なアプリケーションを構築できます。

AWS KMS での権限の使用

Data API でカスタマーマネージドキーを使用するには権限が必要です。

カスタマーマネージドキーで暗号化されたクラスターに対して ExecuteStatement または BatchExecuteStatement を呼び出すと、Amazon Redshift は AWS KMS に CreateGrant リクエストを送信してユーザーに代わって権限を作成します。AWS KMS は権限を使用して、アカウント内の KMS キーへのアクセス権を Data API に付与します。

DATA API では、以下のオペレーションでカスタマーマネージドキーを使用するのに権限が必要です。

  • Encrypt リクエストを AWS KMS に送信して、カスタマーマネージドキーを使用してクエリメタデータを暗号化する。

  • GenerateDataKey リクエストを AWS KMS に送信して、カスタマーマネージドキーで暗号化されたデータキーを生成する。

  • Decrypt リクエストを AWS KMS に送信して、暗号化されたデータキーを復号して、データを暗号化できるようにする。

権限へのアクセス許可の取り消し、またはカスタマーマネージドキーへの Amazon Redshift のアクセス許可の削除は、いつでも実行できます。これを行うと、DATA API はカスタマーマネージドキーによって暗号化されたデータにアクセスできなくなり、そのデータに依存しているオペレーションが影響を受けます。例えば、権限の取り消し後にクエリ結果を取得したり、クエリのステータスを追跡しようとすると、Data API は AccessDeniedException を返します。

カスタマーマネージドキーの KMS キーポリシー

キーポリシーは、カスタマーマネージドキーへのアクセスを制御します。すべてのカスタマーマネージドキーには、キーポリシーが 1 つだけ必要です。このポリシーには、そのキーを使用できるユーザーとその使用方法を決定するステートメントが含まれています。キーポリシーは、カスタマーマネージドキーの作成時に指定できます。詳細については、「AWS Key Management Service デベロッパーガイド」の「カスタマーマネージドキー」を参照してください。

Data API でカスタマーマネージドキーを使用するには、まず Amazon Redshift へのアクセスを許可する必要があります。キーポリシーで次の API オペレーションを許可する必要があります。

  • kms:CreateGrant - カスタマーマネージドキーに許可を追加します。この権限は、指定された AWS KMS キーへのアクセスを制御します。これにより、必要な許可オペレーションに対し Amazon Redshift がアクセスできるようにします。詳細については、「AWS KMS での権限の使用」を参照してください。

以下は、キーポリシーの例です。

"Statement":[ { "Sid":"Allow access to principals authorized to use Amazon Redshift", "Effect":"Allow", "Principal":{ "AWS":"*" }, "Action":[ "kms:DescribeKey", "kms:CreateGrant" ], "Resource":"*", "Condition":{ "StringEquals":{ "kms:ViaService":"redshift.amazonaws.com", "kms:CallerAccount":"111122223333" } } }, { "Sid":"AllowKeyAdministratorsAccess", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::111122223333:role/ExampleAdminRole" }, "Action":"kms:*", "Resource":"*" }, { "Sid":"AllowKeyUseForExampleRole", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::111122223333:role/ExampleUserRole" }, "Action":[ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource":"*" } ]

データ API 暗号化コンテキスト

暗号化コンテキストとは、データに関する追加のコンテキスト情報を含む、(オプションの) キーと値のペアのセットです。AWS KMS は、暗号化コンテキストを追加の認証済みデータとして使用し、認証付き暗号化をサポートします。データの暗号化リクエストに暗号化コンテキストを組み込むと、AWS KMS は暗号化コンテキストを暗号化後のデータにバインドします。データを復号するには、そのリクエストに同じ暗号化コンテキストを含める必要があります。

Data API は、プロビジョニングされたクラスターのすべての AWS KMS 暗号化オペレーションで同じ 3 つの暗号化コンテキストのキーと値のペアを使用します。

  • aws:redshift:arn – クラスターの Amazon リソースネーム (ARN) (文字列)

  • aws:redshift:createtime – クラスターの作成をリクエストしたときのタイムスタンプ

  • serviceNameRedshiftDataAPI

"EncryptionContextSubset": { "aws:redshift:arn": "arn:aws:redshift:us-east-1:123456789012:cluster:redshift-cluster", "aws:redshift:createtime": "20250815T0000Z", "serviceName": "RedshiftDataAPI", }

Data API は、サーバーレスワークグループのすべての AWS KMS 暗号化オペレーションで 2 つの暗号化コンテキストのキーと値のペアを使用します。

  • aws:redshift-serverless:arn – 名前空間の Amazon リソースネーム (ARN)

  • serviceName – RedshiftDataAPI

"EncryptionContextSubset": { "aws:redshift-serverless:arn": "arn:aws:redshift-serverless:us-east-1:123456789012:namespace:12345678-1234-1234-1234-123456789012", "serviceName": "RedshiftDataAPI" }

暗号化の詳細については、「AWS KMS の暗号化の詳細の概要」を参照してください。Amazon Redshift と AWS KMS 統合の詳細については、「Amazon Redshift が AWS KMS を使用する方法」を参照してください。