저장된 데이터 암호화 - Amazon ECR

저장된 데이터 암호화

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와 통합되어 리포지토리를 암호화 및 해독하는 방식의 높은 수준의 이해를 제공합니다.

  1. 리포지토리를 생성할 때 Amazon ECR은 DescribeKey 호출을 AWS KMS로 전송하여 암호화 구성에 지정된 KMS 키의 Amazon 리소스 이름(ARN)을 확인하고 검색합니다.

  2. Amazon ECR은 두 건의 CreateGrant 요청을 AWS KMS로 전송하여 KMS 키에 대한 권한을 생성하여 Amazon ECR에서 데이터 키를 사용하여 데이터를 암호화하고 해독할 수 있도록 합니다.

  3. 이미지를 푸시할 때 이미지 레이어 및 매니페스트를 암호화하는 데 사용할 KMS 키를 지정하는 GenerateDataKey 요청이 AWS KMS로 이루어집니다.

  4. AWS KMS 는 새 데이터 키를 생성하고 지정된 KMS 키 하에서 암호화한 후, 이미지 계층 메타데이터 및 이미지 매니페스트와 함께 저장할 암호화된 데이터 키를 보냅니다.

  5. 이미지를 가져올 때 복호화 요청이 AWS KMS로 이루어지며 암호화된 데이터 키를 지정합니다.

  6. AWS KMS는 암호화된 데이터 키를 복호화하고, 복호화된 데이터 키를 Amazon S3로 보냅니다.

  7. 데이터 키는 이미지 레이어를 가져오기 전에 이미지 레이어를 복호화하는 데 사용됩니다.

  8. 리포지토리가 삭제되면 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:RetireGrantkms:DescribeKey 권한이 있어야 합니다.

참고

kms:RetireGrant 권한은 리포지토리를 생성하는 사용자 또는 역할의 IAM 정책에 추가되어야 합니다. 이 kms:CreateGrantkms: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 부여 권한을 수동으로 중지시키려면

  1. 리포지토리에 사용된 AWS KMS 키에 대한 부여 권한을 나열합니다. 이 key-id 값은 콘솔에서 받은 오류에 포함됩니다. list-keys 명령을 사용하여 AWS 관리형 키 및 고객 관리형 KMS 키를 계정의 특정 리전에 나열할 수도 있습니다.

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

    출력에는 리포지토리의 Amazon 리소스 이름(ARN)과 EncryptionContextSubset가 포함됩니다. 이는 키에 추가된 부여 권한 중 사용을 중지시키려는 권한을 결정하는 데 사용할 수 있습니다. 이 GrantId 값은 다음 단계에서 부여 권한를 중지할 때 사용됩니다.

  2. 리포지토리에 추가된 AWS KMS 키에 대한 각 부여 권한의 사용을 중지시킵니다. GrantId의 값을 이전 단계 출력에서의 부여 권한의 ID로 바꿉니다.

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