靜態加密 - Amazon ECR

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

靜態加密

Amazon 在 Amazon ECR 管理的 Amazon S3 ECR 存儲桶中存儲圖像。根據預設,Amazon ECR 會使用伺服器端加密搭配 Amazon S3 受管加密金鑰,這些加密金鑰會使用 AES -256 加密演算法加密靜態資料。這不需要您採取任何動作,並且免費提供。如需詳細資訊,請參閱 Amazon 簡單儲存服務使用者指南中的使用伺服器端加密搭配 Amazon SSE S3 受管加密金鑰 (-S3) 保護資料

若要進一步控制 Amazon 儲存ECR庫的加密,您可以使用存放在 AWS Key Management Service (AWS KMS) 中的KMS金鑰的伺服器端加密。使用 AWS KMS 加密資料時,您可以使用由 Amazon ECR 管理的預設值 AWS 受管金鑰,也可以指定您自己的KMS金鑰 (稱為客戶受管金鑰)。如需詳細資訊,請參閱 Amazon 簡單儲存服務使用者指南中的 AWS KMS (SSE-KMS) 中存放的KMS金鑰使用伺服器端加密來保護資料

每個 Amazon ECR 儲存庫都有一個加密組態,這是在建立儲存庫時設定的。您可以在每個儲存庫上使用不同的加密組態。如需詳細資訊,請參閱建立 Amazon ECR 私有儲存庫來存放映像檔

在啟用 AWS KMS 加密的情況下建立儲存庫時,會使用KMS金鑰來加密儲存庫的內容。此外,Amazon ECR 將 AWS KMS 授權添加到具有 Amazon ECR 存儲庫作為受授權人主要的KMS密鑰。

以下內容提供 Amazon ECR 如何整合以加密和解密儲存庫的高階理解: AWS KMS

  1. 建立儲存庫時,Amazon ECR 會傳送DescribeKey呼叫 AWS KMS 以驗證和擷取加密組態中指定KMS金鑰的 Amazon 資源名稱 (ARN)。

  2. Amazon ECR 傳送兩個CreateGrant請求 AWS KMS 來建立KMS金鑰授權,以允許 Amazon ECR 使用資料金鑰加密和解密資料。

  3. 推送映像時,會向其發出GenerateDataKey要求 AWS KMS ,指定用於加密映像層和資訊清單的KMS金鑰。

  4. AWS KMS 生成一個新的數據密鑰,在指定的密KMS鑰下對其進行加密,並發送加密的數據密鑰以與圖像層元數據和圖像清單一起存儲。

  5. 提取圖像時,會對「解密」請求進行 AWS KMS,指定加密的數據密鑰。

  6. AWS KMS 解密加密的資料金鑰,並將解密的資料金鑰傳送到 Amazon S3。

  7. 使用資料金鑰在提取映像層之前解密映像層。

  8. 刪除儲存庫時,Amazon ECR 會傳送兩個RetireGrant請求, AWS KMS 以淘汰為儲存庫建立的授權。

考量事項

在 Amazon 使用 AWS KMS 加密時,應考慮以下幾點ECR。

  • 如果您使用KMS加密建立 Amazon ECR 儲存庫,但未指定KMS金鑰,Amazon aws/ecr 依預設ECR會使用別名。 AWS 受管金鑰 當您第一次建立啟用KMS加密的儲存庫時,會在您的帳戶中建立此KMS金鑰。

  • 當您使用自己的KMS金鑰KMS加密時,金鑰必須與儲存庫位於相同的區域中。

  • Amazon 代表您ECR創建的贈款不應該被撤銷。如果您撤銷授予 Amazon ECR 權限使用您帳戶中 AWS KMS 金鑰的授權,Amazon 將ECR無法存取此資料、加密推送到儲存庫的新映像,或在提取影像時將其解密。當您撤銷 Amazon 的授權時ECR,更改會立即發生。若要撤銷存取權,請刪除儲存庫,而不是撤銷授權。刪除儲存庫時,Amazon 會代表您ECR淘汰授權。

  • 使用 AWS KMS 金鑰會產生相關的費用。如需詳細資訊,請參閱 AWS Key Management Service 定價

必要的IAM權限

使用伺服器端加密建立或刪除 Amazon ECR 儲存庫時 AWS KMS,所需的許可取決於您使用的特定KMS金鑰。

