CloudTrail에 대한 AWS KMS 키 정책 구성 - AWS CloudTrail

CloudTrail에 대한 AWS KMS 키 정책 구성

다음 세 가지 방법으로 AWS KMS key를 생성할 수 있습니다.

  • CloudTrail 콘솔

  • AWS Management 콘솔

  • AWS CLI

참고

CloudTrail 콘솔에서 KMS 키를 생성하면 CloudTrail이 필요한 KMS 키 정책을 자동으로 추가합니다. 수동으로 정책 구문을 추가할 필요가 없습니다. CloudTrail 콘솔에서 생성된 기본 KMS 키 정책 섹션을 참조하세요.

AWS Management 또는 AWS CLI에서 KMS 키를 생성하는 경우 CloudTrail에서 해당 키를 사용할 수 있도록 키에 정책 섹션을 추가해야 합니다. 정책은 CloudTrail이 키를 사용하여 로그 파일 및 이벤트 데이터 스토어를 암호화하고 지정한 사용자가 암호화되지 않은 형태로 로그 파일을 읽을 수 있도록 허용해야 합니다.

다음 리소스를 참조하십시오.

  • AWS CLI를 사용하여 KMS 키를 생성하려면 create-key 단원을 참조하세요.

  • CloudTrail에 대한 KMS 키 정책을 편집하려면 AWS Key Management Service 개발자 가이드키 정책 편집 단원을 참조하세요.

  • CloudTrail이 AWS KMS를 사용하는 방식에 대한 기술적인 세부 정보는 AWS Key Management Service 개발자 가이드AWS CloudTrail이 AWS KMS를 사용하는 방식 단원을 참조하세요.

CloudTrail에서 사용하기 위해 필요한 KMS 키 정책 단원

AWS Management 콘솔 또는 AWS CLI를 사용하여 KMS 키를 생성한 경우에는 CloudTrail과 연동하도록 KMS 키 정책에 최소한 다음과 같은 문을 추가해야 합니다.

추적에 필요한 KMS 키 정책 요소

  1. CloudTrail 로그 암호화 권한을 사용 설정합니다. 암호화 권한 부여 단원을 참조하세요.

  2. CloudTrail 로그 복호화 권한을 사용 설정합니다. 암호 해독 권한 부여 단원을 참조하세요. S3 버킷 키와 함께 기존 S3 버킷을 사용하는 경우 SSE-KMS 암호화가 사용 설정된 추적을 생성하거나 업데이트하려면 kms:Decrypt 권한이 필요합니다.

  3. KMS 키 속성을 설명하도록 CloudTrail을 사용 설정합니다. KMS 키 속성을 설명하도록 CloudTrail 사용 설정 단원을 참조하세요.

보안 모범 사례로 aws:SourceArn 조건 키를 KMS 키 정책에 추가합니다. IAM 전역 조건 키 aws:SourceArn는 CloudTrail이 특정 추적(들)에 대해서만 KMS 키를 사용하도록 합니다. aws:SourceArn의 값은 항상 KMS 키를 사용하는 추적 ARN(또는 추적 ARN의 배열)입니다. 기존 추적에 대한 KMS 키 정책에 aws:SourceArn 조건 키를 추가해야 합니다.

aws:SourceAccount 조건 키도 지원되지만 권장되지는 않습니다. aws:SourceAccount의 값은 추적 소유자의 계정 ID이거나 조직 추적의 경우 관리 계정 ID입니다.

중요

KMS 키 정책에 새 단원을 추가할 때 정책의 기존 단원을 변경하지 마세요.

추적에서 암호화가 활성화되고 KMS 키가 비활성화되거나 KMS 키 정책이 CloudTrail에 대해 올바르게 구성되지 않은 경우 CloudTrail은 로그를 전달할 수 없습니다.

