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

최종 업데이트 날짜: 2021년 3월 12일

경보 상태가 변경될 때 Amazon Simple Notification Service(Amazon SNS) 주제를 통해 알림을 전송하는 Amazon CloudWatch 경보를 생성했습니다. 하지만 CloudWatch 경보의 상태가 변경되어 SNS 알림을 받지 못했습니다. CloudWatch 경보 트리거에 대해 SNS 알림을 받지 못한 이유는 무엇인가요?

해결 방법

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

SNS 액세스 정책 제한 사항으로 인해 트리거 작업이 실패한 경우:

  • CloudWatch 경보 기록에 다음과 유사한 메시지가 표시됩니다.
    Failed to execute action arn:aws:sns:<region>:<account-id>:<topic-name>. 수신한 오류 메세지: "Resource: arn:aws:cloudwatch:<region>:<account-id>:alarm:<alarm-name> is not authorized to perform: SNS:Publish on resource: arn:aws:sns:<region>:<account-id>:<topic-name>
  • SNS는 액세스 정책을 사용하여 주제에 메시지를 게시할 수 있는 소스를 제한합니다. 권한 오류가 발생하면 SNS 액세스 정책의 [문(Statement)] 섹션에 다음 권한을 추가해야 합니다. 이 업데이트는 SNS 주제에 메시지를 게시할 수 있는 권한을 CloudWatch 경보 서비스에 부여합니다.
    참고: <region>을 이 알림을 적용할 리전으로 바꿉니다. <account-id>를 사용자 계정 ID로 바꿉니다. <topic-name>을 SNS 주제 이름으로 바꿉니다.
{
    "Sid": "Allow_Publish_Alarms",
    "Effect": "Allow",
    "Principal":
    {
        "Service": [
            "cloudwatch.amazonaws.com"
        ]
    },
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:<region>:<account-id>:<topic-name>"
}

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

참고: <region>을 이 알림을 적용할 리전으로 바꿉니다. <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:<region>:<account-id>:<alarm-name>"
        }
    }
}

SNS 주제 암호화로 인해 트리거 작업이 실패한 경우:

  • CloudWatch 경보 기록에 다음과 유사한 메시지가 표시됩니다.
    Failed to execute action arn:aws:sns:<region>:<account-id>:<topic-name>. 수신한 오류: "null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException;)"
  • SNS는 해당 주제에 대해 저장 중 암호화를 허용합니다. 이 암호화에 기본 AWS Key Management Service(KMS) 키 "alias/aws/sns"가 사용되는 경우 CloudWatch 경보는 SNS 주제에 메시지를 게시할 수 없습니다. SNS용 기본 AWS KMS 키의 키 정책은 CloudWatch 경보가 "kms:Decrypt" 및 "kms:GenerateDataKey" API 호출을 수행하도록 허용하지 않습니다. 이 키는 AWS 관리형이므로 정책을 수동으로 편집할 수 없습니다.
  • SNS 주제를 저장 중에 암호화해야 하는 경우 고객 관리형 CMK를 사용할 수 있습니다. 고객 관리형 CMK는 키 정책의 [문(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:<region>:<account-id>:<topic-name>
  • 이는 CloudWatch 경보가 SNS 주제에 메시지를 성공적으로 게시했음을 의미합니다. SNS에서 알림을 전송하지 않은 경우 SNS 주제 및 해당 지표에서 전송 실패가 있는지 확인합니다. 자세한 내용은 실패한 Amazon SNS 푸시 알림 전송 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

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


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?