CloudTrail에 대한 Amazon SNS 주제 정책 - AWS CloudTrail

CloudTrail에 대한 Amazon SNS 주제 정책

SNS 주제에 알림을 전송하려면 CloudTrail에 필요한 권한이 있어야 합니다. CloudTrail 콘솔에서 추적을 생성 또는 업데이트하는 과정에서 Amazon SNS 주제를 생성할 때 CloudTrail은 필요한 권한을 주제에 자동으로 연결합니다.

중요

보안 모범 사례로, SNS 주제에 대한 액세스를 제한하려면 SNS 알림을 전송하는 추적을 생성하거나 업데이트한 후 SNS 주제에 연결된 IAM 정책을 수동으로 편집하여 조건 키를 추가하는 것이 좋습니다. 자세한 내용은 이번 주제에서 전반부 SNS 주제 정책에 대한 보안 모범 사례 단원을 참조하십시오.

CloudTrail은 다음 필드를 사용하여 다음 문을 정책에 추가합니다.

  • 허용된 SID

  • CloudTrail에 대한 서비스 보안 주체 이름

  • 리전, 계정 ID 및 주제 이름을 포함한 SNS 주제

다음 정책은 CloudTrail이 지원되는 리전의 로그 파일 전달에 대한 알림을 전송할 수 있도록 허용합니다. 자세한 내용은 CloudTrail 지원 리전 단원을 참조하세요. 이 정책은 추적을 생성하거나 업데이트하고 SNS 알림을 사용하도록 선택할 때 신규 또는 기존 SNS 주제 정책에 연결되는 기본 정책입니다.

SNS 주제 정책

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:region:SNSTopicOwnerAccountId:SNSTopicName" } ] }

AWS KMS로 암호화된 Amazon SNS 주제를 사용하여 알림을 전송하려면 AWS KMS key 정책에 다음 문을 추가하여 이벤트 소스(CloudTrail)와 암호화된 주제 사이의 호환성도 사용 설정해야 합니다.

KMS 키 정책

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*" } ] }

자세한 내용은 AWS 서비스의 이벤트 소스와 암호화된 주제 간 호환성 활성화를 참조하십시오.

SNS 주제 정책에 대한 보안 모범 사례

기본적으로 CloudTrail이 Amazon SNS 주제에 연결하는 IAM 정책 문은 CloudTrail 서비스 보안 주체가 ARN으로 식별되는 SNS 주제에 게시할 수 있도록 허용합니다. 공격자가 SNS 주제에 대한 액세스 권한을 얻고 CloudTrail을 대신하여 주제 수신자에게 알림을 전송하는 것을 방지하려면 CloudTrail SNS 주제 정책을 수동으로 편집하여 CloudTrail에서 연결한 정책 문에 aws:SourceArn 조건 키를 하나 추가합니다. 이 키의 값은 항상 SNS 주제를 사용하는 추적의 ARN(또는 추적 ARN의 배열)입니다. 특정 추적 ID와 추적을 소유한 계정의 ID를 모두 포함하고 있기 때문에 SNS 주제 액세스를 추적 관리 권한이 있는 해당 계정으로만 제한합니다. SNS 주제 정책에 조건 키를 추가하기 전에 먼저, CloudTrail 콘솔의 추적 설정에서 SNS 주제 이름을 가져옵니다.

aws:SourceAccount 조건 키도 지원되지만 권장되지는 않습니다.

SNS 주제 정책에 aws:SourceArn 조건 키를 추가하려면
  1. https://console.aws.amazon.com/sns/v3/home에서 Amazon SNS 콘솔을 엽니다.

  2. 탐색 창에서 주제를 선택합니다.

  3. 추적 설정에 표시된 SNS 주제를 선택한 다음, [편집(Edit)]을 선택합니다.

  4. 액세스 정책(Access policy)를 확장합니다.

  5. [액세스 정책(Access policy)] JSON 편집기에서 다음 예와 유사한 블록을 찾습니다.

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496" }
  6. 다음 예와 같이 aws:SourceArn 조건에 대한 새 블록을 추가합니다. aws:SourceArn 값은 SNS에 알림을 전송할 추적의 ARN입니다.

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:us-west-2:123456789012:trail/Trail3" } } }
  7. SNS 주제 정책 편집을 마쳤으면 [변경 사항 저장(Save changes)]을 선택합니다.

SNS 주제 정책에 aws:SourceAccount 조건 키를 추가하려면
  1. https://console.aws.amazon.com/sns/v3/home에서 Amazon SNS 콘솔을 엽니다.

  2. 탐색 창에서 주제를 선택합니다.

  3. 추적 설정에 표시된 SNS 주제를 선택한 다음, [편집(Edit)]을 선택합니다.

  4. 액세스 정책(Access policy)를 확장합니다.

  5. [액세스 정책(Access policy)] JSON 편집기에서 다음 예와 유사한 블록을 찾습니다.

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496" }
  6. 다음 예와 같이 aws:SourceAccount 조건에 대한 새 블록을 추가합니다. aws:SourceAccount 값은 CloudTrail 추적을 소유한 계정의 ID입니다. 이 예에서는 SNS 주제에 대한 액세스를 AWS 계정 123456789012에 로그인할 수 있는 해당 사용자로만 제한합니다.

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } }
  7. SNS 주제 정책 편집을 마쳤으면 [변경 사항 저장(Save changes)]을 선택합니다.

알림 전송을 위한 기존 주제 지정

