CloudWatch 조사의 보안 - Amazon CloudWatch

CloudWatch 조사의 보안

이 섹션에는 CloudWatch 조사를 AWS 보안 및 권한 기능과 통합하는 방법에 대한 주제가 포함되어 있습니다.

사용자 권한

AWS는 CloudWatch 조사를 수행할 사용자가 사용할 수 있는 관리형 IAM 정책 3가지를 작성했습니다.

  • AIOpsConsoleAdminPolicy - 계정에서 CloudWatch 조사를 설정하고, CloudWatch 조사 작업에 액세스하고, 신뢰할 수 있는 자격 증명 전파를 관리하고, IAM Identity Center 및 조직 액세스와의 통합을 관리할 수 있는 권한을 관리자에게 부여합니다.

  • AIOpsOperatorAccess - 사용자에게 조사 시작을 비롯하여, 조사 작업에 대한 액세스 권한을 부여합니다. 또한 조사 이벤트에 액세스하는 데 필요한 추가 권한을 부여합니다.

  • AIOpsReadOnlyAccess - CloudWatch 조사 및 기타 관련 서비스에 대한 읽기 전용 권한을 부여합니다.

IAM 보안 주체 3가지를 사용하는 것이 좋습니다. 첫 번째에 AIOpsConsoleAdminPolicy IAM 정책을 부여하고, 두 번째에 AIOpsOperatorAccess 정책을 부여하고, 세 번째에 AIOpsReadOnlyAccess 정책을 부여하는 것이 좋습니다. 이러한 보안 주체는 IAM 역할(권장) 또는 IAM 사용자일 수 있습니다. 그런 다음, CloudWatch 조사를 수행하는 사용자는 이러한 보안 주체 중 하나로 로그인합니다.

CloudWatch 조사가 조사 중에 액세스할 수 있는 데이터를 제어하는 방법

CloudWatch 조사 기능을 활성화할 때 CloudWatch 조사가 조사 중에 리소스에 액세스하는 데 필요한 권한을 지정합니다. 이렇게 하려면 어시스턴트에 IAM 역할을 할당합니다.

CloudWatch 조사가 리소스에 액세스하고 제안 및 가설을 만들 수 있도록 하려면 AIOpsAssistantPolicy를 어시스턴트의 역할에 연결하는 것이 좋습니다. 이렇게 하면 어시스턴트가 조사 도중 AWS 리소스를 분석할 수 있는 권한이 부여됩니다. 이 정책의 내용에 대해 알아보려면 CloudWatch 조사용 IAM 정책(AIOpsAssistantPolicy) 섹션을 참조하세요.

AIOpsAssistantPolicy를 연결하는 것 외에도, 일반 AWS ReadOnlyAccess를 어시스턴트의 역할에 연결하도록 선택할 수도 있습니다. 이렇게 해야 하는 이유는 AWS는 릴리스된 새 AWS 서비스 및 작업에 대한 권한으로 ReadOnlyAccess를 더 자주 업데이트하기 때문입니다. AIOpsAssistantPolicy도 새 작업에 대해 업데이트되지만, 자주 업데이트되지는 않습니다.

CloudWatch 조사에 부여된 권한 범위를 축소하려는 경우 AIOpsAssistantPolicy 정책을 연결하는 대신, 어시스턴트의 IAM 역할에 사용자 지정 IAM 정책을 연결할 수 있습니다. 이렇게 하려면 AIOpsAssistantPolicy의 콘텐츠로 사용자 지정 정책을 시작한 다음, CloudWatch 조사에 부여하지 않을 권한을 제거합니다. 이렇게 하면 어시스턴트는 사용자가 액세스 권한을 부여하지 않는 AWS 서비스 또는 작업을 기준으로 제안을 할 수 없습니다.

참고

조사 운영자는 CloudWatch 조사가 액세스할 수 있는 모든 항목을 조사에 추가하고 이를 확인할 수 있습니다. CloudWatch 조사 권한은 조사 그룹 운영자가 보유한 권한과 맞추는 것이 좋습니다.

CloudWatch 조사가 조사 중에 암호화된 데이터를 해독하도록 허용

