암호화 컨텍스트
참고
비대칭 KMS 키 또는 HMAC KMS 키를 사용하여 암호화 작업에서 암호화 컨텍스트를 지정할 수 없습니다. 비대칭 알고리즘 및 MAC 알고리즘은 암호화 컨텍스트를 지원하지 않습니다.
대칭 암호화 KMS 키를 사용하는 모든 AWS KMS 암호화 작업은 데이터에 대한 추가 컨텍스트 정보를 포함할 수 있는 비밀이 아닌 키–값 페어의 선택적 세트인 암호화 컨텍스트를 허용합니다. AWS KMS의 Encrypt 작업에 암호화 컨텍스트를 삽입하여 AWS KMS API 복호화 직접 호출의 권한 부여 및 감사 가능성을 향상시킬 수 있습니다. AWS KMS는 암호화 컨텍스트를 추가 인증 데이터(AAD)로 사용하여 인증된 암호화를 지원합니다. 암호화 컨텍스트는 사이퍼텍스트에 암호적으로 바인딩되므로 데이터를 복호화하는 데 동일한 암호화 컨텍스트가 필요합니다.
암호화 컨텍스트는 암호가 아니며 암호화되지 않습니다. AWS CloudTrail 로그에 일반 텍스트로 표시되므로 암호화 작업을 식별하고 분류하는 데 사용할 수 있습니다. 암호화 컨텍스트에 민감한 정보가 포함되어서는 안 됩니다. 암호화 컨텍스트가 암호화 또는 해독되는 데이터를 설명하는 것이 좋습니다. 예를 들어 파일을 암호화하는 경우, 파일 경로의 일부를 암호화 컨텍스트로 사용할 수 있습니다.
"encryptionContext": { "department": "10103.0" }
예를 들어 Amazon Elastic Block Store(Amazon EBS) CreateSnapshot 작업으로 생성된 볼륨 및 스냅샷을 암호화할 때 Amazon EBS는 볼륨 ID를 암호화 컨텍스트 값으로 사용합니다.
"encryptionContext": { "aws:ebs:id": "vol-abcde12345abc1234" }
또한 암호화 컨텍스트를 사용하여 계정의 AWS KMS keys에 대한 액세스를 구체화하거나 제한할 수 있습니다. 암호화 컨텍스트를 권한 부여의 제약 조건으로 그리고 정책문의 조건으로 사용할 수 있습니다. 암호화 컨텍스트 키와 그 값은 aws를 포함하는 임의의 문자열이 될 수 있습니다. 이 값들은 aws:cloudformation:stack-name 같은 AWS 생성 태그와 대조됩니다. 자세한 내용은 kms:EncryptionContext:context-key 섹션을 참조하세요.
암호화 컨텍스트를 사용하여 암호화된 데이터의 무결성을 보호하는 방법을 알아보려면 AWS 보안 블로그에서 AWS Key Management Service 및 EncryptionContext를 사용하여 암호화된 데이터의 무결성을 보호하는 방법
암호화 컨텍스트 규칙
AWS KMS에서는 암호화 컨텍스트 키 및 값에 대해 다음 규칙을 적용합니다.
-
암호화 컨텍스트 쌍의 키와 값은 단순 리터럴 문자열이어야 합니다. 정수 또는 부동 소수점과 같은 다른 형식을 사용할 경우 AWS KMS는 이를 문자열로 해석합니다.
-
암호화 컨텍스트의 키와 값에는 유니코드 문자가 포함될 수 있습니다. 암호화 컨텍스트에 키 정책 또는 IAM 정책에서 허용되지 않는 문자가 포함된 경우 kms:EncryptionContext:context-key 및 kms:EncryptionContextKeys와 같은 정책 조건 키에 암호화 컨텍스트를 지정할 수 없습니다. 키 정책 문서 규칙에 대한 자세한 내용은 키 정책 형식 섹션을 참조하세요. IAM 정책 문서 규칙에 대한 자세한 내용은 IAM 사용 설명서의 IAM 이름 요구 사항 섹션을 참조하세요.
정책의 암호화 컨텍스트
암호화 컨텍스트는 주로 무결성 및 신뢰성을 확인하는 데 사용됩니다. 그러나 암호화 컨텍스트를 사용하여 키 정책 및 IAM 정책에서 대칭 암호화 AWS KMS keys에 대한 액세스를 제어할 수도 있습니다.
kms:EncryptionContext: 및 kms:EncryptionContextKeys 조건 키는 요청에 특정 암호화 컨텍스트 키 또는 키-값 페어가 포함된 경우에만 권한을 허용(또는 거부)합니다.
예를 들어 다음 키 정책 문은 RoleForExampleApp 역할이 Decrypt 작업에 KMS 키를 사용하도록 허용합니다. 이 정책 문은 kms:EncryptionContext:context-key 조건 키를 사용하여 요청의 암호화 컨텍스트가 AppName:ExampleApp 암호화 컨텍스트 쌍을 포함하는 경우에만 이 권한을 허용합니다.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } } }
이러한 암호화 컨텍스트 키에 대한 자세한 내용은 AWS KMS에서 사용되는 조건 키 섹션을 참조하세요.
권한 부여의 암호화 컨텍스트
권한을 생성할 때 권한 부여 조건을 설정하는 권한 부여 제약 조건을 포함할 수 있습니다. AWS KMS는 두 가지 권한 부여 제약 조건(EncryptionContextEquals 및 EncryptionContextSubset)을 지원하며 둘 다 암호화 작업 요청에 암호화 컨텍스트를 포함합니다. 이러한 권한 부여 제약 조건을 사용할 때 암호화 작업에 대한 요청의 암호화 컨텍스트가 권한 부여 제약 조건의 요구 사항을 충족하는 경우에만 권한이 유효합니다.
예를 들어, GenerateDataKey 작업을 허용하는 권한 부여에 EncryptionContextEquals 권한 부여 제약 조건을 추가할 수 있습니다. 이 제약 조건에서 권한 부여는 요청의 암호화 컨텍스트가 권한 부여 제약 조건의 암호화 컨텍스트와 대소문자 구분이 일치하는 경우에만 작업을 허용합니다.
$aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:user/exampleUser \ --retiring-principal arn:aws:iam::111122223333:role/adminRole \ --operations GenerateDataKey \ --constraints EncryptionContextEquals={Purpose=Test}
피부여자 보안 주체의 다음과 같은 요청은 EncryptionContextEquals 제약 조건을 충족합니다.
aws kms generate-data-key \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --key-spec AES_256 \ --encryption-context Purpose=Test$
권한 부여 제약 조건에 대한 자세한 내용은 권한 부여 제약 사용 섹션을 참조하세요. 권한 부여에 대한 자세한 내용은 AWS KMS의 권한 부여 섹션을 참조하세요.
암호화 컨텍스트 로깅
AWS KMS는 AWS CloudTrail을 이용해 암호화 컨텍스트를 로깅하여, 어떤 KMS 키와 데이터에 액세스했는지 알 수 있도록 합니다. 이 로그 항목은 로그 항목에서 암호화 컨텍스트에서 참조한 특정 데이터를 암호화하거나 해독하기 위해 정확히 어떤 KMS 키가 사용되었는지 보여줍니다.
중요
암호화 컨텍스트가 로깅되기 때문에 민감한 정보가 포함될 수 없습니다.
암호화 컨텍스트 저장
Decrypt 또는 ReEncrypt 작업 호출 시 암호화 컨텍스트 사용을 간소화하기 위해 암호화된 데이터와 함께 암호화 컨텍스트를 저장할 수 있습니다. 암호화 또는 해독을 위해 필요할 때 전체 암호화 컨텍스트를 만드는 데 도움이 되는 암호화 컨텍스트만 저장하는 것이 좋습니다.
예를 들어 암호화 컨텍스트가 파일의 정규화된 경로인 경우 해당 경로의 일부만 암호화된 파일 내용과 함께 저장합니다. 그런 다음 전체 암호화 컨텍스트가 필요할 때 저장된 조각으로부터 다시 구성합니다. 파일 이름을 변경하거나 다른 위치로 이동하는 등 파일을 변조하면 암호화 컨텍스트 값이 변경되고 해독 요청이 실패합니다.