이벤트 데이터 스토어에 필요한 KMS 키 정책 요소

  1. CloudTrail 로그 암호화 권한을 사용 설정합니다. 암호화 권한 부여 단원을 참조하세요.

  2. CloudTrail 로그 복호화 권한을 사용 설정합니다. 암호 해독 권한 부여 섹션을 참조하세요.

  3. KMS 키를 사용하여 이벤트 데이터 스토어 데이터를 암호화 및 복호화할 수 있는 권한을 사용자 및 역할에 부여합니다.

    이벤트 데이터 스토어를 생성하고 KMS 키로 암호화하거나 KMS 키로 암호화하는 이벤트 데이터 스토어에서 쿼리를 실행하는 경우 KMS 키에 대한 쓰기 권한이 있어야 합니다. KMS 키 정책은 CloudTrail에 액세스할 수 있어야 하며, 이벤트 데이터 스토어에서 작업(예: 쿼리)을 실행하는 사용자가 KMS 키를 관리할 수 있어야 합니다.

  4. KMS 키 속성을 설명하도록 CloudTrail을 사용 설정합니다. KMS 키 속성을 설명하도록 CloudTrail 사용 설정 섹션을 참조하세요.

aws:SourceArnaws:SourceAccount 조건 키는 이벤트 데이터 스토어의 KMS 키 정책에서 지원되지 않습니다.

중요

KMS 키 정책에 새 단원을 추가할 때 정책의 기존 단원을 변경하지 마세요.

이벤트 데이터 스토어에서 암호화가 활성화되고 KMS 키가 비활성화 또는 삭제되거나 KMS 키 정책이 CloudTrail에 대해 올바르게 구성되지 않은 경우 CloudTrail은 이벤트 데이터 스토어에 이벤트를 전달할 수 없습니다.

암호화 권한 부여

예 CloudTrail이 특정 계정을 대신하여 로그를 암호화하도록 허용

CloudTrail은 KMS 키를 통해 특정 계정을 대신하여 로그를 암호화하려면 명시적 권한이 필요합니다. 계정을 지정하려면 다음 필수 명령문을 KMS 키 정책에 추가하고 myBucketName, account-id, region, 및 trailName을 구성에 적절한 값으로 바꿉니다. EncryptionContext 단원에 추가 계정 ID를 추가하면 해당 계정이 CloudTrail을 사용하여 KMS 키를 통해 로그 파일을 암호화할 수 있습니다.

보안 모범 사례로 aws:SourceArn 조건 키를 추적의 KMS 키 정책에 추가합니다. IAM 전역 조건 키 aws:SourceArn는 CloudTrail이 특정 추적(들)에 대해서만 KMS 키를 사용하도록 합니다.

