다음을 사용하여 Logs의 로그 데이터를 암호화합니다. CloudWatch AWS Key Management Service - 아마존 CloudWatch 로그

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

다음을 사용하여 Logs의 로그 데이터를 암호화합니다. CloudWatch AWS Key Management Service

로그 그룹 데이터는 CloudWatch 로그에서 항상 암호화됩니다. 기본적으로 Logs는 저장된 CloudWatch 로그 데이터에 대해 서버 측 암호화를 사용합니다. 대신 AWS Key Management Service 를 사용하여 이를 암호화할 수 있습니다. 이렇게 하면 키를 사용하여 암호화가 수행됩니다. AWS KMS KMS 키를 로그 그룹과 연결하면 로그 그룹을 생성할 때 또는 로그 그룹이 생성된 후에 KMS 키를 로그 그룹과 연결하여 암호화를 사용할 AWS KMS 수 있습니다.

중요

CloudWatch 이제 Logs는 키로 사용하고 kms:EncryptionContext:aws:logs:arn 로그 그룹의 ARN을 해당 키의 값으로 사용하는 암호화 컨텍스트를 지원합니다. KMS 키로 이미 암호화된 로그 그룹이 있고 단일 계정 및 로그 그룹에서 키를 사용하도록 제한하려면 IAM 정책에 조건을 포함하는 새 KMS 키를 할당해야 합니다. 자세한 설명은 AWS KMS 키 및 암호화 컨텍스트 섹션을 참조하세요.

KMS 키를 로그 그룹에 연결하고 나면 로그 데이터에서 새로 수집된 모든 데이터를 이 키를 사용해 암호화할 수 있습니다. 이 데이터는 보존 기간 내내 암호화된 형식으로 저장됩니다. CloudWatch 로그는 요청될 때마다 이 데이터를 해독합니다. CloudWatch 암호화된 데이터가 요청될 때마다 로그에 KMS 키에 대한 권한이 있어야 합니다.

나중에 KMS 키를 로그 그룹에서 분리하면 Logs는 CloudWatch Logs 기본 암호화 방법을 사용하여 새로 수집된 데이터를 암호화합니다. CloudWatch KMS 키로 암호화된 이전에 수집된 모든 데이터는 KMS 키로 암호화된 상태로 유지됩니다. CloudWatch 로그는 여전히 키를 참조할 수 있기 때문에 CloudWatch KMS 키의 연결이 끊긴 후에도 여전히 해당 데이터를 반환할 수 있습니다. 하지만 나중에 키를 비활성화하면 CloudWatch Logs는 해당 키로 암호화된 로그를 읽을 수 없습니다.

중요

CloudWatch 로그는 대칭 KMS 키만 지원합니다. 비대칭 키를 사용하여 로그 그룹의 데이터를 암호화하지 마세요. 자세한 내용은 대칭 및 비대칭 키 사용을 참조하세요.

Limits

  • 다음 단계를 수행하려면 kms:CreateKey, kms:GetKeyPolicykms:PutKeyPolicy 권한이 있어야 합니다.

  • 로그 그룹에서 키를 연결하거나 연결 해제하고 난 후 이러한 변경이 적용되기까지 최대 5분의 시간이 소요될 수 있습니다.

  • 관련 키에 대한 CloudWatch 로그 액세스를 취소하거나 연결된 KMS 키를 삭제하면 CloudWatch Logs의 암호화된 데이터를 더 이상 검색할 수 없습니다.

  • 콘솔을 사용하여 KMS 키를 로그 그룹과 연결할 수 없습니다. CloudWatch

1단계: 키 생성 AWS KMS

다음 create-key 명령을 사용하여 KMS 키 생성:

aws kms create-key

이 명령의 출력 화면에는 키의 키 ID와 Amazon 리소스 이름(ARN)이 포함됩니다. 다음은 예 출력입니다.

{ "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "KeyManager": "CUSTOMER", "Enabled": true, "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1478910250.94, "Arn": "arn:aws:kms:us-west-2:123456789012:key/6f815f63-e628-448c-8251-e40cb0d29f59", "AWSAccountId": "123456789012", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }

2단계: KMS 키에 대한 권한 설정

기본적으로 모든 AWS KMS 키는 비공개입니다. 리소스 소유자만 이를 사용하여 데이터를 암호화 및 해독할 수 있습니다. 그러나 리소스 소유자가 원한다면 다른 사용자 및 리소스에 KMS 키에 대한 액세스 권한을 부여할 수 있습니다. 이 단계에서는 CloudWatch 로그 서비스 주체에게 키 사용 권한을 부여합니다. 이 서비스 보안 주체는 KMS 키가 저장된 동일한 AWS 지역에 있어야 합니다.

KMS 키 사용을 지정한 AWS 계정 또는 로그 그룹으로만 제한하는 것이 가장 좋습니다.

먼저 다음 get-key-policy명령을 policy.json 사용하여 KMS 키의 기본 정책을 저장합니다.

aws kms get-key-policy --key-id key-id --policy-name default --output text > ./policy.json

