本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
靜態加密
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
-
建立儲存庫時,Amazon ECR 會傳送DescribeKey呼叫 AWS KMS 以驗證和擷取加密組態中指定KMS金鑰的 Amazon 資源名稱 (ARN)。
-
Amazon ECR 傳送兩個CreateGrant請求 AWS KMS 來建立KMS金鑰授權,以允許 Amazon ECR 使用資料金鑰加密和解密資料。
-
推送映像時,會向其發出GenerateDataKey要求 AWS KMS ,指定用於加密映像層和資訊清單的KMS金鑰。
-
AWS KMS 生成一個新的數據密鑰,在指定的密KMS鑰下對其進行加密,並發送加密的數據密鑰以與圖像層元數據和圖像清單一起存儲。
-
提取圖像時,會對「解密」請求進行 AWS KMS,指定加密的數據密鑰。
-
AWS KMS 解密加密的資料金鑰,並將解密的資料金鑰傳送到 Amazon S3。
-
使用資料金鑰在提取映像層之前解密映像層。
-
刪除儲存庫時,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:CreateGrant
kms:RetireGrant
,還必須擁有、和許可。
注意
kms:RetireGrant
權限必須新增至建立存放庫之使用者或角色的IAM原則中。您可以將kms:CreateGrant
和kms: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 授權
-
列出用於儲存庫之 AWS KMS 金鑰的授權。此
key-id
值會包含在您從主控台收到的錯誤中。您也可以使用list-keys
命令列出帳戶中特定區域中的 AWS 受管金鑰 和客戶管理KMS金鑰。aws kms list-grants \ --key-id
b8d9ae76-080c-4043-9237-c815bfc21dfc
--regionus-west-2
輸出包括一個
EncryptionContextSubset
與您的存儲庫的 Amazon 資源名稱(ARN)。這可用於確定新增到金鑰的哪個授予是您要淘汰的授予。GrantId
值會在下一個步驟中淘汰授予時使用。 -
淘汰為儲存庫新增之 AWS KMS 金鑰的每個授權。取代的值
GrantId
與上一步的輸出的授予的 ID。aws kms retire-grant \ --key-id
b8d9ae76-080c-4043-9237-c815bfc21dfc
\ --grant-idGrantId
\ --regionus-west-2