AWS KMS의 고객 관리형 키를 사용하여 아래의 서비스에서 데이터를 암호화하고, CloudWatch 조사가 이러한 서비스에서 데이터를 해독하여 조사에 포함할 수 있도록 하려면 어시스턴트의 IAM 역할에 하나 이상의 추가 IAM 정책을 연결해야 합니다.

  • AWS Step Functions

정책 명령문에는 권한 범위를 축소하는 데 도움이 되는 암호화 컨텍스트용 컨텍스트 키가 포함되어야 합니다. 예를 들어 아래의 정책은 CloudWatch 조사가 Step Functions 상태 시스템의 데이터를 해독할 수 있도록 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AIOPSKMSAccessForStepFunctions", "Effect": "Allow", "Principal": { "Service": "aiops.amazonaws.com" }, "Action": [ "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "states.*.amazonaws.com", "kms:EncryptionContext:aws:states:stateMachineArn": "arn:aws:states:region:accountId:stateMachine:*" } } } ] }

이러한 유형의 정책과 이러한 컨텍스트 키 사용에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 kms:ViaServicekms:EncryptionContext:context-key와 IAM 사용자 가이드의 aws:SourceArn을 참조하세요.

조사 데이터의 암호화

조사 데이터의 암호화를 위해 AWS는 2가지 옵션을 제공합니다.

  • AWS 소유 키 - 기본적으로 CloudWatch 조사는 AWS 소유 키로 저장된 조사 데이터를 암호화합니다. AWS 소유 키는 보거나 관리할 수 없으며, 다른 용도로 사용하거나 사용을 감사할 수 없습니다. 하지만 이러한 키를 사용하기 위해 작업을 수행하거나 설정을 변경할 필요는 없습니다. AWS 소유 키에 대한 자세한 내용은 AWS 소유 키를 참조하세요.

  • 고객 관리형 키 – 사용자가 생성하고 관리하는 키입니다. AWS 소유 키 대신 고객 관리형 키를 조사 데이터에 사용하도록 선택할 수 있습니다. 고객 관리형 키에 대한 자세한 내용은 고객 관리형 키를 참조하세요.

참고

CloudWatch 조사는 AWS 소유 키를 무료로 사용하여 저장 시 암호화를 자동으로 활성화합니다. 고객 관리형 키를 사용하는 경우 AWS KMS 요금이 부과됩니다. 요금에 대한 자세한 내용은 AWS Key Management Service 요금을 참조하세요.

AWS KMS에 대한 자세한 정보는 AWS Key Management Service 섹션을 참조하세요.

조사 그룹에 고객 관리형 키 사용

조사 그룹을 고객 관리형 키와 연결하면 해당 그룹에서 생성된 모든 조사는 고객 관리형 키를 사용하여 저장 중인 조사 데이터를 암호화합니다.

CloudWatch 조사 고객 관리형 키를 사용하기 위한 조건은 다음과 같습니다.

  • CloudWatch 조사는 기본 키 사양이 SYMMETRIC_DEFAULT이고, 정의된 용도가 ENCRYPT_DECRYPT인 대칭 암호화 AWS KMS 키만 지원합니다.

  • 사용자가 고객 관리형 키를 사용하여 조사 그룹을 생성하거나 업데이트하려면 해당 사용자에게 kms:DescribeKey, kms:GenerateDataKey, kms:Decrypt 권한이 있어야 합니다.

  • 사용자가 고객 관리형 키를 사용하는 조사 그룹에서 조사를 생성하거나 업데이트하려면 해당 사용자에게 kms:GenerateDataKeykms:Decrypt 권한이 있어야 합니다.

  • 사용자가 고객 관리형 키를 사용하는 조사 그룹에서 조사 데이터를 보려면 해당 사용자에게 kms:Decrypt 권한이 있어야 합니다.

AWS 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:111122223333:key/6f815f63-e628-448c-8251-e4EXAMPLE", "AWSAccountId": "111122223333", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }

키에 대한 권한 설정

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

가장 좋은 방법은 KMS 키 사용을 지정된 AWS 계정 또는 리소스로만 제한하는 것입니다.

