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)로 서버 측 암호화를 사용하여 암호화됩니다. 하지만 KMS 키(SSE-KMS)를 사용하는 서버 측 암호화를 선택할 수도 있습니다. AWS KMS를 사용하여 CloudTrail 로그 파일을 암호화하는 방법을 알아보려면 AWS CloudTrail 사용 설명서AWS KMS keys(SSE-KMS)로 CloudTrail 로그 파일 암호화를 참조하세요.

중요

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

CloudTrail이 SSE-KMS 키로 암호화된 로그 파일을 읽거나 쓸 때 키 사용 요금을 지불하지 않습니다. 그러나 SSE-KMS 키로 암호화된 CloudTrail 로그 파일에 액세스할 때 키 사용 요금을 지불합니다. AWS KMS 요금에 대한 자세한 내용은 AWS Key Management Service 요금을 참조하세요. CloudTrail 요금에 대한 자세한 내용은 AWS CloudTrail 사용 설명서의 .AWS CloudTrail 요금비용 관리를 참조하십시오.

KMS 키가 사용되는 경우 이해

AWS KMS를 사용하여 CloudTrail 로그 파일을 암호화하는 것은 AWS KMS key(SSE-KMS)를 사용한 서버 측 암호화라는 Amazon S3 기능을 기반으로 합니다. SSE-KMS에 대해 자세히 알아보려면 이 설명서의 Amazon Simple Storage Service(Amazon S3)에서 AWS KMS 사용 방법 또는 Amazon Simple Storage Service 사용 설명서KMS 키(SSE-KMS)로 서버 측 암호화를 사용하여 데이터 보호를 참조하세요.

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

AWS KMS key을 사용하여 로그 파일을 암호화하도록 CloudTrail 구성

KMS 키를 사용하도록 CloudTrail 구성을 업데이트하면 CloudTrail은 GenerateDataKey 요청을 AWS KMS에 전송하여 KMS 키가 존재하고, CloudTrail에 암호화에 사용할 권한이 있는지 확인합니다. CloudTrail은 결과 데이터 키를 사용하지 않습니다.

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

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

참고

다음 예제 로그 항목에서 일부 설명선을 보려면 오른쪽으로 스크롤해야 할 수 있습니다.

{ "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/ExampleAliasForCloudTrailKMS key", "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에서 데이터 키의 사본 두 개(하나는 일반 텍스트, 다른 하나는 지정된 KMS 키로 암호화됨)를 보냅니다. Amazon S3는 일반 텍스트 데이터 키를 사용해 CloudTrail 로그 파일을 암호화하고, 사용 후 가급적 빨리 메모리에서 일반 텍스트 데이터 키를 제거합니다. Amazon S3는 암호화된 데이터 키를 암호화된 CloudTrail 로그 파일과 함께 메타데이터로 저장합니다.

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

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

참고

다음 예제 로그 항목에서 일부 설명선을 보려면 오른쪽으로 스크롤해야 할 수 있습니다.

{ "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는 로그 파일의 암호화된 데이터 키를 복호화하기 위해 사용자를 대신하여 Decrypt 요청을 AWS KMS로 보냅니다. 이 요청에 대한 응답으로 AWS KMS는 KMS 키를 사용하여 데이터 키를 복호화한 다음 일반 텍스트 데이터 키를 Amazon S3로 보냅니다. Amazon S3는 일반 텍스트 데이터 키를 사용해 CloudTrail 로그 파일을 복호화하고, 사용 후 가급적 빨리 메모리에서 일반 텍스트 데이터 키를 제거합니다.

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

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

참고

다음 예제 로그 항목에서 일부 설명선을 보려면 오른쪽으로 스크롤해야 할 수 있습니다.

{ "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" }