View a markdown version of this page

加密您的資料目錄 - AWS Glue

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

加密您的資料目錄

AWS Glue Data Catalog 加密為您的敏感資料提供增強的安全性。 AWS Glue 與 AWS Key Management Service (AWS KMS) 整合,以加密存放在 Data Catalog 中的中繼資料,包括您為了語意搜尋而擴充業務內容的自動註冊資產。您可以使用 AWS Glue 主控台或 ,啟用或停用 Data Catalog 中資源的加密設定 AWS CLI。

在您為 Data Catalog 啟用加密時,您建立的所有新物件都會加密。在您停用加密時,您建立的新物件不會加密,但現有的加密物件將保持加密狀態。

您可以使用 AWS 受管加密金鑰或客戶受管加密金鑰來加密整個 Data Catalog。如需金鑰類型和狀態的詳細資訊,請參閱《 AWS Key Management Service 開發人員指南》中的AWS Key Management Service 概念

注意

在將加密的 Data Catalog 與編目程式搭配使用時,您必須維護加密設定。如果在編目程式處理加密的目錄後移除加密設定,會導致錯誤。如果您需要移除加密設定,請建立新的編目程式,而不是修改現有的編目程式。

AWS 受管金鑰

AWS 受管金鑰是您帳戶中的 KMS 金鑰,由與 整合的 AWS 服務代表您建立、管理和使用 AWS KMS。您可以檢視帳戶中的 AWS 受管金鑰、檢視其金鑰政策,以及稽核其在 AWS CloudTrail 日誌中的使用。不過,您無法管理這些金鑰或變更其許可。

靜態加密會自動與 整合 AWS KMS ,以管理 AWS 用於加密中繼資料 AWS Glue 的 受管金鑰。如果啟用中繼資料加密時不存在 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 Glue Data Catalog 物件的加密 AWS CLI。

Console
使用主控台啟用加密
  1. 登入 AWS 管理主控台 並開啟位於 https://https://console.aws.amazon.com/glue/ 的 AWS Glue 主控台。

  2. 在導覽窗格中,選擇 Data Catalog

  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 角色委派功能目前不支援使用 AWS 受管金鑰來加密 Data Catalog 資源。

    警告

    當您啟用 IAM 角色來委派 KMS 操作時,您無法再存取先前使用 AWS 受管金鑰加密的資料目錄資源。

    1. 若要啟用 AWS Glue 可擔任的 IAM 角色來代表您加密和解密資料,請選取將 KMS 操作委派給 IAM 角色選項。

    2. 接下來,選擇 IAM 角色。

      若要建立 IAM 角色,請參閱建立 AWS Glue IAM 角色

      AWS Glue 擔任存取 Data Catalog 的 IAM 角色必須具有在 Data Catalog 中加密和解密中繼資料的許可。您可以建立 IAM 角色,並連接下列內嵌政策:

      • 新增下列政策,以包含加密和解密 Data Catalog 的 AWS KMS 許可。

        JSON
        JSON
        { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-east-1:111122223333:key/<key-id>" } ] }
      • 接著,將下列信任政策新增至 角色,讓 AWS Glue 服務擔任 IAM 角色。

        JSON
        JSON
        { "Version":"2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
      • 接著,將 iam:PassRole 許可新增至 IAM 角色。

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

    當您啟用加密時,如果您尚未指定 AWS Glue 要讓 擔任的 IAM 角色,存取 Data Catalog 的主體必須具有許可,才能對 KMS 金鑰執行下列 AWS KMS 動作:

    • kms:DescribeKey

    • kms:Decrypt

    • kms:Encrypt

    • kms:GenerateDataKey

    • kms:CreateGrant

    下列政策會授予委託人所需的許可。kms:CreateGrant 動作允許 在 AWS KMS 請求完成後加密 AWS Glue 並重新加密 Data Catalog 中繼資料和背景中的搜尋索引。 會 AWS Glue 範圍glue_catalog_id加密內容的授予。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:DescribeKey", "Resource": "arn:aws:kms:<region>:<account-id>:key/<key-id>" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:<region>:<account-id>:key/<key-id>" }, { "Effect": "Allow", "Action": "kms:CreateGrant", "Resource": "arn:aws:kms:<region>:<account-id>:key/<key-id>", "Condition": { "StringEquals": { "kms:EncryptionContext:glue_catalog_id": "<account-id>" }, "StringLike": { "kms:CallerAccount": "<account-id>" }, "Bool": { "kms:GrantIsForAWSResource": "true" } } } ] }
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 中現有的加密物件。