권한을 설정하는 첫 번째 단계는 키의 기본 정책을 policy.json으로 저장하는 것입니다. 이렇게 하려면 다음 명령을 사용합니다. key-id를 키의 ID로 바꿉니다.

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

텍스트 편집기에서 policy.json 파일을 열고 다음과 같은 정책 섹션을 해당 정책에 추가합니다. 기존 문과 새 섹션을 쉼표로 구분합니다. 이러한 새 섹션은 Condition 섹션을 사용하여 AWS KMS 키의 보안을 강화합니다. 자세한 내용은 AWS KMS 키 및 암호화 컨텍스트를 참조하세요.

이 정책은 다음과 같은 이유에 따라 서비스 보안 주체에 대한 권한을 제공합니다.

  • aiops 서비스에는 데이터 키를 가져오고 해당 데이터 키를 사용하여 저장되어 있는 데이터를 암호화할 수 있는 GenerateDataKey 권한이 필요합니다. 데이터 스토어에서 읽는 동안 데이터를 해독하려면 Decrypt 권한이 필요합니다. 해독은 aiops API를 사용하여 데이터를 읽거나 조사 또는 조사 이벤트를 업데이트할 때 발생합니다. 업데이트 작업은 기존 데이터를 해독한 후 가져오고, 데이터를 업데이트하며, 업데이트된 데이터를 암호화한 후 데이터 스토어에 저장합니다.

  • CloudWatch 경보 서비스는 조사 또는 조사 이벤트를 생성할 수 있습니다. 이러한 생성 작업은 호출자가 조사 그룹에 정의된 AWS KMS 키에 액세스할 수 있는지 확인합니다. 정책 명령문은 사용자를 대신하여 조사를 생성할 수 있는 GenerateDataKeyDecrypt 권한을 CloudWatch 경보 서비스에 부여합니다.

참고

아래의 정책은 사용자가 3가지 IAM 보안 주체를 사용하고 첫 번째에 AIOpsConsoleAdminPolicy IAM 정책을 부여하고, 두 번째에 AIOpsOperatorAccess 정책을 부여하고, 세 번째에 AIOpsReadOnlyAccess 정책을 부여하는 권장 사항을 따르는 것으로 가정합니다. 이러한 보안 주체는 IAM 역할(권장) 또는 IAM 사용자일 수 있습니다. 그런 다음, CloudWatch 조사를 수행하는 사용자는 이러한 보안 주체 중 하나로 로그인합니다.

다음 정책의 경우 이러한 3가지 보안 주체의 ARN이 필요합니다.

