本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
的 REST 加密 AWS HealthLake
HealthLake 預設提供加密,使用服務擁有的 AWS Key Management Service (AWS KMS) 金鑰來保護靜態敏感客戶資料。客戶管理的 KMS 金鑰也受到支援,而且從資料存放區匯入和匯出檔案都需要。若要進一步了解客戶受管 KMS 金鑰,請參閱 Amazon Key Management Service。建立資料存放區時,客戶可以選擇 AWS 擁有的 KMS 金鑰或客戶受管的 KMS 金鑰。建立資料存放區之後,就無法變更加密組態。如果資料存放區使用 AWS 擁有的 KMS 金鑰,則會將其表示為 AWS_OWNED_KMS_KEY,而且您不會看到用於靜態加密的特定金鑰。
AWS 擁有的 KMS 金鑰
HealthLake 預設會使用這些金鑰自動加密潛在的敏感資訊,例如個人身分識別或靜態私有健康資訊 (PHI) 資料。AWS 擁有的 KMS 金鑰不會存放在您的帳戶中。它們是 AWS 擁有和管理用於多個 AWS 帳戶的 KMS 金鑰集合的一部分。AWS 服務可以使用 AWS 擁有的 KMS 金鑰來保護您的資料。您無法檢視、管理、使用 AWS 擁有的 KMS 金鑰或稽核其使用方式。不過,您不需要進行任何工作或變更任何程式,即可保護加密資料的金鑰。
如果您使用 AWS 擁有的 KMS 金鑰,您不需要支付每月費用或使用費,而且這些金鑰不會計入您帳戶的 AWS KMS 配額。如需詳細資訊,請參閱 AWS 擁有的金鑰。
客戶受管 KMS 金鑰
HealthLake 支援使用您建立、擁有和管理的對稱客戶受管 KMS 金鑰,以透過現有的 AWS 擁有的加密新增第二層加密。您可以完全控制此層加密,因此能執行以下任務:
-
建立和維護金鑰政策、IAM 政策和授予
-
輪換金鑰密碼編譯資料
-
啟用和停用金鑰政策
-
新增 標籤
-
建立金鑰別名
-
安排金鑰供刪除
您也可以使用 CloudTrail 來追蹤 HealthLake AWS KMS 代表您傳送給 的請求。 AWS KMS 需支付額外費用。如需詳細資訊,請參閱客戶擁有的金鑰。
建立客戶受管金鑰
您可以使用 AWS 管理主控台或 AWS KMS APIs 來建立對稱客戶受管金鑰。
請遵循 AWS Key Management Service 開發人員指南中建立對稱客戶受管金鑰的步驟。
金鑰政策會控制客戶受管金鑰的存取權限。每個客戶受管金鑰都必須只有一個金鑰政策,其中包含決定誰可以使用金鑰及其使用方式的陳述式。在建立客戶受管金鑰時,可以指定金鑰政策。如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的管理對客戶受管金鑰的存取。
若要將客戶受管金鑰與 HealthLake 資源搭配使用,必須在金鑰政策中允許 kms:CreateGrant 操作。這會將授予新增至客戶受管金鑰,以控制對指定 KMS 金鑰的存取,讓使用者存取 HealthLake 所需的 kms:grant 操作。如需詳細資訊,請參閱使用授予。
若要將客戶受管 KMS 金鑰與 HealthLake 資源搭配使用,必須在金鑰政策中允許下列 API 操作:
-
kms:CreateGrant 會將授予新增至特定客戶受管 KMS 金鑰,以允許存取授予操作。
-
kms:DescribeKey 提供驗證金鑰所需的客戶受管金鑰詳細資訊。這是所有 操作的必要項目。
-
kms:GenerateDataKey 提供存取權,以加密所有寫入操作的靜態資源。
-
kms:Decrypt 可讓您存取加密資源的讀取或搜尋操作。
以下是政策陳述式範例,可讓使用者建立資料存放區並與其互動 AWS HealthLake ,該存放區由該金鑰加密:
"Statement": [ { "Sid": "Allow access to create data stores and do CRUD/search in AWS HealthLake", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:HealthLakeFullAccessRole" }, "Action": [ "kms:DescribeKey", "kms:CreateGrant", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "healthlake.amazonaws.com", "kms:CallerAccount": "111122223333" } } } ]
使用客戶受管 KMS 金鑰所需的 IAM 許可
使用客戶受管 KMS 金鑰建立已啟用 AWS KMS 加密的資料存放區時,建立 HealthLake 資料存放區的使用者或角色需要金鑰政策和 IAM 政策的許可。
您可以使用 kms:ViaService 條件金鑰,將 KMS 金鑰的使用限制為僅來自 HealthLake 的請求。
如需金鑰政策的詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的啟用 IAM 政策。
建立儲存庫的 IAM 使用者、IAM 角色或 AWS 帳戶必須具有 kms:CreateGrant、kms:GenerateDataKey 和 kms:DescribeKey 許可,以及必要的 HealthLake 許可。
HealthLake 如何在 AWS KMS 中使用授予
HealthLake 需要授予才能使用客戶受管 KMS 金鑰。當您建立使用客戶受管 KMS 金鑰加密的資料存放區時,HealthLake 會透過傳送 CreateGrant 請求至 AWS KMS 來代表您建立授權。AWS KMS 中的授予用於授予 HealthLake 存取客戶帳戶中 KMS 金鑰的權限。
HealthLake 代表您建立的授予不應被撤銷或淘汰。如果您撤銷或淘汰授予 HealthLake 許可以使用您帳戶中的 AWS KMS 金鑰的授予,HealthLake 無法存取此資料、加密推送到資料存放區的新 FHIR 資源,或在提取時解密這些資源。當您撤銷或淘汰 HealthLake 的授予時,變更會立即發生。若要撤銷存取權,您應該刪除資料存放區,而不是撤銷授予。刪除資料存放區時,HealthLake 會代表您淘汰授予。
監控 HealthLake 的加密金鑰
您可以使用 CloudTrail 來追蹤 HealthLake 在使用客戶受管 KMS 金鑰時代表您傳送給 AWS KMS 的請求。CloudTrail 日誌中的日誌項目會在 userAgent 欄位中顯示 healthlake.amazonaws.com,以清楚區分 HealthLake 提出的請求。
下列範例是 CreateGrant、GenerateDataKey、Decrypt 和 DescribeKey 的 CloudTrail 事件,用於監控 HealthLake 呼叫 AWS KMS 的操作,以存取客戶受管金鑰加密的資料。
以下說明如何使用 CreateGrant 來允許 HealthLake 存取客戶提供的 KMS 金鑰,讓 HealthLake 能夠使用該 KMS 金鑰來加密所有靜態客戶資料。
使用者不需要建立自己的授予。HealthLake 會透過傳送 CreateGrant 請求至 AWS KMS 來代表您建立授權。中的授予 AWS KMS 用於授予 HealthLake 存取客戶帳戶中 AWS KMS 金鑰的權限。
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "EXAMPLEROLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Sampleuser01, "accountId": "111122223333", "accessKeyId": "EXAMPLEKEYID", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "EXAMPLEROLE", "arn": "arn:aws:iam::111122223333:role/Sampleuser01", "accountId": "111122223333", "userName": "Sampleuser01" }, "webIdFederationData": {}, "attributes": { "creationDate": "2021-06-30T19:33:37Z", "mfaAuthenticated": "false" } }, "invokedBy": "healthlake.amazonaws.com" }, "eventTime": "2021-06-30T20:31:15Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-east-1", "sourceIPAddress": "healthlake.amazonaws.com", "userAgent": "healthlake.amazonaws.com", "requestParameters": { "operations": [ "CreateGrant", "Decrypt", "DescribeKey", "Encrypt", "GenerateDataKey", "GenerateDataKeyWithoutPlaintext", "ReEncryptFrom", "ReEncryptTo", "RetireGrant" ], "granteePrincipal": "healthlake.us-east-1.amazonaws.com", "keyId": "arn:aws:kms:us-east-1:111122223333:key/EXAMPLE_KEY_ARN", "retiringPrincipal": "healthlake.us-east-1.amazonaws.com" }, "responseElements": { "grantId": "EXAMPLE_ID_01" }, "requestID": "EXAMPLE_ID_02", "eventID": "EXAMPLE_ID_03", "readOnly": false, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:111122223333:key/EXAMPLE_KEY_ARN" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }
下列範例示範如何使用 GenerateDataKey,確保使用者擁有在儲存資料之前加密資料的必要許可。
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "EXAMPLEUSER", "arn": "arn:aws:sts::111122223333:assumed-role/Sampleuser01", "accountId": "111122223333", "accessKeyId": "EXAMPLEKEYID", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "EXAMPLEROLE", "arn": "arn:aws:iam::111122223333:role/Sampleuser01", "accountId": "111122223333", "userName": "Sampleuser01" }, "webIdFederationData": {}, "attributes": { "creationDate": "2021-06-30T21:17:06Z", "mfaAuthenticated": "false" } }, "invokedBy": "healthlake.amazonaws.com" }, "eventTime": "2021-06-30T21:17:37Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-1", "sourceIPAddress": "healthlake.amazonaws.com", "userAgent": "healthlake.amazonaws.com", "requestParameters": { "keySpec": "AES_256", "keyId": "arn:aws:kms:us-east-1:111122223333:key/EXAMPLE_KEY_ARN" }, "responseElements": null, "requestID": "EXAMPLE_ID_01", "eventID": "EXAMPLE_ID_02", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:111122223333:key/EXAMPLE_KEY_ARN" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }
下列範例顯示 HealthLake 如何呼叫 Decrypt 操作,以使用存放的加密資料金鑰來存取加密的資料。
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "EXAMPLEUSER", "arn": "arn:aws:sts::111122223333:assumed-role/Sampleuser01", "accountId": "111122223333", "accessKeyId": "EXAMPLEKEYID", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "EXAMPLEROLE", "arn": "arn:aws:iam::111122223333:role/Sampleuser01", "accountId": "111122223333", "userName": "Sampleuser01" }, "webIdFederationData": {}, "attributes": { "creationDate": "2021-06-30T21:17:06Z", "mfaAuthenticated": "false" } }, "invokedBy": "healthlake.amazonaws.com" }, "eventTime": "2021-06-30T21:21:59Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-1", "sourceIPAddress": "healthlake.amazonaws.com", "userAgent": "healthlake.amazonaws.com", "requestParameters": { "encryptionAlgorithm": "SYMMETRIC_DEFAULT", "keyId": "arn:aws:kms:us-east-1:111122223333:key/EXAMPLE_KEY_ARN" }, "responseElements": null, "requestID": "EXAMPLE_ID_01", "eventID": "EXAMPLE_ID_02", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:111122223333:key/EXAMPLE_KEY_ARN" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }
下列範例顯示 HealthLake 如何使用 DescribeKey 操作來驗證 AWS KMS 客戶擁有的 AWS KMS 金鑰是否處於可用狀態,並在使用者無法運作時進行故障診斷。
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "EXAMPLEUSER", "arn": "arn:aws:sts::111122223333:assumed-role/Sampleuser01", "accountId": "111122223333", "accessKeyId": "EXAMPLEKEYID", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "EXAMPLEROLE", "arn": "arn:aws:iam::111122223333:role/Sampleuser01", "accountId": "111122223333", "userName": "Sampleuser01" }, "webIdFederationData": {}, "attributes": { "creationDate": "2021-07-01T18:36:14Z", "mfaAuthenticated": "false" } }, "invokedBy": "healthlake.amazonaws.com" }, "eventTime": "2021-07-01T18:36:36Z", "eventSource": "kms.amazonaws.com", "eventName": "DescribeKey", "awsRegion": "us-east-1", "sourceIPAddress": "healthlake.amazonaws.com", "userAgent": "healthlake.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-east-1:111122223333:key/EXAMPLE_KEY_ARN" }, "responseElements": null, "requestID": "EXAMPLE_ID_01", "eventID": "EXAMPLE_ID_02", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:111122223333:key/EXAMPLE_KEY_ARN" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }
進一步了解
下列資源提供有關靜態資料加密的詳細資訊。
如需 AWS Key Management Service 基本概念的詳細資訊,請參閱 AWS KMS 文件。
如需 AWS KMS 文件中安全最佳實務的詳細資訊。