重要

對於在 Data Catalog 中用它加密的任何物件, AWS KMS 金鑰必須保留在 AWS KMS 金鑰存放區中。如果您移除金鑰,就無法再解密該物件。在某些情況下,您可能要防止使用者存取 Data Catalog 中繼資料。

支援的目錄資源會自動在您的 AWS Glue Data Catalog 中註冊為資產。您可以將商業內容新增至這些資產,以語意方式搜尋和篩選此中繼資料 AWS Glue。當您使用客戶受管金鑰啟用中繼資料加密時, AWS Glue 也會使用 KMS 金鑰加密 Data Catalog 的搜尋索引。不需要其他步驟 — 在中繼資料加密中自動 AWS Glue 啟用搜尋索引加密。

如果您先前使用客戶受管金鑰啟用 Data Catalog 加密kms:Encrypt,且現有政策僅包含 kms:Decrypt、 和 kms:GenerateDataKey,則必須新增下列許可以支援目錄資產和語意搜尋:

  • kms:DescribeKey — 金鑰驗證所需的 。

  • kms:CreateGrant — 允許 在背景 AWS Glue 中加密和重新加密搜尋索引。 會 AWS Glue 範圍glue_catalog_id加密內容的授予。

如需包含這些許可的完整政策,請參閱 啟用加密。如果您是第一次設定加密,則該區段中的政策已包含所有必要的許可。

重要

Data Catalog 資產的語意搜尋不支援 AWS 受管金鑰 (aws/glue)。如果您的 Data Catalog 中繼資料使用 加密aws/glue,在您變更組態以使用客戶受管金鑰或移除組態之前,將無法搜尋該目錄。

啟用中繼資料加密是一種非同步操作。 會 AWS Glue 接受您的請求,然後完成加密設定,包括現有搜尋索引的加密。第一次啟用加密可能需要一些時間,具體取決於 Data Catalog 的大小。在此期間,業務內容和搜尋 APIs會傳回錯誤,直到狀態為 為止Enabled

下表說明 Data Catalog 資產中繼資料的不同加密狀態:

狀態 說明

啟用

AWS Glue 正在設定加密。當您第一次啟用加密時,搜尋在設定完成之前無法使用。當您從一個客戶受管金鑰變更為另一個金鑰時,搜尋仍然可用。

已啟用

加密已完成。您的 Data Catalog 中繼資料可供搜尋。

已啟用 (發生錯誤)

加密已完成,可使用搜尋,但 AWS Glue 無法處理某些中繼資料。主控台會顯示錯誤訊息。若要重試失敗的項目,請在修正錯誤後再次儲存加密設定。

失敗

加密無法完成,且搜尋不可用。檢閱錯誤訊息、更正組態,並使用客戶受管金鑰再次儲存加密設定。

停用

AWS Glue 正在使用您的 KMS 金鑰從搜尋索引停用加密。

Disabled

您的 Data Catalog 中繼資料和搜尋索引不會再使用 KMS 金鑰加密。商業內容和搜尋 APIs 會繼續運作。

當您將 Data Catalog 加密從一個客戶受管金鑰變更為另一個金鑰時, 會使用新金鑰 AWS Glue 重新加密搜尋索引。重新加密進行中時,搜尋仍然可用。當您停用中繼資料加密時, 會從搜尋索引 AWS Glue 移除 KMS 金鑰,且狀態會變更為 Disabled

警告

在加密狀態傳回 Enabled(或 Disabled,如果您停用加密) 之前,請勿停用、刪除或撤銷先前 KMS 金鑰的存取權。在操作完成之前,如果 AWS Glue 失去對上一個金鑰的存取權,則無法解密搜尋索引、狀態變更為 Failed,而且無法對 Data Catalog 進行搜尋。

啟用或停用中繼資料加密的委託人必須具有 中所述的kms:CreateGrant許可啟用加密。 AWS Glue 會在搜尋索引的 AWS KMS 操作中使用glue_catalog_id加密內容 (值為您的 catalogId),與 一致AWS Glue 加密內容。對搜尋索引 AWS Glue 進行的 AWS KMS 呼叫會記錄在 中 AWS CloudTrail。