使用 Amazon 時所需 AWS 受管金鑰 的IAM許可 ECR

預設情況下,當 Amazon ECR 儲存庫已啟用 AWS KMS 加密但未指定KMS金鑰時,會使用 AWS 受管金鑰 適用ECR於 Amazon 的。使用 Amazon ECR 的 AWS受管KMS金鑰加密儲存庫時,任何具有建立存放庫權限的主體也可以在存放庫上啟用 AWS KMS 加密。但是,刪除存放庫的IAM主參與者必須具有kms:RetireGrant權限。如此可在建立儲存庫時淘汰新增至 AWS KMS 索引鍵的授權。

下列範例IAM原則可以作為內嵌原則新增至使用者,以確保他們具有刪除啟用加密的存放庫所需的最低權限。您可以使用 resource 參數來指定用來加密儲存庫的KMS金鑰。

{ "Version": "2012-10-17", "Id": "ecr-kms-permissions", "Statement": [ { "Sid": "AllowAccessToRetireTheGrantsAssociatedWithTheKey", "Effect": "Allow", "Action": [ "kms:RetireGrant" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/b8d9ae76-080c-4043-92EXAMPLE" } ] }

使用客戶管理的金鑰時所需的IAM權限

使用客戶管理的金鑰建立啟用 AWS KMS 加密的儲存庫時,金KMS鑰原則和建立存放庫之使用者或角色的IAM原則都必須具備所需的權限。

建立自己的KMS金鑰時,您可以使用 AWS KMS 建立的預設金鑰原則,也可以指定自己的金鑰原則。為了確保客戶管理的金鑰仍可由帳戶擁有者管理,金鑰的KMS金鑰原則應允許帳號 root 使用者的所有 AWS KMS 動作。可以將其他範圍的權限新增至金鑰原則,但至少應賦予 root 使用者管理金鑰的權限。KMS若要允許金KMS鑰僅用於源自 Amazon 的請求ECR,您可以使用 kms: ViaService 條件金鑰ecr.<region>.amazonaws.com值。

下列範例金鑰原則會提供擁有KMS金鑰完整存取權的 AWS 帳號 (root 使用者)。KMS如需此範例金鑰原則的詳細資訊,請參閱AWS Key Management Service 開發人員指南中的允許存取 AWS 帳戶並啟用政IAM策

{ "Version": "2012-10-17", "Id": "ecr-key-policy", "Statement": [ { "Sid": "EnableIAMUserPermissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" } ] }

建立儲存庫的IAM使用者、IAM角色或 AWS 帳戶除了必要的 Amazon kms:DescribeKey ECR 許可外 kms:CreateGrantkms:RetireGrant,還必須擁有、和許可。

注意

kms:RetireGrant權限必須新增至建立存放庫之使用者或角色的IAM原則中。您可以將kms:CreateGrantkms:DescribeKey權限新增至金鑰的金鑰原則,或是建立存放庫的使用者或角色的IAM原則。KMS如需有關 AWS KMS 權限運作方式的詳細資訊,請參閱AWS Key Management Service 開發人員指南中的AWS KMS API權限:動作和資源參考

下列範例IAM原則可以作為內嵌原則新增至使用者,以確保他們具有建立啟用加密的存放庫所需的最低權限,並在完成存放庫時刪除存放庫。使用資源參數可指定用於加密儲存庫的 AWS KMS key 。

{ "Version": "2012-10-17", "Id": "ecr-kms-permissions", "Statement": [ { "Sid": "AllowAccessToCreateAndRetireTheGrantsAssociatedWithTheKeyAsWellAsDescribeTheKey", "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:RetireGrant", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/b8d9ae76-080c-4043-92EXAMPLE" } ] }

允許使用者在建立儲存庫時在主控台中列出KMS金鑰

使用 Amazon ECR 主控台建立儲存庫時,您可以授與許可,讓使用者在啟用儲存庫的加密時,列出區域中的客戶受管KMS金鑰。下列IAM原則範例顯示使用主控台時列出KMS金鑰和別名所需的權限。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:ListKeys", "kms:ListAliases", "kms:DescribeKey" ], "Resource": "*" } }

監控 Amazon ECR 互動 AWS KMS

您可以使用 AWS CloudTrail 來追蹤 Amazon 代表您ECR傳送 AWS KMS 的請求。記錄檔中的記 CloudTrail 錄項目包含加密內容金鑰,可讓它們更容易識別。

Amazon ECR 加密環境

加密內容是一組鍵/值組,其中包含任意非私密資料。當您在加密資料的要求中包含加密內容時, AWS KMS 密碼編譯會將加密內容繫結至加密的資料。若要解密資料,您必須傳遞相同的加密內容。

在其GenerateDataKey解密請求中 AWS KMS,Amazon ECR 使用具有兩個名稱的加密內容-值對,用於識別正在使用的存儲庫和 Amazon S3 存儲桶。如以下範例所示。名稱不會改變,但組合的加密內容值對於每個值都是不同的。

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::us-west-2-starport-manifest-bucket/EXAMPLE1-90ab-cdef-fedc-ba987BUCKET1/sha256:a7766145a775d39e53a713c75b6fd6d318740e70327aaa3ed5d09e0ef33fc3df", "aws:ecr:arn": "arn:aws:ecr:us-west-2:111122223333:repository/repository-name" }

您可以使用加密內容在稽核記錄和日誌 (例如和 Amazon CloudWatch Logs) 中識別這些加密操作,並做為政策和授權中授權的條件。AWS CloudTrail

Amazon 加ECR密上下文由兩個名稱-值對組成。

  • aws:s3:arn – 第一個名稱-值配對會識別儲存貯體。金鑰為 aws:s3:arn。該值是 Amazon S3 存儲桶的亞馬遜資源名稱(ARN)。

    "aws:s3:arn": "ARN of an Amazon S3 bucket"

    例如,如果存儲桶ARN的是arn:aws:s3:::us-west-2-starport-manifest-bucket/EXAMPLE1-90ab-cdef-fedc-ba987BUCKET1/sha256:a7766145a775d39e53a713c75b6fd6d318740e70327aaa3ed5d09e0ef33fc3df,則加密內容將包括以下配對。

    "arn:aws:s3:::us-west-2-starport-manifest-bucket/EXAMPLE1-90ab-cdef-fedc-ba987BUCKET1/sha256:a7766145a775d39e53a713c75b6fd6d318740e70327aaa3ed5d09e0ef33fc3df"
  • aw:ecr: arn — 第二個名稱 — 值配對可識別儲存庫的 Amazon 資源名稱 ()。ARN金鑰為 aws:ecr:arn。該值是存儲庫ARN的值。

    "aws:ecr:arn": "ARN of an Amazon ECR repository"

    例如,如果存放庫ARN的是arn:aws:ecr:us-west-2:111122223333:repository/repository-name,則加密內容將包含下列配對。

    "aws:ecr:arn": "arn:aws:ecr:us-west-2:111122223333:repository/repository-name"

故障診斷

使用主控台刪除 Amazon ECR 儲存庫時,如果儲存庫已成功刪除,但 Amazon ECR 無法淘汰新增至儲存庫KMS金鑰的授權,您將收到以下錯誤訊息。

The repository [{repository-name}] has been deleted successfully but the grants created by the kmsKey [{kms_key}] failed to be retired

發生這種情況時,您可以自行淘汰存放庫的 AWS KMS 授權。

手動淘汰儲存區域的 AWS KMS 授權
  1. 列出用於儲存庫之 AWS KMS 金鑰的授權。此 key-id 值會包含在您從主控台收到的錯誤中。您也可以使用list-keys命令列出帳戶中特定區域中的 AWS 受管金鑰 和客戶管理KMS金鑰。

    aws kms list-grants \ --key-id b8d9ae76-080c-4043-9237-c815bfc21dfc --region us-west-2

    輸出包括一個EncryptionContextSubset與您的存儲庫的 Amazon 資源名稱(ARN)。這可用於確定新增到金鑰的哪個授予是您要淘汰的授予。GrantId 值會在下一個步驟中淘汰授予時使用。

  2. 淘汰為儲存庫新增之 AWS KMS 金鑰的每個授權。取代的值 GrantId 與上一步的輸出的授予的 ID。

    aws kms retire-grant \ --key-id b8d9ae76-080c-4043-9237-c815bfc21dfc \ --grant-id GrantId \ --region us-west-2