텍스트 편집기에서 policy.json 파일을 열고 다음 설명 중 하나에서 굵은 글꼴로 표시된 섹션을 추가합니다. 기존 설명과 새 설명을 쉼표로 구분합니다. 이러한 명령문은 Condition 섹션을 사용하여 AWS KMS 키의 보안을 강화합니다. 자세한 설명은 AWS KMS 키 및 암호화 컨텍스트 섹션을 참조하세요.

이 예제의 Condition 섹션에서는 키를 단일 로그 그룹 ARN으로 제한합니다.

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:log-group:log-group-name" } } } ] }

이 예제의 Condition 섹션에서는 AWS KMS 키 사용을 지정된 계정으로 제한하지만 모든 로그 그룹에 사용할 수 있습니다.

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:*" } } } ] }

마지막으로 다음 put-key-policy명령을 사용하여 업데이트된 정책을 추가합니다.

aws kms put-key-policy --key-id key-id --policy-name default --policy file://policy.json

3단계: KMS 키를 로그 그룹에 연결

로그 그룹을 생성할 때와 그 이후에 KMS 키를 로그 그룹에 연결할 수 있습니다.

로그 그룹에 이미 연결된 KMS 키가 있는지 확인하려면 다음 describe-log-groups명령을 사용하십시오.

aws logs describe-log-groups --log-group-name-prefix "log-group-name-prefix"

출력에 kmsKeyId 필드가 포함된 경우 로그 그룹은 해당 필드의 값에 대해 표시된 키와 연결됩니다.

생성 시 로그 그룹에 KMS 키를 연결

다음과 같이 create-log-group 명령을 실행합니다.

aws logs create-log-group --log-group-name my-log-group --kms-key-id "key-arn"
기존 로그 그룹에 KMS 키를 연결

다음과 같이 associate-kms-key 명령을 실행합니다.

aws logs associate-kms-key --log-group-name my-log-group --kms-key-id "key-arn"

4단계: 로그 그룹에서 키 연결 해제

로그 그룹과 연결된 KMS 키를 분리하려면 다음 명령을 사용합니다. disassociate-kms-key

aws logs disassociate-kms-key --log-group-name my-log-group

AWS KMS 키 및 암호화 컨텍스트

AWS Key Management Service 키와 암호화된 로그 그룹의 보안을 강화하기 위해 이제 CloudWatch Logs는 로그 그룹 ARN을 로그 데이터를 암호화하는 데 사용되는 암호화 컨텍스트의 일부로 넣습니다. 암호화 컨텍스트는 추가 인증 데이터로 사용되는 키-값 쌍의 집합입니다. 암호화 컨텍스트를 사용하면 IAM 정책 조건을 사용하여 AWS 계정 및 로그 그룹별로 AWS KMS 키에 대한 액세스를 제한할 수 있습니다. 자세한 내용은 암호화 컨텍스트IAM JSON 정책 요소: 조건을 참조하세요.

암호화된 각 로그 그룹에 대해 서로 다른 KMS 키를 사용하는 것이 좋습니다.

이전에 암호화한 로그 그룹이 있고 해당 로그 그룹에만 작동하는 새 KMS 키를 사용하도록 로그 그룹을 변경하려는 경우 다음 단계를 수행합니다.

KMS 키를 해당 로그 그룹으로 제한하는 정책에 따라 사용하도록 암호화된 로그 그룹 변환
  1. 다음 명령을 입력하여 로그 그룹의 현재 키의 ARN을 찾습니다.

    aws logs describe-log-groups

    출력에는 다음 줄이 포함됩니다. ARN을 기록해 둡니다. 7단계에서 사용해야 합니다.

    ... "kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/01234567-89ab-cdef-0123-456789abcdef" ...
  2. 다음 명령을 입력하여 새 KMS 키 생성:

    aws kms create-key
  3. 다음 명령을 입력하여 새 키의 정책을 policy.json 파일에 저장합니다.

    aws kms get-key-policy --key-id new-key-id --policy-name default --output text > ./policy.json
  4. 텍스트 편집기를 사용하여 policy.json을 열고 Condition 표현식을 정책에 추가합니다.

    { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT-ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:REGION:ACCOUNT-ID:log- group:LOG-GROUP-NAME" } } } ] }
  5. 다음 명령을 입력하여 업데이트된 정책을 새 KMS 키에 추가:

    aws kms put-key-policy --key-id new-key-ARN --policy-name default --policy file://policy.json
  6. 다음 명령을 입력하여 정책을 로그 그룹과 연결합니다.

    aws logs associate-kms-key --log-group-name my-log-group --kms-key-id new-key-ARN

    CloudWatch 이제 로그는 새 키를 사용하여 모든 새 데이터를 암호화합니다.

  7. 그런 다음 이전 키에서 Decrypt를 제외한 모든 권한을 취소합니다. 먼저 다음 명령을 입력하여 이전 정책을 검색합니다.

    aws kms get-key-policy --key-id old-key-ARN --policy-name default --output text > ./policy.json
  8. 텍스트 편집기를 사용하여 policy.json을 열고 Action 목록에서 kms:Decrypt*를 제외한 모든 값을 제거합니다.

    { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Decrypt*" ], "Resource": "*" } ] }
  9. 다음 명령을 입력하여 업데이트된 정책을 이전 키에 추가합니다.

    aws kms put-key-policy --key-id old-key-ARN --policy-name default --policy file://policy.json