기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS Key Management Service를 사용하여 CloudWatch Logs에서 로그 데이터 암호화
로그 그룹 데이터는 항상 CloudWatch Logs에서 암호화됩니다. 기본적으로 CloudWatch Logs는 256비트 AES-GCM(Advanced Encryption Standard Galois/Counter Mode) 서버 측 암호화를 사용하여 저장 로그 데이터를 암호화합니다. 대신 AWS Key Management Service를 사용하여 이를 암호화할 수 있습니다. 이렇게 하면 AWS KMS 키를 사용하여 암호화가 수행됩니다. 로그 그룹을 생성할 때나 로그 그룹이 존재하는 경우에는 KMS 키를 로그 그룹에 연결하면 로그 그룹 수준에서 AWS KMS를 사용한 암호화가 활성화됩니다.
중요
CloudWatch Logs에서는 이제 kms:EncryptionContext:aws:logs:arn
을 키로 사용하고 로그 그룹의 ARN을 해당 키의 값으로 사용하여 암호화 컨텍스트를 지원합니다. KMS 키로 이미 암호화된 로그 그룹이 있고 단일 계정 및 로그 그룹에서 키를 사용하도록 제한하려면 IAM 정책에 조건을 포함하는 새 KMS 키를 할당해야 합니다. 자세한 내용은 AWS KMS 키 및 암호화 컨텍스트 단원을 참조하십시오.
KMS 키를 로그 그룹에 연결하고 나면 로그 데이터에서 새로 수집된 모든 데이터를 이 키를 사용해 암호화할 수 있습니다. 이 데이터는 보존되는 동안 암호화된 형식으로 저장됩니다. CloudWatch Logs는 요청이 있을 때마다 이 데이터를 암호화 해제합니다. CloudWatch Logs에는 암호화된 데이터 요청이 발생할 때마다 KMS 키에 대한 권한이 있어야 합니다.
로그 그룹에서 KMS 키가 연결 해제되는 경우 CloudWatch Logs에서는 CloudWatch Logs의 기본 암호화 방법을 사용하여 새로 수집된 데이터를 암호화합니다. KMS 키로 암호화된 이전에 수집된 모든 데이터는 KMS 키로 암호화된 상태가 유지됩니다. CloudWatch Logs는 계속해서 키를 참조할 수 있으므로 CloudWatch Logs는 KMS 키의 연결이 끊어진 후에도 여전히 해당 데이터를 반환할 수 있습니다. 하지만 나중에 키를 비활성화하면 CloudWatch Logs는 해당 키로 암호화된 로그를 읽을 수 없습니다.
중요
CloudWatch Logs는 대칭 KMS 키만 지원합니다. 비대칭 키를 사용하여 로그 그룹의 데이터를 암호화하지 마세요. 자세한 내용은 대칭 및 비대칭 키 사용을 참조하세요.
Limits
-
다음 단계를 수행하려면
kms:CreateKey
,kms:GetKeyPolicy
및kms:PutKeyPolicy
권한이 있어야 합니다. -
로그 그룹에서 키를 연결하거나 연결 해제하고 난 후 이러한 변경이 적용되기까지 최대 5분의 시간이 소요될 수 있습니다.
-
연결된 키에 대한 CloudWatch Logs 액세스 권한을 취소하거나 연결된 KMS 키를 삭제한 경우에는 CloudWatch Logs에서 암호화된 데이터를 더 이상 검색할 수 없습니다.
-
CloudWatch 콘솔을 사용하여 KMS 키를 로그 그룹에 연결할 수 없습니다.
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 Logs 서비스에 제공합니다. 서비스 보안 주체는 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 키 및 암호화 컨텍스트
KMS 키와 암호화된 로그 그룹의 보안을 강화하기 위해 AWS Key Management Service에서는 이제 로그 그룹 ARN을 로그 데이터를 암호화하는 데 사용되는 암호화 컨텍스트의 일부로 배치합니다. 암호화 컨텍스트는 추가 인증 데이터로 사용되는 키-값 쌍의 집합입니다. 암호화 컨텍스트를 사용하면 IAM 정책 조건을 사용하여 AWS 계정 및 로그 그룹별로 AWS KMS 키에 대한 액세스를 제한할 수 있습니다. 자세한 내용은 암호화 컨텍스트 및 IAM JSON 정책 요소: 조건을 참조하세요.
암호화된 각 로그 그룹에 대해 서로 다른 KMS 키를 사용하는 것이 좋습니다.
이전에 암호화한 로그 그룹이 있고 해당 로그 그룹에만 작동하는 새 KMS 키를 사용하도록 로그 그룹을 변경하려는 경우 다음 단계를 수행합니다.
KMS 키를 해당 로그 그룹으로 제한하는 정책에 따라 사용하도록 암호화된 로그 그룹 변환
다음 명령을 입력하여 로그 그룹의 현재 키의 ARN을 찾습니다.
aws logs describe-log-groups
출력에는 다음 줄이 포함됩니다. ARN을 기록해 둡니다. 7단계에서 사용해야 합니다.
... "kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/01234567-89ab-cdef-0123-456789abcdef" ...
다음 명령을 입력하여 새 KMS 키 생성:
aws kms create-key
다음 명령을 입력하여 새 키의 정책을
policy.json
파일에 저장합니다.aws kms get-key-policy --key-id
new-key-id
--policy-name default --output text > ./policy.json텍스트 편집기를 사용하여
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
" } } } ] }다음 명령을 입력하여 업데이트된 정책을 새 KMS 키에 추가:
aws kms put-key-policy --key-id
new-key-ARN
--policy-name default --policy file://policy.json다음 명령을 입력하여 정책을 로그 그룹과 연결합니다.
aws logs associate-kms-key --log-group-name
my-log-group
--kms-key-idnew-key-ARN
CloudWatch Logs는 이제 새 키를 사용하여 모든 새 데이터를 암호화합니다.
그런 다음 이전 키에서
Decrypt
를 제외한 모든 권한을 취소합니다. 먼저 다음 명령을 입력하여 이전 정책을 검색합니다.aws kms get-key-policy --key-id
old-key-ARN
--policy-name default --output text > ./policy.json텍스트 편집기를 사용하여
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": "*" } ] }다음 명령을 입력하여 업데이트된 정책을 이전 키에 추가합니다.
aws kms put-key-policy --key-id
old-key-ARN
--policy-name default --policy file://policy.json