{ "Sid": "Enable AI Operations Admin for the DescribeKey permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{account-id}:role/{AIOpsConsoleAdmin}" }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "aiops.{region}.amazonaws.com" } } }, { "Sid": "Enable AI Operations Admin and Operator for the Decrypt and GenerateDataKey permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::{account-id}:role/{AIOpsConsoleAdmin}", "arn:aws:iam::{account-id}:role/{AIOpsOperator}" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "aiops.{region}.amazonaws.com" }, "ArnLike": { "kms:EncryptionContext:aws:aiops:investigation-group-arn": "arn:aws:aiops:{region}:{account-id}:investigation-group/*" } } }, { "Sid": "Enable AI Operations ReadOnly for the Decrypt permission", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{account-id}:role/{AIOpsReadOnly}" }, "Action": [ "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "aiops.{region}.amazonaws.com" }, "ArnLike": { "kms:EncryptionContext:aws:aiops:investigation-group-arn": "arn:aws:aiops:{region}:{account-id}:investigation-group/*" } } }, { "Sid": "Enable the AI Operations service to have the DescribeKey permission", "Effect": "Allow", "Principal": { "Service": "aiops.amazonaws.com" }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "{account-id}" }, "StringLike": { "aws:SourceArn": "arn:aws:aiops:{region}:{account-id}:investigation-group/*" } } }, { "Sid": "Enable the AI Operations service to have the Decrypt and GenerateDataKey permissions", "Effect": "Allow", "Principal": { "Service": "aiops.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "{account-id}" }, "StringLike": { "aws:SourceArn": "arn:aws:aiops:{region}:{account-id}:investigation-group/*" }, "ArnLike": { "kms:EncryptionContext:aws:aiops:investigation-group-arn": "arn:aws:aiops:{region}:{account-id}:investigation-group/*" } } }, { "Sid": "Enable CloudWatch to have the Decrypt and GenerateDataKey permissions", "Effect": "Allow", "Principal": { "Service": "aiops.alarms.cloudwatch.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:aiops:investigation-group-arn": "arn:aws:aiops:{region}:{account-id}:investigation-group/*" }, "StringEquals": { "aws:SourceAccount": "{account-id}", "kms:ViaService": "aiops.{region}.amazonaws.com" }, "StringLike": { "aws:SourceArn": "arn:aws:cloudwatch:{region}:{account-id}:alarm:*" } } }

정책을 업데이트한 후 아래의 명령을 입력하여 정책을 키에 할당합니다.

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

키를 조사 그룹에 연결

CloudWatch 콘솔을 사용하여 조사 그룹을 생성할 경우 AWS KMS 키를 조사 그룹에 연결하도록 선택할 수 있습니다. 자세한 내용은 운영 조사 설정 섹션을 참조하세요.

고객 관리형 키를 기존 조사 그룹에 연결할 수도 있습니다.

암호화 구성 변경

조사 그룹을 업데이트하여 고객 관리형 키를 사용할지 또는 서비스 소유 키 사용할지 변경할 수 있습니다. 고객 관리형 키 대신 다른 키를 사용하는 것으로 변경할 수도 있습니다. 이러한 변경을 수행하면 변경 이후에 생성된 새 조사에 변경 사항이 적용됩니다. 이전 조사는 이전 암호화 구성과 계속 연결된 상태입니다. 현재 진행 중인 조사는 새 데이터에 원래 키를 계속 사용합니다.

이전에 사용된 키가 활성화되어 있고 Amazon Q가 조사를 위해 해당 키에 대한 액세스 권한을 갖고 있는 한, 해당 방법으로 암호화된 이전 조사를 검색할 수 있으며 이전 키로 암호화된 현재 조사의 데이터도 검색할 수 있습니다. 이전에 사용한 키를 삭제하거나 해당 키에 대한 액세스 권한을 취소하면 해당 키로 암호화된 조사 데이터를 검색할 수 없습니다.

교차 리전 추론

CloudWatch 조사는 교차 리전 추론을 사용하여 트래픽을 여러 AWS 리전에 분산합니다. 데이터는 기본 리전에만 저장되어 있지만 교차 리전 추론을 사용하는 경우 조사 데이터가 기본 리전 외부로 이동할 수 있습니다. 모든 데이터는 Amazon의 보안 네트워크를 통해 암호화되어 전송됩니다. 자세한 내용은 CloudWatch 조사 사용 설명서의 교차 리전 추론을 참조하세요.

각 리전의 교차 리전 추론 배포가 발생하는 위치에 대한 자세한 내용은 다음 표를 참조하세요.

지원되는 CloudWatch 조사 지역 조사 리전 가능한 추론 리전
미국(US) 미국 동부(버지니아 북부) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건)
미국 동부(오하이오) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건)
미국 서부(오리건) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건)
유럽(EU) 유럽(프랑크푸르트) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건), 유럽(프랑크푸르트), 유럽(아일랜드), 유럽(파리), 유럽(스톡홀름)
유럽(아일랜드) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건), 유럽(프랑크푸르트), 유럽(아일랜드), 유럽(파리), 유럽(스톡홀름)
유럽(스페인) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건), 유럽(프랑크푸르트), 유럽(아일랜드), 유럽(파리), 유럽(스톡홀름)
유럽(스톡홀름) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건), 유럽(프랑크푸르트), 유럽(아일랜드), 유럽(파리), 유럽(스톡홀름)
아시아-태평양(AP) 아시아 태평양(홍콩) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건)
아시아 태평양(뭄바이) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건)
아시아 태평양(싱가포르) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건)
아시아 태평양(시드니) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건)
아시아 태평양(도쿄) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건)
아시아 태평양(말레이시아) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건)
아시아 태평양(태국) 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건)