CloudWatch 경보 트리거에 대해 SNS 알림을 받지 못한 이유는 무엇인가요?

3분 분량
0

경보 상태가 변경될 때 Amazon Simple Notification Service(SNS) 주제를 통해 알림을 전송하도록 Amazon CloudWatch 경보를 생성했습니다. 하지만 CloudWatch 경보의 상태가 변경될 때 SNS 알림이 오지 않습니다.

해결 방법

SNS 알림 전송은 SNS 주제 및 CloudWatch 경보의 구성에 따라 다릅니다. SNS 알림을 받지 못하는 이유를 알아보려면 CloudWatch 경보의 기록에서 트리거 작업의 상태를 확인합니다.

SNS 액세스 정책 제한으로 인해 트리거 작업이 실패하면 CloudWatch 경보 기록에 다음과 유사한 메시지가 표시됩니다.

"Failed to execute action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME. Received error: "Resource: arn:aws:cloudwatch:us-east-1:ACCOUNT_ID:alarm:ALARM_NAME is not authorized to perform: SNS:Publish on resource: arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME"(arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME 작업을 실행하지 못했습니다. 수신한 오류: "arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME 리소스에 대해 SNS:Publish 작업을 수행할 권한이 arn:aws:cloudwatch:us-east-1:ACCOUNT_ID:alarm:ALARM_NAME 리소스에 없습니다.")"

SNS는 액세스 정책을 사용하여 주제에 메시지를 게시할 수 있는 소스를 제한합니다. 권한 오류가 발생하면 SNS 액세스 정책의 Statement 섹션에 다음 권한을 추가해야 합니다. 이 업데이트는 SNS 주제에 메시지를 게시할 수 있는 권한을 CloudWatch 경보 서비스에 부여합니다.

참고: us-east-1을 이 알림을 적용할 AWS 리전으로 바꿉니다. ACCOUNT_ID를 사용자 계정 ID로 바꿉니다. TOPIC_NAME을 SNS 주제 이름으로 바꿉니다.

{
  "Sid": "Allow_Publish_Alarms",
  "Effect": "Allow",
  "Principal": {
    "Service": [
      "cloudwatch.amazonaws.com"
    ]
  },
  "Action": "sns:Publish",
  "Resource": "arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME"
}

이러한 권한을 통해 계정을 사용하는 모든 사용자가 경보를 생성하고 SNS 주제에 메시지를 게시할 수 있습니다. 전역 조건 키를 추가하여 주제에 메시지를 게시하는 기능을 특정 경보로 제한합니다. 다음 예제에서는 ArnLike 조건 연산자 및 aws:SourceArn 전역 조건 키를 사용합니다. 자세한 내용은 Example cases for Amazon SNS access control(Amazon SNS 액세스 제어 사례 예제)를 참조하세요.

참고: 참고: us-east-1을 이 알림을 적용할 AWS 리전으로 바꿉니다. ACCOUNT_ID를 사용자 계정 ID로 바꿉니다. TOPIC_NAME을 SNS 주제 이름으로 바꿉니다. ALARM_NAME을 경보 이름으로 바꿉니다.

{
  "Sid": "Allow_Publish_Alarms",
  "Effect": "Allow",
  "Principal": {
    "Service": [
      "cloudwatch.amazonaws.com"
    ]
  },
  "Action": "sns:Publish",
  "Resource": "arn:aws:sns:REGION:ACCOUNT_ID:TOPIC_NAME",
  "Condition": {
    "ArnLike": {
      "aws:SourceArn": "arn:aws:cloudwatch:us-east-1:ACCOUNT_ID:alarm:ALARM_NAME"
    }
  }
}

SNS 주제 암호화로 인해 트리거 작업이 실패하면 CloudWatch 경보 기록에 다음과 유사한 메시지가 표시됩니다.

"Failed to execute action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME. Received error: "null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException;)"("arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME 작업을 실행하지 못했습니다. 수신한 오류: "null(서비스: AWSKMS, 상태 코드: 400, 오류 코드: AccessDeniedException;))"

SNS는 해당 주제에 대해 저장 중 암호화를 허용합니다. SNS가 이 암호화에 기본 AWS Key Management Service(AWS KMS) 키 alias/aws/sns를 사용하는 경우 CloudWatch 경보는 SNS 주제에 메시지를 게시할 수 없습니다. SNS용 기본 AWS KMS 키의 정책은 CloudWatch 경보가 kms:Decryptkms:GenerateDataKey API 호출을 수행하도록 허용하지 않습니다. 이 키는 AWS 관리형이므로 정책을 수동으로 편집할 수 없습니다.

SNS 주제를 유휴 상태에서 암호화해야 하는 경우 고객 관리형 키를 사용합니다. 고객 관리형 키의 경우, 키 정책의 Statement 섹션에 다음과 같은 권한을 포함해야 합니다. 이러한 권한은 암호화된 SNS 주제에 메시지를 게시하도록 CloudWatch 경보를 허용합니다.

{
  "Sid": "Allow_CloudWatch_for_CMK",
  "Effect": "Allow",
  "Principal": {
    "Service": [
      "cloudwatch.amazonaws.com"
    ]
  },
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*"
}

트리거 작업이 성공하면 CloudWatch 경보 기록에 다음 메시지와 유사한 메시지가 표시됩니다.

"Successfully executed action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME(arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME 작업을 실행했습니다.)"

이는 CloudWatch 경보가 SNS 주제에 메시지를 성공적으로 게시했음을 의미합니다. SNS에서 알림을 전송하지 않은 경우 SNS 주제 및 해당 지표에서 전송 실패가 있는지 확인합니다. 자세한 내용은 푸시 알림에 대한 Amazon SNS 주제 전송 로그에 액세스하려면 어떻게 해야 하나요?를 참조하세요.

참고: CloudWatch는 지정한 작업을 테스트하거나 검증하지 않습니다. 또한, 존재하지 않는 작업을 호출하려는 시도로 인해 발생하는 Amazon EC2 Auto Scaling 또는 Amazon SNS 오류를 감지하지 못합니다. 작업이 존재하는지 확인합니다.


관련 정보

Amazon CloudWatch 경보 사용

AWS KMS를 사용하여 Amazon SNS에 게시된 메시지 암호화

AWS 공식
AWS 공식업데이트됨 일 년 전