알람의 상태가 변경될 때 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""
SNS에서 액세스 정책을 사용하여 주제에 메시지를 게시할 수 있는 소스를 제한합니다. 권한 오류가 발생하면 SNS 액세스 정책의 Statement 섹션에 다음 권한을 추가하세요. 정책 업데이트는 CloudWatch 알람 서비스에 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"
}
참고: us-east-1을 알림의 대상인 AWS 리전으로 바꾸고, ACCOUNT_ID을 계정 ID로, TOPIC_NAME을 SNS 주제 이름으로 바꿉니다.
특정 알람에 대한 주제에 메시지를 게시하는 기능을 제한하려면 글로벌 조건 키를 추가합니다. 다음 예시 정책에서는 ArnLike 조건 연산자와 aws:SourceArn 전역 조건 키를 사용합니다. 자세한 내용은 Amazon SNS 액세스 제어의 예시 사례를 참고하세요.
{
"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"
}
}
}
참고: us-east-1을 알림을 받을 지역으로, ACCOUNT_ID를 계정 ID로, TOPIC_NAME을 SNS 주제 이름으로, ALARM_NAME을 알람 이름으로 바꿉니다.
중요: 조건에 포함된 계정의 모든 알람은 정책에서 리소스의 SNS 주제에 게시할 수 있습니다. 예를 들어 알람 리소스 소유자의 계정 ID가 이 주제에 게시할 수 있습니다. SNS 주제 계정 ID와 알람을 소유한 계정 ID 모두에 대해 동일한 계정으로 정책을 제한하세요.
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;)""
SNS가 해당 주제에 대해 미사용 암호화를 허용합니다. SNS가 암호화에 기본 AWS Key Management Service(AWS KMS) alias/aws/sns 키를 사용하는 경우, CloudWatch 알람을 SNS 주제에 게시할 수 없습니다. SNS에 대한 기본 AWS KMS 키의 정책으로 인해 CloudWatch 알람이 kms:Decrypt 및 kms:GenerateDataKey API 호출을 수행할 수 없습니다. 이 키는 AWS에서 관리하므로 정책을 수동으로 편집할 수 없습니다.
미사용 중인 SNS 주제를 암호화해야 하는 경우 고객 관리형 키를 사용하세요. 고객 관리형 키에는 키 정책의 Statement 섹션에 다음과 같은 권한이 포함되어야 합니다. 이러한 권한을 통해 CloudWatch 알람은 암호화된 SNS 주제에 메시지를 게시할 수 있습니다.
{
"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"
앞의 메시지는 CloudWatch 알람이 SNS 주제에 메시지를 성공적으로 게시했음을 의미합니다. SNS로 알림이 전달되지 않았다면 SNS 주제와 해당 지표에서 전달 실패가 있는지 확인하세요. 자세한 내용은 푸시 알림을 위한 Amazon SNS 주제 전송 로그에 액세스하려면 어떻게 하나요?을 참고하세요.
참고: CloudWatch는 사용자가 지정한 작업을 테스트하거나 유효성을 검사하지 않습니다. 또한 존재하지 않는 작업을 간접적으로 호출하려고 할 때 발생하는 Amazon EC2 Auto Scaling 또는 Amazon SNS 오류도 CloudWatch에서 감지하지 못합니다. 작업이 존재하는지 확인하세요.
관련 정보
Amazon CloudWatch 알람 사용
AWS KMS로 Amazon SNS에 게시된 메시지 암호화