Data Catalog の暗号化 - AWS Glue

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

Data Catalog の暗号化

AWS Glue Data Catalog 暗号化により、機密データのセキュリティが強化されます。AWS Glue は AWS Key Management Service (AWS KMS) と統合し、Data Catalog に保存されているメタデータを暗号化します。AWS Glue コンソールまたは AWS CLI を使用し、Data Catalog でリソースの暗号化設定を有効または無効にできます。

Data Catalog の暗号化を有効にすると、新しく作成するオブジェクトはすべて暗号化されます。暗号化を無効にすると、新しく作成するオブジェクトは暗号化されませんが、既存の暗号化オブジェクトは暗号化された状態が維持されます。

AWS マネージド暗号化キーまたはカスタマーマネージド暗号化キーを使用し、Data Catalog 全体を暗号化できます。キーの種類と状態の詳細については、「AWS Key Management Service デベロッパーガイド」の「AWS Key Management Service の概念」を参照してください。

AWS マネージドキー

AWS マネージドキーはお客様のアカウントにある KMS キーであり、AWS KMS と統合された AWS サービスがお客様に代わって作成、管理、使用します。アカウントの AWS マネージドキーの表示、キーポリシーの表示し、AWS CloudTrail ログでその使用の監査を行うことができます。ただし、キーを管理したり、許可を変更したりすることはできません。

保管時の暗号化は、メタデータの暗号化に使用される AWS Glue の AWS マネージドキーを管理するため、AWS KMS と自動的に統合されます。メタデータの暗号化を有効にしたときに AWS マネージドキーが存在しない場合、AWS KMS は自動的に新しいキーを作成します。

詳細については、「AWS マネージドキー」を参照してください。

カスタマーマネージドキー

カスタマーマネージドキーは AWS アカウント内の KMS キーで、ユーザーが作成、所有、および管理します。ユーザーは、この KMS キーに関する完全なコントロール権を持ちます。次のようにできます。

  • キーポリシー、IAM ポリシー、許可付与の確立と維持

  • 有効化と無効化

  • 暗号化マテリアルのローテーション

  • タグを追加する

  • 参照するエイリアスの作成

  • 削除のスケジュール設定

カスタマーマネージドキーの許可を管理する方法の詳細については、「カスタマーマネージドキー」を参照してください。

重要

AWS Glue は、対称カスタマーマネージドキーのみをサポートしています。KMS キー リストには、対称キーのみが表示されます。ただし、[KMS キー ARN の選択] を選択した場合、任意のキータイプの ARN をコンソールで入力します。対称キーには ARN だけを入力するようにしてください。

対称カスタマーマネージドキーを作成するには、「AWS Key Management Service デベロッパーガイド」の「対称カスタマーマネージドキーの作成」の手順に従ってください。

保存時に Data Catalog の暗号化を有効にすると、KMS キーを使用して次のリソースタイプが暗号化されます。

  • データベース

  • テーブル

  • パーティション

  • テーブルのバージョン

  • 列統計

  • ユーザー定義関数

  • Data Catalog のビュー

AWS Glue の暗号化コンテキスト

暗号化コンテキストとは、データに関する追加のコンテキスト情報を含むために、使用する (オプションの) キーと値のペアのセットです。AWS KMS は、暗号化コンテキストを追加の認証済みデータとして使用し、暗号化の認証をサポートします。データの暗号化リクエストに暗号化コンテキストを組み込むと、AWS KMS は暗号化コンテキストを暗号化後のデータにバインドします。データを復号化するには、リクエストに同じ暗号化コンテキストを含めます。AWS Glue はすべての AWS KMS の暗号化処理に同じ暗号化コンテキストを使用する際、キーは glue_catalog_id で値は catalogId を指定します。

"encryptionContext": { "glue_catalog_id": "111122223333" }

AWS マネージドキーまたは対称カスタマーマネージドキーを使用して Data Catalog を暗号化するとき、監査レコードとログで暗号化コンテキストも使用することができ、キーがどのように使用されているか特定することができます。暗号化コンテキストは、AWS CloudTrail または Amazon CloudWatch ログが生成したログにも表示されます。

暗号化の有効化

AWS Glue コンソールの [データカタログの設定] または AWS CLI を使用し、AWS Glue Data Catalog オブジェクトの暗号化を有効にできます。

