저장된 데이터 암호화
Amazon ECR은 Amazon ECR이 관리하는 Amazon S3 버킷에 이미지를 저장합니다. 기본적으로 Amazon ECR은 Amazon S3 관리형 암호화 키를 사용하여 서버 측 암호화를 사용합니다. 이 암호화 키는 AES-256 암호화 알고리즘을 사용하여 유휴 데이터를 암호화합니다. 이 작업에 대한 조치는 필요하지 않으며 추가 비용 없이 제공됩니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서의 Amazon S3 관리형 암호화 키(SSE-S3)로 서버 측 암호화를 사용하여 데이터 보호를 참조하세요.
Amazon ECR 리포지토리의 암호화를 보다 효과적으로 제어하려면 AWS Key Management Service에 저장된 KMS 키로 서버 측 암호화를 사용할 수 있습니다(AWS KMS). AWS KMS을(를) 사용하여 데이터를 암호화하는 경우 Amazon ECR에서 관리하는 기본 AWS 관리형 키을(를) 사용하거나 고유의 KMS 키(고객 관리형 키라고 함)를 지정할 수 있습니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서의 AWS KMS(SSE-KMS)에 저장된 KMS 키로 서버 측 암호화를 사용하여 데이터 보호를 참조하세요.
각 Amazon ECR 리포지토리에는 리포지토리가 생성될 때 설정되는 암호화 구성이 있습니다. 각 리포지토리에 서로 다른 암호화 구성을 사용할 수 있습니다. 자세한 정보는 프라이빗 리포지토리 생성을 참조하십시오.
AWS KMS 암호화가 활성화되고 리포지토리가 생성되는 경우, 리포지토리의 콘텐츠를 암호화하는 데 KMS 키가 사용됩니다. 또한, Amazon ECR은 Amazon ECR 리포지토리를 피부여자 보안 주체로 하여 AWS KMS 권한을 KMS 키에 추가합니다.
다음은 Amazon ECR이 AWS KMS와 통합되어 리포지토리를 암호화 및 해독하는 방식의 높은 수준의 이해를 제공합니다.
-
리포지토리를 생성할 때 Amazon ECR은 DescribeKey 호출을 AWS KMS로 전송하여 암호화 구성에 지정된 KMS 키의 Amazon 리소스 이름(ARN)을 확인하고 검색합니다.
-
Amazon ECR은 두 건의 CreateGrant 요청을 AWS KMS로 전송하여 KMS 키에 대한 권한을 생성하여 Amazon ECR에서 데이터 키를 사용하여 데이터를 암호화하고 해독할 수 있도록 합니다.
-
이미지를 푸시할 때 이미지 레이어 및 매니페스트를 암호화하는 데 사용할 KMS 키를 지정하는 GenerateDataKey 요청이 AWS KMS로 이루어집니다.
-
AWS KMS 는 새 데이터 키를 생성하고 지정된 KMS 키 하에서 암호화한 후, 이미지 계층 메타데이터 및 이미지 매니페스트와 함께 저장할 암호화된 데이터 키를 보냅니다.
-
이미지를 가져올 때 복호화 요청이 AWS KMS로 이루어지며 암호화된 데이터 키를 지정합니다.
-
AWS KMS는 암호화된 데이터 키를 복호화하고, 복호화된 데이터 키를 Amazon S3로 보냅니다.
-
데이터 키는 이미지 레이어를 가져오기 전에 이미지 레이어를 복호화하는 데 사용됩니다.
-
리포지토리가 삭제되면 Amazon ECR은 AWS KMS로 두 건의 RetireGrant 요청을 하여 해당 리포지토리에 대해 생성된 부여를 사용 중지합니다.
고려 사항
Amazon ECR에서 AWS KMS 암호화를 사용할 때는 다음 사항을 고려해야 합니다.
-
KMS 암호화를 사용하여 Amazon ECR 리포지토리를 생성하고 KMS 키를 지정하지 않는 경우, Amazon ECR은 별칭
aws/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 권한
AWS KMS를 사용하여 서버 측 암호화로 Amazon ECR 리포지토리를 생성하거나 삭제하는 경우, 필요한 사용 권한은 사용 중인 특정 KMS 키에 따라 다릅니다.
Amazon ECR에 AWS 관리형 키를 사용 시 필요한 IAM 권한
기본적으로 AWS KMS 암호화가 Amazon ECR 리포지토리에 대해 활성화되었지만 KMS 키가 지정되지 않은 경우AWS 관리형 키가 사용됩니다. Amazon ECR에 AWS-관리형 KMS 키가 리포지토리를 암호화하는 데 사용되는 경우, 리포지토리 생성 권한이 있는 모든 보안 주체는 리포지토리의 AWS KMS 암호화를 활성화할 수 있습니다. 그러나 리포지토리를 삭제하는 IAM 보안 주체는 kms:RetireGrant
권한이 있어야 합니다. 이렇게 하면 리포지토리가 생성되었을 때 AWS KMS 키에 추가된 부여 권한의 사용 중지가 될 수 있습니다.
다음의 예제 IAM 정책은 암호화가 활성화된 리포지토리를 삭제하는 데 필요한 최소 권한을 갖도록 사용자에게 인라인 정책으로 추가될 수 있습니다. 리포지토리를 암호화하는 데 사용되는 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 키의 키 정책에서 모든 계정의 루트 사용자에 대한 AWS KMS 작업을 허용해야 합니다. 키 정책에 범위가 지정된 권한을 추가할 수 있지만 최소한 루트 사용자에게 KMS 키를 관리할 수 있는 권한이 부여되어야 합니다. Amazon ECR에서 발생한 요청에 대해서만 KMS 키를 사용할 수 있도록 하려면 kms:ViaService 조건 키를 ecr.
값과 함께 사용할 수 있습니다.<region>
.amazonaws.com
다음 예제 키 정책은 KMS 키를 소유한 AWS계정(루트 사용자)에 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 ECR 권한 외에 kms:CreateGrant
, kms:RetireGrant
및 kms:DescribeKey
권한이 있어야 합니다.
이 kms:RetireGrant
권한은 리포지토리를 생성하는 사용자 또는 역할의 IAM 정책에 추가되어야 합니다. 이 kms:CreateGrant
및 kms:DescribeKey
권한은 KMS 키의 키 정책이나 리포지토리를 생성하는 사용자 또는 역할의 IAM 정책에 추가할 수 있습니다. 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": "*" } }
AWS KMS를 통한 Amazon ECR 상호 작용 모니터링
AWS CloudTrail를 사용하여 Amazon ECR에서 사용자 대신 AWS KMS에 전송하는 요청을 추적할 수 있습니다. CloudTrail 로그의 로그 항목에는 보다 쉽게 식별할 수 있도록 하는 암호화 컨텍스트 키가 포함되어 있습니다.
Amazon ECR 암호화 컨텍스트
암호화 컨텍스트는 보안되지 않은 임의의 데이터를 포함하는 키-값 페어 세트입니다. 데이터 암호화 요청에 암호화 컨텍스트를 포함하는 경우, AWS KMS는 암호화된 데이터에 암호화 컨텍스트를 암호 방식으로 바인딩합니다. 따라서 동일한 암호화 컨텍스트로 전달해야 이 데이터를 해독할 수 있습니다.
AWS KMS에 대한 GenerateDataKey 및 복호화 요청에서 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
" }
암호화 컨텍스트를 사용하여 AWS CloudTrail 및 Amazon CloudWatch Logs와 같은 감사 레코드와 로그에서 그리고 정책 및 권한 부여의 조건으로서 이러한 암호화 작업을 식별할 수 있습니다.
Amazon ECR 암호화 컨텍스트는 두 개의 이름-값 페어로 구성됩니다.
-
aws:s3:arn— 첫 번째 이름-값 페어는 버킷을 식별합니다. 키는
aws:s3:arn
입니다. 이 값은 Amazon S3 버킷의 Amazon 리소스 이름(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" -
aws: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
출력에는 리포지토리의 Amazon 리소스 이름(ARN)과
EncryptionContextSubset
가 포함됩니다. 이는 키에 추가된 부여 권한 중 사용을 중지시키려는 권한을 결정하는 데 사용할 수 있습니다. 이GrantId
값은 다음 단계에서 부여 권한를 중지할 때 사용됩니다. -
리포지토리에 추가된 AWS KMS 키에 대한 각 부여 권한의 사용을 중지시킵니다.
GrantId
의 값을 이전 단계 출력에서의 부여 권한의 ID로 바꿉니다.aws kms retire-grant \ --key-id
b8d9ae76-080c-4043-9237-c815bfc21dfc
\ --grant-idGrantId
\ --regionus-west-2