OpenTelemetry 지표에 대한 저장 데이터 암호화
CloudWatch 데이터세트란?
Amazon CloudWatch로 전송하는 OpenTelemetry(OTel) 지표는 데이터세트라는 리소스에 저장됩니다. 모든 AWS 계정에는 모든 OTel 지표가 있는 각 리전에 default 데이터세트가 있습니다. default 데이터세트는 유일하게 지원되는 데이터세트이므로 추가 데이터세트를 생성할 수 없습니다.
데이터세트는 다른 AWS 리소스와 마찬가지로 암호화하고 태그를 지정할 수 있습니다. 데이터세트 ARN의 형식은 다음과 같습니다.
arn:{partition}:cloudwatch:{region}:{account-id}:dataset/default
데이터세트의 현재 암호화 구성을 보려면 GetDataset API를 사용합니다.
aws cloudwatch get-dataset \ --dataset-identifier default
고객 관리형 키가 데이터세트와 연결된 경우 응답에는 키 ARN이 포함됩니다. 고객 관리형 키가 연결되지 않은 경우 데이터세트는 AWS 소유 키로 암호화됩니다.
미사용 중 암호화 옵션
CloudWatch는 항상 데이터세트 저장 데이터를 암호화합니다. 기본적으로 CloudWatch는 AWS 소유 키를 사용하여 모든 저장 데이터를 암호화합니다. AWS 소유 키를 사용하여 데이터를 보호하기 위해 어떤 조치도 취할 필요가 없습니다. 자세한 내용은 AWS Key Management Service 개발자 가이드에서 AWS 소유 키를 참조하세요.
데이터세트 데이터를 암호화하는 데 사용되는 키를 관리하려면 AWS Key Management Service(AWS KMS)에서 고객 관리형 키를 사용하면 됩니다. 자세한 내용은 AWS Key Management Service Developer Guide의 Customer managed keys를 참조하십시오.
고객 관리형 키를 사용하는 경우 AWS KMS 요금이 부과됩니다. 요금에 대한 자세한 내용은 AWS Key Management Service 요금
CloudWatch가 데이터세트 암호화에 고객 관리형 키를 사용하는 방법
중요
고객 관리형 키 암호화는 default 데이터세트에 적용됩니다. default 데이터세트는 유일하게 지원되는 데이터세트이므로 추가 데이터세트를 생성할 수 없습니다.
고객 관리형 키를 default 데이터세트와 연결하면 CloudWatch는 키를 사용하여 해당 데이터세트에 저장된 모든 OTel 지표 데이터를 암호화합니다.
CloudWatch는 키 정책 권한과 함께 서비스 보안 주체(cloudwatch.amazonaws.com)를 직접 사용합니다. CloudWatch는 권한 부여 또는 IAM 역할을 사용하여 AWS KMS 키에 액세스하지 않습니다.
CloudWatch는 데이터 키를 캐싱하지 않습니다. 그러나 CloudWatch는 최대 15분 동안 kms:Decrypt 응답을 캐싱합니다. 키 정책에 대한 변경 사항이 적용되는 데 최대 15분이 걸릴 수 있습니다.
CloudWatch는 모든 AWS KMS 암호화 작업에 다음 암호화 컨텍스트를 사용합니다.
-
키:
aws:cloudwatch:arn -
값:
arn:{partition}:cloudwatch:{region}:{account-id}:dataset/default
데이터세트에 대한 고객 관리형 키 구성
CloudWatch 데이터세트와 함께 사용하는 AWS KMS 키는 다음 요구 사항을 충족해야 합니다.
-
키는 키 사용법이 ENCRYPT_DECRYPT인 대칭 암호화(SYMMETRIC_DEFAULT) 키여야 합니다. 비대칭 키는 지원되지 않습니다.
-
다중 리전 키는 지원되지 않습니다.
-
키는 데이터세트와 동일한 AWS 리전에 있어야 합니다.
-
키를 정규화된 키 ARN으로 지정해야 합니다. 키 별칭 및 키 ID는 지원되지 않습니다.
키 정책 권한 구성
CloudWatch 데이터세트에서 고객 관리형 키를 사용하려면 키 정책에서 CloudWatch에 키를 사용할 수 있는 권한을 부여해야 합니다. 다음 예제 키 정책에서는 CloudWatch에 필요한 권한을 부여하며 혼동된 대리자 보호가 포함되어 있습니다.
데이터세트를 연결하거나 사용하는 호출자는 아래 AllowCallerDecrypt 문과 같이 CloudWatch ViaService 및 암호화 컨텍스트로 범위가 지정된 kms:Decrypt 권한이 있어야 합니다. YourApplicationRole을 CloudWatch 데이터세트 API를 호출하는 데 사용되는 IAM 역할로 바꿉니다.
예 CloudWatch 데이터세트 암호화에 대한 키 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudWatchDatasetDescribeKey", "Effect": "Allow", "Principal": { "Service": "cloudwatch.amazonaws.com" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } }, { "Sid": "AllowCloudWatchDatasetEncryption", "Effect": "Allow", "Principal": { "Service": "cloudwatch.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id", "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:region:account-id:dataset/default" }, "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } }, { "Sid": "AllowCallerDecrypt", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:role/YourApplicationRole" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "cloudwatch.region.amazonaws.com", "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } } ] }
account-id 및 리전을 자체 값으로 바꿉니다.
키 정책에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 AWS KMS에서의 키 정책을 참조하세요.
고객 관리형 키를 데이터세트와 연결
AssociateDatasetKmsKey API를 사용하여 고객 관리형 키를 데이터세트와 연결합니다. default를 데이터세트 식별자로 지정해야 합니다.
AWS CLI를 사용하여 고객 관리형 키를 연결하려면 다음 명령을 실행합니다.
aws cloudwatch associate-dataset-kms-key \ --dataset-name default \ --kms-key-arn arn:aws:kms:region:account-id:key/key-id
암호화 구성 변경 또는 제거
데이터세트 데이터를 암호화하는 고객 관리형 키를 변경하거나 제거할 수 있습니다.
고객 관리형 키 변경
고객 관리형 키를 바꾸려면 AssociateDatasetKmsKey를 새 키 ARN으로 다시 호출합니다. 호출자는 현재 키와 새 키 모두에 대한 kms:Decrypt 권한이 있어야 합니다. CloudWatch는 후속 암호화 작업에 새 키를 사용하기 시작합니다.
참고
현재 연결된 키가 삭제되었거나 삭제 예정이거나 가져오기 보류 중이거나 사용할 수 없거나 비활성화된 경우 CloudWatch에는 현재 키에 대한 kms:Decrypt 권한이 필요하지 않으며 교체가 진행됩니다. 키만 비활성화된 경우 키를 교체하는 대신 다시 활성화하는 방법을 고려합니다. 다시 활성화하면 CloudWatch가 해당 키로 암호화된 기존 지표 데이터의 복호화를 재개할 수 있기 때문입니다.
고객 관리형 키 제거
고객 관리형 키를 제거하고 AWS 소유 키 암호화로 되돌리려면 DisassociateDatasetKmsKey를 호출합니다. 호출자는 현재 연결된 키에 대한 kms:Decrypt 권한이 있어야 합니다.
aws cloudwatch disassociate-dataset-kms-key \ --dataset-name default
참고
현재 연결된 키가 삭제되었거나 삭제 예정이거나 가져오기 보류 중이거나 사용할 수 없거나 비활성화된 경우 CloudWatch에는 해당 키에 대한 kms:Decrypt 권한이 필요하지 않으며 연결이 해제됩니다. 키만 비활성화된 경우 키 연결을 해제하는 대신 다시 활성화하는 방법을 고려합니다. 다시 활성화하면 CloudWatch가 기존 지표 데이터의 복호화를 재개할 수 있기 때문입니다.
중요
고객 관리형 키의 연결을 해제한 후에도 CloudWatch에 이전에 연결된 키에 대한 kms:Decrypt 권한이 여전히 필요한 3시간의 적용 기간이 있습니다. 이 기간 동안에는 키를 비활성화하거나 삭제하지 마세요.
삭제되거나 사용할 수 없는 KMS 키에서 복구
데이터세트와 연결된 고객 관리형 KMS 키가 삭제되거나 삭제 예정이거나 사용할 수 없게 되면 데이터세트가 성능 저하 상태가 됩니다.
-
CloudWatch는 데이터세트에 게시하는 새 지표 데이터를 암호화할 수 없으며, 수집에 실패합니다.
-
CloudWatch는 사용할 수 없는 키로 암호화된 기존 데이터를 복호화할 수 없으므로, 쿼리 작업에 실패합니다.
복구 옵션은 키 상태에 따라 달라집니다.
-
키가 비활성화됨 - AWS KMS에서 키를 다시 활성화합니다. 키가 다시 활성화된 후 CloudWatch가 기존 지표 데이터 복호화를 재개할 수 있으므로 이 경로가 기본 복구 경로입니다.
-
키 삭제 보류 중 - 대기 기간이 만료되기 전에 AWS KMS에서 키 삭제를 취소합니다. 키가 활성화된 상태로 돌아가면 CloudWatch는 정상 작업을 재개합니다.
-
키가 영구적으로 삭제되었거나 복구할 수 없음 - 오래된 연결을 제거하거나 새 키로 교체합니다(아래 참조). 삭제된 키로 암호화된 기존 데이터는 영구적으로 읽을 수 없습니다.
키가 영구적으로 삭제되었거나 복구할 수 없는 경우 이전 키에 액세스할 필요 없이 연결을 제거하거나 새 키로 교체할 수 있습니다.
오래된 키 연결 제거
DisassociateDatasetKmsKey를 직접 호출하여 사용할 수 없는 키와의 연결을 제거합니다. CloudWatch는 새 데이터에 대해 AWS에서 소유한 키 암호화로 되돌립니다. 삭제된 키로 암호화된 기존 데이터는 더 이상 읽을 수 없습니다.
aws cloudwatch disassociate-dataset-kms-key \ --dataset-name default
새 키로 교체
유효한 새 KMS 키 ARN을 사용하여 AssociateDatasetKmsKey을 직접 호출합니다. CloudWatch는 새 키를 검증하고 이를 데이터세트에 연결합니다. 이전에 연결된 키에 대한 액세스 권한은 필요하지 않습니다. 삭제된 키로 암호화된 기존 데이터는 더 이상 읽을 수 없지만, 새 데이터는 새 키로 암호화됩니다.
aws cloudwatch associate-dataset-kms-key \ --dataset-name default \ --kms-key-arn arn:aws:kms:region:account-id:key/new-key-id
사용할 수 없는 키에 대한 오류 응답
DisassociateDatasetKmsKey 또는 AssociateDatasetKmsKey(교체 경로)를 직접 호출할 때 현재 연결된 키에 액세스할 수 없는 경우 CloudWatch에는 해당 키에 대한 액세스 권한이 필요하지 않으며, 작업은 정상적으로 진행됩니다. 이는 다음과 같은 경우에 적용됩니다.
-
키가 삭제되었습니다(KMS에서
NotFoundException을 반환). -
키는
PendingDeletion,PendingImport또는Unavailable상태입니다. -
키가 비활성화되었습니다.
키에 액세스할 수 있지만 직접 호출자에게 kms:Decrypt 권한이 없는 경우 이러한 작업을 직접 호출하면 다음 오류 중 하나가 발생하며 작업에 실패합니다. 각 오류 메시지에는 문제 해결을 위한 KMS 요청 ID가 포함됩니다.
ResourceNotFoundException-
지정된 KMS 키가 없습니다. 메시지 형식:
KMS keykey-arndoes not exist. KMS request id:request-id. ValidationException-
지정된 KMS 키가 사용할 수 없는 상태이며, 이는 이 코드 경로에서 허용되지 않습니다. 메시지 형식:
KMS keykey-arnis in an unusable state:state-description. KMS request id:request-id. AccessDeniedException-
지정된 KMS 키가 비활성화되었거나 직접 호출자에게 권한이 없습니다. 메시지 형식:
KMS keykey-arnis disabled. KMS request id:request-id.
KMS 키 상태에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 Key states of AWS KMS keys를 참조하세요.
키 정책 액세스 범위 축소
키 정책에서 조건을 사용하여 AWS KMS 키에 대한 액세스를 제한할 수 있습니다.
- 암호화 컨텍스트 조건
-
kms:EncryptionContext:aws:cloudwatch:arn조건 키를 사용하여default데이터세트에 대한 키 사용을 제한합니다."Condition": { "StringEquals": { "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } - 혼동된 대리자 보호
-
aws:SourceArn및aws:SourceAccount조건을 사용하여 교차 계정의 혼동된 대리자 공격을 방지합니다."Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } - kms:ViaService 조건
-
kms:ViaService조건 키를 사용하여 키 사용을 CloudWatch에서 오는 요청으로 제한합니다."Condition": { "StringEquals": { "kms:ViaService": "cloudwatch.region.amazonaws.com" } }
AWS KMS와의 CloudWatch 상호 작용 모니터링
AWS CloudTrail을 사용하여 CloudWatch가 사용자 대신 AWS KMS에 전송하는 요청을 추적할 수 있습니다. AWS CloudTrail 로그 항목은 서비스 보안 주체 cloudwatch.amazonaws.com 및 cloudwatch.의 {region}.amazonaws.com.rproxy.goskope.comViaService 값을 사용합니다.
CloudWatch 데이터세트 암호화 작업의 로그 항목에는 다음 CloudTrail 이벤트 이름이 나타납니다.
GenerateDataKeyEncryptDecryptDescribeKeyReEncrypt
각 로그 항목에는 작업이 적용되는 특정 데이터세트를 식별하는 데 사용할 수 있는 암호화 컨텍스트가 포함되어 있습니다.
AWS KMS 키 사용량 모니터링에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 AWS Key Management Service 모니터링을 참조하세요.