Console
コンソールを使用して暗号化を有効にするには
  1. AWS Management Console にサインインし、AWS Glue コンソール (https://console.aws.amazon.com/glue/) を開きます。

  2. ナビゲーションペインで、[データカタログ] を選択します。

  3. [データカタログの設定] ページで、[メタデータの暗号化] チェックボックスを選択し、AWS KMS​ キーを選択します。

    暗号化を有効にするとき、カスタマーマネージドキーを指定しない場合、暗号化設定では AWS マネージド KMS キーが使用されます。

  4. (オプション) カスタマーマネージドキーを使用して Data Catalog を暗号化すると、リソースを暗号化および復号化するため、Data Catalog は IAM ロールを登録するオプションを提供します。お客様に代わって AWS Glue が引き受ける IAM ロールの許可を付与する必要があります。データを暗号化および復号する AWS KMS アクセス許可が含まれます。

    Data Catalog に新しいリソースを作成すると、AWS Glue はデータを暗号化するために提供される IAM ロールを引き受けます。同様に、コンシューマがリソースにアクセスすると、AWS Glue はデータを復号化する IAM ロールを引き受けます。必要な許可を持つ IAM ロールを登録した場合、呼び出し元のプリンシパルはキーにアクセスしてデータを復号化する許可の必要がなくなります。

    重要

    カスタマーマネージドキーを使用して Data Catalog リソースを暗号化するときに限り、KMS オペレーションを IAM ロールに委任できます。KMS ロール委任の機能は、現時点では Data Catalog リソースの暗号化に AWS マネージドキーの使用をサポートしていません。

    警告

    IAM ロールを有効にして KMS の操作を委任すると、以前に AWS マネージドキーで暗号化された Data Catalog リソースにアクセスできなくなります。

    1. お客様に代わって AWS Glue が引き受けられる IAM ロールを有効にし、データの暗号化および復号化できるようにするには、[KMS 操作を IAM ロールに委任する] オプションを選択します。

    2. 次に、IAM ロールを選択します。

      IAM ロールを作成するには、「AWS Glue の IAM ロールを作成する」を参照してください。

      Data Catalog にアクセスするために AWS Glue が引き受ける IAM ロールには、Data Catalog のメタデータを暗号化および復号化する許可が必要です。IAM ロールを作成し、次のインラインポリシーをアタッチできます。

      • 次のポリシーを追加し、Data Catalog を暗号化および復号化する AWS KMS 許可を含めてください。

        { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:<region>:<account-id>:key/<key-id>" } ] }
      • 次に、AWS Glue サービスが IAM ロールを引き受けるには、ロールに次の信頼ポリシーを追加します。

        { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
      • 次に、IAM ロールに iam:PassRole 許可を追加します。

        { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::<account-id>:role/<encryption-role-name>" ] } ] }

    暗号化を有効にするとき、AWS Glue が引き受ける IAM ロールを指定していない場合、Data Catalog にアクセスするプリンシパルには、次の API 操作を実行する許可が必要です。

    • kms:Decrypt

    • kms:Encrypt

    • kms:GenerateDataKey

AWS CLI
SDK または AWS CLI を使用して暗号化を有効にするには
  • PutDataCatalogEncryptionSettings API オペレーションを使用します。キーが指定されていない場合、AWS Glue はカスタマーアカウントに AWS マネージド暗号化キーを使用し、Data Catalog を暗号化します。

    aws glue put-data-catalog-encryption-settings \ --data-catalog-encryption-settings '{ "EncryptionAtRest": { "CatalogEncryptionMode": "SSE-KMS-WITH-SERVICE-ROLE", "SseAwsKmsKeyId": "arn:aws:kms:<region>:<account-id>:key/<key-id>", "CatalogEncryptionServiceRole":"arn:aws:iam::<account-id>:role/<encryption-role-name>" } }'

暗号化を有効にすると、Data Catalog オブジェクトで作成するすべてのオブジェクトが暗号化されます。この設定をオフにすると、Data Catalog で作成するオブジェクトが暗号化されなくなります。必要な KMS 許可を使用して、Data Catalog の既存の暗号化オブジェクトに引き続きアクセスできます。

重要

AWS KMS​ キーは、Data Catalog でそのキーを使用して暗号化されたすべてのオブジェクトの ​AWS KMS キーストアに、使用可能な状態で保持する必要があります。キーを削除すると、オブジェクトは復号化できなくなります。ある種のシナリオでは、このようにして、Data Catalog メタデータにアクセスできないようにする場合があります。

AWS Glue 用に KMS キーの監視

Data Catalog リソースに KMS キーを使用すると、AWS CloudTrail または Amazon CloudWatch ログを使用して AWS Glue が AWS KMS に送信するリクエストを追跡できます。AWS CloudTrail は、KMS キーで暗号化されたデータにアクセスするために AWS Glue が呼び出す KMS 操作を監視および記録します。

次の例は、Decrypt および GenerateDataKey オペレーションの AWS CloudTrail イベントです。

Decrypt
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAXPHTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAXPHTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "111122223333", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "creationDate": "2024-01-10T14:33:56Z", "mfaAuthenticated": "false" } }, "invokedBy": "glue.amazonaws.com" }, "eventTime": "2024-01-10T15:18:11Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "eu-west-2", "sourceIPAddress": "glue.amazonaws.com", "userAgent": "glue.amazonaws.com", "requestParameters": { "encryptionContext": { "glue_catalog_id": "111122223333" }, "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "43b019aa-34b8-4798-9b98-ee968b2d63df", "eventID": "d7614763-d3fe-4f84-a1e1-3ca4d2a5bbd5", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:<region>:111122223333:key/<key-id>" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management", "sessionCredentialFromConsole": "true" }
GenerateDataKey
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAXPHTESTANDEXAMPLE:V_00_GLUE_KMS_GENERATE_DATA_KEY_111122223333", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/V_00_GLUE_KMS_GENERATE_DATA_KEY_111122223333", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAXPHTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "AKIAIOSFODNN7EXAMPLE", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "creationDate": "2024-01-05T21:15:47Z", "mfaAuthenticated": "false" } }, "invokedBy": "glue.amazonaws.com" }, "eventTime": "2024-01-05T21:15:47Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "eu-west-2", "sourceIPAddress": "glue.amazonaws.com", "userAgent": "glue.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:eu-west-2:AKIAIOSFODNN7EXAMPLE:key/AKIAIOSFODNN7EXAMPLE", "encryptionContext": { "glue_catalog_id": "111122223333" }, "keySpec": "AES_256" }, "responseElements": null, "requestID": "64d1783a-4b62-44ba-b0ab-388b50188070", "eventID": "1c73689b-2ef2-443b-aed7-8c126585ca5e", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-2:111122223333:key/AKIAIOSFODNN7EXAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }