AWS CloudTrail의 AWS KMS 활용 방식 - AWS Key Management Service

AWS CloudTrail의 AWS KMS 활용 방식

AWS CloudTrail를 이용해 AWS API 호출 및 기타 AWS 계정에 대한 활동을 기록하고, 선택한 Amazon Simple Storage Service(Amazon S3) 버킷의 로그 파일에 기록된 정보를 저장할 수 있습니다. 기본적으로 CloudTrail가 S3 버킷에 제공하는 로그 파일은 Amazon S3–관리형 암호화 키(SSE-S3)를 사용하는 서버 측 암호화로 암호화됩니다. 하지만 AWS KMS–관리형 키(SSE-KMS)를 사용하는 서버 측 암호화를 선택할 수도 있습니다. AWS KMS로 CloudTrail 로그 파일을 암호화하는 방법을 알아보려면 AWS CloudTrail User GuideAWS KMS–관리형 키(SSE-KMS)로 CloudTrail 로그 파일 암호화를 참조하십시오.

중요

AWS CloudTrail 및 Amazon S3는 대칭 고객 마스터 키(CMK)만 지원합니다. 비대칭 CMK를 사용하여 CloudTrail 로그를 암호화할 수 없습니다. CMK가 대칭 또는 비대칭인지 여부를 확인하는 방법은 대칭 및 비대칭 CMK 식별 단원을 참조하십시오.

CMK가 사용되는 경우 이해

로 로그 파일을 암호화하는 것은 관리형 키(SSE-KMS)를 이용한 서버 측 암호화라는 기능을 기반으로 합니다. SSE-KMS에 대해 자세히 알아보려면 이 가이드의 Amazon Simple Storage Service(Amazon S3)의 AWS KMS 활용 방식 또는 Amazon Simple Storage Service 개발자 가이드AWS KMS–관리형 키(SSE-KMS)를 사용하는 서버 측 암호화로 데이터 보호를 참조하십시오.

AWS CloudTrail가 SSE-KMS를 이용해 로그 파일을 암호화하도록 구성하면, 사용자가 이러한 서비스를 통해 특정 작업을 수행할 때 CloudTrail와 Amazon S3가 KMS 고객 마스터 키(CMK)를 사용합니다. 다음 섹션에서는 이러한 서비스가 언제 어떻게 CMK를 사용할 수 있는지 설명하고, 이 설명을 재확인할 수 있는 추가 정보를 제공합니다.

CloudTrail이 고객 마스터 키(CMK)로 로그 파일을 암호화하도록 구성

CMK를 사용하도록 CloudTrail 구성을 업데이트하면 CloudTrail가 AWS KMS로 GenerateDataKey 요청을 보내 CMK가 있으며 CloudTrail가 이를 암호화에 사용할 권한이 있음을 확인합니다. CloudTrail의 경우 결과로 얻은 데이터 키를 사용하지 않습니다.

GenerateDataKey 요청에는 암호화 컨텍스트에 대한 다음 정보가 포함됩니다.

GenerateDataKey 요청의 결과, CloudTrail 로그에 다음 예와 비슷한 항목이 생성됩니다. 이와 비슷한 로그 항목을 보면 CloudTrail( )에서 특정 추적( )에 대한 AWS KMS( )GenerateDataKey 작업( )을 호출했음을 확인할 수 있습니다. AWS KMS에서는 특정 CMK( )에서 데이터 키를 생성했습니다.

참고

You might need to scroll to the right to see some of the callouts in the following example log entry.

{ "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::086441151436:user/AWSCloudTrail", "accountId": "086441151436", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "AWSCloudTrail", "sessionContext": {"attributes": { "mfaAuthenticated": "false", "creationDate": "2015-11-11T21:15:33Z" }}, "invokedBy": "internal.amazonaws.com" }, "eventTime": "2015-11-11T21:15:33Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "internal.amazonaws.com", "userAgent": "internal.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-west-2:111122223333:alias/ExampleAliasForCloudTrailCMK", "encryptionContext": { "aws:cloudtrail:arn": "arn:aws:cloudtrail:us-west-2:111122223333:trail/Default", "aws:s3:arn": "arn:aws:s3:::example-bucket-for-CT-logs/AWSLogs/111122223333/" }, "keySpec": "AES_256" }, "responseElements": null, "requestID": "581f1f11-88b9-11e5-9c9c-595a1fb59ac0", "eventID": "3cdb2457-c035-4890-93b6-181832b9e766", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsServiceEvent", "recipientAccountId": "111122223333" }

CloudTrail이 S3 버킷에 로그 파일 저장

CloudTrail가 S3 버킷에 로그 파일을 저장하면 Amazon S3가 CloudTrail 대신 AWS KMS로 GenerateDataKey 요청을 보냅니다. 이 요청에 대한 응답으로 AWS KMS가 고유한 데이터 키를 생성한 후 Amazon S3에 데이터 키 사본 두 개(하나는 일반 텍스트, 하나는 지정된 CMK로 암호화)를 보냅니다. Amazon S3는 일반 텍스트 데이터 키를 사용해 CloudTrail 로그 파일을 암호화하고, 사용 후 가급적 빨리 메모리에서 일반 텍스트 데이터 키를 제거합니다. Amazon S3는 암호화한 데이터 키를 암호화한 CloudTrail 로그 파일과 함께 메타데이터로 저장합니다.

GenerateDataKey 요청에는 암호화 컨텍스트에 대한 다음 정보가 포함됩니다.