存取商業內容和搜尋的主體也必須具有 KMS 金鑰的存取權。如果您已將 AWS KMS 操作委派給 IAM 服務角色,則服務角色必須改為有權存取 KMS 金鑰。

除了身分政策之外,您還必須將下列陳述式新增至 KMS 金鑰政策, AWS Glue 以允許 建立搜尋索引加密的授予。kms:GrantIsForAWSResource 條件會將授予限制為 AWS Glue,而glue_catalog_id加密內容會將其範圍限定為您的 Data Catalog。若要使用 陳述式,請以您自己的資訊取代使用者輸入預留位置

{ "Sid": "AllowCreateGrantForSearchIndexEncryption", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:root" }, "Action": "kms:CreateGrant", "Resource": "arn:aws:kms:region:account-id:key/key-id", "Condition": { "StringLike": { "kms:CallerAccount": "account-id" }, "Bool": { "kms:GrantIsForAWSResource": "true" }, "StringEquals": { "kms:EncryptionContext:glue_catalog_id": "account-id" } } }

監控 的 KMS 金鑰 AWS Glue

當您搭配 Data Catalog 資源使用 KMS 金鑰時,您可以使用 AWS CloudTrail 或 Amazon CloudWatch Logs 來追蹤 AWS Glue 傳送至 的請求 AWS KMS。 AWS CloudTrail 監控並記錄 KMS 操作,以 AWS Glue 呼叫 來存取由 KMS 金鑰加密的資料。

下列範例是 DecryptCreateGrantGenerateDataKeyRetireGrant操作 AWS CloudTrail 的事件。當您使用客戶受管金鑰啟用加密時, 會 AWS Glue 建立範圍限定為glue_catalog_id加密內容的 AWS KMS 授予,以便其可以在背景加密和重新加密 Data Catalog 中繼資料,並在 AWS Glue 不再需要授予時淘汰授予。

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" }
CreateGrant

當您使用客戶受管金鑰啟用加密時, 會在 KMS 金鑰上 AWS Glue 建立授權,讓 KMS 金鑰可以在背景加密和重新加密 Data Catalog 中繼資料。授予的範圍是glue_catalog_id加密內容。

{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Example/Sampleuser01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAIGDTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:role/Example", "accountId": "111122223333", "userName": "Example" }, "attributes": { "creationDate": "2024-04-22T17:02:00Z", "mfaAuthenticated": "false" } }, "invokedBy": "glue.amazonaws.com" }, "eventTime": "2024-04-22T17:02:00Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "eu-west-2", "sourceIPAddress": "glue.amazonaws.com", "userAgent": "glue.amazonaws.com", "requestParameters": { "retiringPrincipal": "glue.eu-west-2.amazonaws.com", "operations": [ "GenerateDataKey", "Decrypt", "Encrypt", "ReEncryptFrom", "ReEncryptTo", "DescribeKey", "RetireGrant" ], "granteePrincipal": "glue.eu-west-2.amazonaws.com", "constraints": { "encryptionContextSubset": { "glue_catalog_id": "111122223333" } }, "keyId": "arn:aws:kms:eu-west-2:111122223333:key/<key-id>" }, "responseElements": { "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE", "keyId": "arn:aws:kms:eu-west-2:111122223333:key/<key-id>" }, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": false, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-2:111122223333:key/<key-id>" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management", "sessionCredentialFromConsole": "true" }
RetireGrant

AWS Glue AWS Glue 會在不再需要授予時淘汰授予,例如當您變更 KMS 金鑰或停用加密時。

{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "glue.amazonaws.com" }, "eventTime": "2025-04-29T22:18:50Z", "eventSource": "kms.amazonaws.com", "eventName": "RetireGrant", "awsRegion": "eu-west-2", "sourceIPAddress": "glue.amazonaws.com", "userAgent": "glue.amazonaws.com", "requestParameters": null, "responseElements": { "keyId": "arn:aws:kms:eu-west-2:111122223333:key/<key-id>" }, "additionalEventData": { "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE" }, "requestID": "294308c0-7617-4727-b5c9-34eaf75aa8e3", "eventID": "273708f7-5fbb-3a90-b04d-2b3138bf0ec9", "readOnly": false, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-2:111122223333:key/<key-id>" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "sharedEventID": "b46377d7-b3c3-4bfd-a257-722bd3f3411d", "eventCategory": "Management" }