{ "Sid": "Allow CloudTrail to encrypt logs", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:GenerateDataKey*", "Resource": "arn:aws:kms:Region:account_ID:key/key_ID", "Condition": { "StringLike": { "kms:EncryptionContext:aws:cloudtrail:arn": [ "arn:aws:cloudtrail:*:account-id:trail/*" ] }, "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:region:account-id:trail/trailName" } } }

CloudTrail Lake 이벤트 데이터 스토어 로그를 암호화하는 데 사용되는 KMS 키의 정책은 조건 키 aws:SourceArn 또는 aws:SourceAccount를 사용할 수 없습니다. 다음은 이벤트 데이터 스토어 KMS 키 정책의 예입니다.

{ "Sid": "Allow CloudTrail to encrypt event data store", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:GenerateDataKey", "Resource": "arn:aws:kms:Region:account_ID:key/key_ID" }

다음 정책 문 예에서는 다른 계정이 KMS 키를 사용하여 CloudTrail 로그를 암호화하는 방법을 보여 줍니다.

시나리오
  • KMS 키는 계정 111111111111에 있습니다.

  • 귀하 및 계정 222222222222 모두 로그를 암호화합니다.

정책에서 키를 사용하여 암호화할 하나 이상의 계정을 CloudTrail EncryptionContext에 추가합니다. 이렇게 하면 CloudTrail이 키를 사용하여 지정된 해당 계정에 대한 로그만 암호화하도록 제한됩니다. 계정 222222222222 권한의 루트에 로그를 암호화하는 권한을 부여하면 해당 계정의 관리자는 IAM 사용자 정책을 변경하여 필요에 따라 계정 222222222222의 다른 사용자에게 암호화 권한을 할당하도록 위임합니다.

보안 모범 사례로 aws:SourceArn 조건 키를 KMS 키 정책에 추가합니다. IAM 전역 조건 키 aws:SourceArn는 CloudTrail이 특정 추적(들)에 대해서만 KMS 키를 사용하도록 합니다.

KMS 키 정책 문:

{ "Sid": "Enable CloudTrail Encrypt Permissions", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:GenerateDataKey*", "Resource": "arn:aws:kms:Region:account_ID:key/key_ID", "Condition": { "StringLike": { "kms:EncryptionContext:aws:cloudtrail:arn": [ "arn:aws:cloudtrail:*:111111111111:trail/*", "arn:aws:cloudtrail:*:222222222222:trail/*" ] }, "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:region:account-id:trail/trailName" } } }

CloudTrail에서 사용할 KMS 키 정책의 편집에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 키 정책 편집을 참조하세요.

암호 해독 권한 부여

KMS 키를 CloudTrail 구성에 추가하기 전에 복호화 권한이 필요한 모든 사용자에게 해당 권한을 부여하는 것이 중요합니다. 암호화 권한이 있지만 복호화 권한이 없는 사용자는 암호화된 로그를 읽을 수 없습니다. S3 버킷 키와 함께 기존 S3 버킷을 사용하는 경우 SSE-KMS 암호화가 사용 설정된 추적을 생성하거나 업데이트하려면 kms:Decrypt 권한이 필요합니다.

CloudTrail 로그 복호화 권한 사용 설정

키 사용자에게는 CloudTrail이 암호화한 로그 파일을 읽을 수 있는 명시적 권한이 부여되어야 합니다. 사용자가 암호화된 로그를 읽을 수 있도록 하려면 다음 필수 문을 KMS 키 정책에 추가하고, Principal 단원을 수정함으로써 KMS 키를 사용해 복호화할 수 있는 모든 보안 주체(역할 또는 사용자)에 대한 코드 줄을 추가합니다.

{ "Sid": "Enable CloudTrail log decrypt permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:user/username" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }

다음은 CloudTrail 서비스 주체가 추적 로그를 복호화하도록 허용하는 데 필요한 정책의 예입니다.

{ "Sid": "Allow CloudTrail to decrypt a trail", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:Decrypt" "Resource": "*" }

CloudTrail Lake 이벤트 데이터 스토어에 사용되는 KMS 키의 복호화 정책은 다음과 비슷합니다. Principal의 값으로 지정된 사용자 또는 역할 ARN에는 이벤트 데이터 스토어를 생성 또는 업데이트하거나, 쿼리를 실행하거나, 쿼리 결과를 가져오기 위한 복호화 권한이 필요합니다.

{ "Sid": "Enable user key permissions for event data stores" "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:user/username" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }

다음은 CloudTrail 서비스 주체가 이벤트 데이터 스토어 로그를 복호화하도록 허용하는 데 필요한 정책의 예입니다.

{ "Sid": "Allow CloudTrail to decrypt an event data store", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:Decrypt" "Resource": "*" }

계정의 사용자가 KMS 키를 사용하여 추적 로그를 복호화하도록 허용

이 정책 구문은 계정의 IAM 사용자 또는 역할이 키를 사용하여 계정의 S3 버킷에서 암호화된 로그를 읽을 수 있도록 허용하는 방법을 보여 줍니다.

예 시나리오
  • KMS 키, S3 버킷 및 IAM 사용자 Bob은 계정 111111111111에 있습니다.

  • IAM 사용자 Bob에게 S3 버킷의 CloudTrail 로그를 복호화할 수 있는 권한을 부여합니다.

키 정책에서 IAM 사용자 Bob의 CloudTrail 로그 암호 복호화 권한을 사용 설정합니다.

KMS 키 정책 문:

{ "Sid": "Enable CloudTrail log decrypt permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:user/Bob" }, "Action": "kms:Decrypt", "Resource": "arn:aws:kms:Region:account_ID:key/key_ID", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }

주제

    다른 계정의 사용자가 KMS 키를 사용하여 추적 로그를 복호화하도록 허용

    다른 계정의 사용자가 KMS 키를 사용하여 추적 로그를 복호화하지만 이벤트 데이터 스토어 로그는 복호화하지 않도록 허용할 수 있습니다. 키 정책에 필요한 변경 사항은 S3 버킷이 귀하의 계정에 있는지 아니면 다른 계정에 있는지에 따라 달라집니다.

    다른 계정에 있는 버킷의 사용자가 로그의 암호를 해독하도록 허용

    이 정책 구문은 다른 계정의 IAM 사용자 또는 역할이 귀하의 키를 사용하여 다른 계정의 S3 버킷에서 암호화된 로그를 읽을 수 있도록 허용하는 방법을 보여 줍니다.

    시나리오
    • KMS 키는 계정 111111111111에 있습니다.

    • IAM 사용자 Alice와 S3 버킷은 계정 222222222222에 있습니다.

    이 경우 계정 222222222222에서 로그를 복호화할 수 있는 권한을 CloudTrail에 부여하고, 계정 111111111111에 있는 키 keyA를 사용할 수 있는 정책 권한을 Alice의 IAM 사용자에게 부여합니다.

    KMS 키 정책 문:

    { "Sid": "Enable encrypted CloudTrail log read access", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::222222222222:root" ] }, "Action": "kms:Decrypt", "Resource": "arn:aws:kms:Region:account_ID:key/key_ID", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }

    Alice의 IAM 사용자 정책 구문:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-west-2:111111111111:key/KeyA" } ] }

    다른 계정의 사용자가 버킷에서 추적 로그를 복호화하도록 허용

    이 정책은 다른 계정이 귀하의 키를 사용하여 S3 버킷에서 암호화된 로그를 읽는 방법을 보여 줍니다.

    예 시나리오
    • KMS 키 및 S3 버킷은 계정 111111111111에 있습니다.

    • 버킷에서 로그를 읽는 사용자는 계정 222222222222에 있습니다.

    이 시나리오를 활성화하려면 계정의 IAM 역할 CloudTrailReadRole에 대해 암호 해독 권한을 활성화한 다음 해당 역할을 수임할 수 있는 권한을 다른 계정에 부여하십시오.

    KMS 키 정책 문:

    { "Sid": "Enable encrypted CloudTrail log read access", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::11111111111:role/CloudTrailReadRole" ] }, "Action": "kms:Decrypt", "Resource": "arn:aws:kms:Region:account_ID:key/key_ID", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }

    CloudTrailReadRole 신뢰 개체 정책 구문:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:root" }, "Action": "sts:AssumeRole" } ] }

    CloudTrail에서 사용할 KMS 키 정책 편집에 대한 내용은 AWS Key Management Service 개발자 안내서키 정책 편집을 참조하세요.

    KMS 키 속성을 설명하도록 CloudTrail 사용 설정

    CloudTrail에는 KMS 키 속성을 설명할 수 있는 기능이 필요합니다. 이 기능을 사용하려면 KMS 키 정책에 다음 필수 문을 있는 그대로 추가합니다. 이 문은 지정한 다른 권한을 넘어서는 어떠한 권한도 CloudTrail에 부여하지 않습니다.

    보안 모범 사례로 aws:SourceArn 조건 키를 KMS 키 정책에 추가합니다. IAM 전역 조건 키 aws:SourceArn는 CloudTrail이 특정 추적(들)에 대해서만 KMS 키를 사용하도록 합니다.

    { "Sid": "Allow CloudTrail access", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:DescribeKey", "Resource": "arn:aws:kms:Region:account_ID:key/key_ID", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:region:account-id:trail/trailName" } } }

    KMS 키 정책 편집에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드키 정책 편집 단원을 참조하세요.