GenerateDataKey 요청의 결과, CloudTrail 로그에 다음 예와 비슷한 항목이 생성됩니다. 이와 비슷한 로그 항목을 보면 CloudTrail( )에서 특정 추적( )에 대한 AWS KMS( ) GenerateDataKey 작업( )을 호출하여 특정 로그 파일( )을 보호했음을 확인할 수 있습니다. AWS KMS에서는 동일한 로그 항목에 두 번 표시된 특정 CMK( )에서 데이터 키를 생성했습니다.

참고

You might need to scroll to the right to see some of the callouts in the following example log entry.

{ "eventVersion": "1.02", "userIdentity": { "type": "AssumedRole", "principalId": "AROACKCEVSQ6C2EXAMPLE:i-34755b85", "arn": "arn:aws:sts::086441151436:assumed-role/AWSCloudTrail/i-34755b85", "accountId": "086441151436", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2015-11-11T20:45:25Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::086441151436:role/AWSCloudTrail", "accountId": "086441151436", "userName": "AWSCloudTrail" } }, "invokedBy": "internal.amazonaws.com" }, "eventTime": "2015-11-11T21:15:58Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "internal.amazonaws.com", "userAgent": "internal.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:cloudtrail:arn": "arn:aws:cloudtrail:us-west-2:111122223333:trail/Default", "aws:s3:arn": "arn:aws:s3:::example-bucket-for-CT-logs/AWSLogs/111122223333/CloudTrail/us-west-2/2015/11/11/111122223333_CloudTrail_us-west-2_20151111T2115Z_7JREEBimdK8d2nC9.json.gz" }, "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "keySpec": "AES_256" }, "responseElements": null, "requestID": "66f3f74a-88b9-11e5-b7fb-63d925c72ffe", "eventID": "7738554f-92ab-4e27-83e3-03354b1aa898", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsServiceEvent", "recipientAccountId": "111122223333" }

S3 버킷에서 암호화된 로그 파일 가져오기

S3 버킷에서 암호화된 CloudTrail 로그 파일을 가져올 때마다 Amazon S3가 자동으로 AWS KMS로 Decrypt 요청을 보내 로그 파일의 암호화된 데이터 키를 해독합니다. AWS KMS는 CMK를 이용해 데이터 키를 해독한 후 일반 텍스트 데이터 키를 Amazon S3로 보냅니다. Amazon S3는 일반 텍스트 데이터 키를 사용해 CloudTrail 로그 파일을 해독하고, 사용 후 가급적 빨리 메모리에서 일반 텍스트 데이터 키를 제거합니다.

Decrypt 요청에는 암호화 컨텍스트에 대한 다음 정보가 포함됩니다.

Decrypt 요청의 결과, CloudTrail 로그에 다음 예와 비슷한 항목이 생성됩니다. 이와 비슷한 로그 항목을 보면 AWS 계정( )의 IAM 사용자가 특정 추적( ) 및 특정 로그 파일( )에 대한 AWS KMS( ) Decrypt 작업( )을 호출했음을 확인할 수 있습니다. AWS KMS에서는 특정 CMK( )에서 데이터 키 암호화를 해제했습니다.

참고

You might need to scroll to the right to see some of the callouts in the following example log entry.

{ "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::111122223333:user/cloudtrail-admin", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "cloudtrail-admin", "sessionContext": {"attributes": { "mfaAuthenticated": "false", "creationDate": "2015-11-11T20:48:04Z" }}, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2015-11-11T21:20:52Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "internal.amazonaws.com", "userAgent": "internal.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:cloudtrail:arn": "arn:aws:cloudtrail:us-west-2:111122223333:trail/Default", "aws:s3:arn": "arn:aws:s3:::example-bucket-for-CT-logs/AWSLogs/111122223333/CloudTrail/us-west-2/2015/11/11/111122223333_CloudTrail_us-west-2_20151111T2115Z_7JREEBimdK8d2nC9.json.gz" } }, "responseElements": null, "requestID": "16a0590a-88ba-11e5-b406-436f15c3ac01", "eventID": "9525bee7-5145-42b0-bed5-ab7196a16daa", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }

CMK가 사용되는 빈도 이해

비용 발생을 막고 AWS 청구 내역을 더 잘 이해하려면 CloudTrail가 CMK를 얼마나 자주 사용하는지 알아야 할 수 있습니다. AWS KMS는 프리 티어를 초과하는 모든 API 요청 서비스에 대해 비용을 청구합니다. 정확한 요금 제도는 AWS Key Management Service 요금을 참조하십시오.

관리형 키(SSE-KMS)로 로그 파일을 암호화하면 CloudTrail가 S3 버킷에 로그 파일을 저장할 때마다 AWS KMS API 요청이 이루어집니다. 일반적으로 CloudTrail는 5분마다 한 번씩 S3 버킷에 로그 파일을 저장합니다. 그러면 일일 리전당, 계정당 약 288개의 API 요청이 이루어집니다. 예:

  • 하나의 AWS 계정에서 두 개 리전에 이 기능을 활성화하면 일일 약 576개(2 x 288)의 AWS KMS API 요청을 예상할 수 있습니다.

  • 세 개의 AWS 계정 각각에서 두 개 리전에 이 기능을 활성화하면 일일 약 1,728개(6 x 288)의 AWS KMS API 요청을 예상할 수 있습니다.

이러한 숫자는 PUT 요청에서 발생하는 AWS KMS 호출만을 나타냅니다. S3 버킷에서 암호화된 로그 파일을 가져올 때 GET 요청에서 발생하는 AWS KMS에 대한 암호화 해제 요청은 계산되지 않습니다.