Amazon SNS 콘솔에서 주제 정책에 Amazon SNS 주제에 대한 권한을 수동으로 추가한 다음, CloudTrail 콘솔에서 주제를 지정할 수 있습니다.

SNS 주제 정책을 수동으로 업데이트하려면
  1. https://console.aws.amazon.com/sns/v3/home에서 Amazon SNS 콘솔을 엽니다.

  2. [Topics]를 선택한 다음 주제를 선택합니다.

  3. 편집을 선택한 다음, 액세스 정책까지 아래로 스크롤합니다.

  4. 리전, 계정 ID, 주제 이름에 대한 적절한 값을 사용하여 SNS topic policy에서 명령문을 추가합니다.

  5. 주제가 암호화된 주제일 경우 CloudTrail에 kms:GenerateDataKey*kms:Decrypt 권한을 허용해야 합니다. 자세한 내용은 Encrypted SNS topic KMS key policy 단원을 참조하십시오.

  6. 변경 사항 저장(Save changes)을 선택합니다.

  7. CloudTrail 콘솔로 돌아가서 추적에 대한 주제를 지정합니다.

SNS 주제 정책 문제 해결

다음 단원에서는 SNS 주제 정책 문제를 해결하는 방법을 설명합니다.

CloudTrail이 리전에 대한 알림을 전송하지 않음

추적을 생성 또는 업데이트하는 과정에서 새 주제를 생성할 때 CloudTrail은 필요한 권한을 해당 주제에 연결합니다. 주제 정책은 서비스 보안 주체 이름 "cloudtrail.amazonaws.com"을 사용합니다. 이는 CloudTrail이 모든 리전의 알림을 전송하도록 허용합니다.

CloudTrail이 리전의 알림을 전송하지 않으면 각 리전의 CloudTrail 계정 ID를 지정하는 이전 정책이 주제에 연결되어 있는 것일 수 있습니다. 이 정책은 지정된 리전의 알림만 전송하는 권한을 CloudTrail에 부여합니다.

다음 주제 정책은 지정된 9개 리전에 대해서만 CloudTrail이 알림을 전송할 수 있도록 허용합니다.

예 계정 ID가 포함된 주제 정책의 예
{ "Version": "2012-10-17", "Statement": [{ "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::903692715234:root", "arn:aws:iam::035351147821:root", "arn:aws:iam::859597730677:root", "arn:aws:iam::814480443879:root", "arn:aws:iam::216624486486:root", "arn:aws:iam::086441151436:root", "arn:aws:iam::388731089494:root", "arn:aws:iam::284668455005:root", "arn:aws:iam::113285607260:root" ]}, "Action": "SNS:Publish", "Resource": "aws:arn:sns:us-east-1:123456789012:myTopic" }] }

이 정책은 개별 CloudTrail 계정 ID를 기반으로 권한을 사용합니다. 새 리전의 로그를 전송하려면 해당 리전에 대한 CloudTrail 계정 ID를 포함하도록 정책을 수동으로 업데이트해야 합니다. 예를 들어 CloudTrail에는 미국 동부(오하이오) 리전에 대한 지원이 추가되었으므로 해당 리전에 대한 계정 ID ARN인 "arn:aws:iam::475085895292:root"를 추가하도록 정책을 업데이트해야 합니다.

CloudTrail 서비스 보안 주체와 함께 권한을 사용하도록 정책을 업데이트하는 것이 가장 좋습니다. 이 작업을 수행하려면 계정 ID ARN을 서비스 보안 주체 이름 "cloudtrail.amazonaws.com"으로 변경해야 합니다.

이렇게 하면 현재 리전 및 새 리전의 알림을 전송할 수 있는 권한이 CloudTrail에 부여됩니다. 다음은 이전 정책의 업데이트된 버전입니다.

예 서비스 보안 주체 이름이 포함된 주제 정책의 예
{ "Version": "2012-10-17", "Statement": [{ "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:123456789012:myTopic" }] }

다음과 같이 정책에 올바른 값이 있는지 검증합니다.

  • Resource 필드에서 주제 소유자의 계정 번호를 지정합니다. 사용자가 생성한 주제인 경우 사용자의 계정 번호를 지정합니다.

  • 리전 및 SNS 주제 이름에 대해 적절한 값을 지정합니다.

CloudTrail이 조직의 멤버 계정에 대한 알림을 전송하지 않음

AWS Organizations 조직 추적이 있는 멤버 계정이 Amazon SNS 알림을 전송하지 않는 경우 SNS 주제 정책의 구성에 문제가 있을 수 있습니다. CloudTrail은 리소스 검증에 실패하더라도(예를 들어 조직 추적의 SNS 주제에 모든 멤버 계정 ID가 포함되지 않음) 멤버 계정에 조직 추적을 생성합니다. SNS 주제 정책이 올바르지 않으면 권한 부여 실패가 발생합니다.

추적의 SNS 주제 정책에 권한 부여 실패가 있는지 확인하려면 다음을 수행합니다.

  • CloudTrail 콘솔에서 추적의 세부 정보 페이지를 확인합니다. 권한 부여에 실패하면 세부 정보 페이지는 SNS authorization failed 경고를 포함하고 SNS 주제 정책을 수정함을 나타냅니다.

  • AWS CLI에서 get-trail-status 명령을 실행합니다. 권한 부여에 실패하면 명령 출력은 값이 AuthorizationErrorLastNotificationError 필드를 포함합니다.

추가 리소스

SNS 주제 설정 및 구독에 대한 자세한 내용은 Amazon Simple Notification Service 개발자 가이드를 참조하세요.