경보의 상태가 변경되면 Amazon Simple Notification Service(Amazon SNS) 주제로 알림을 보내도록 Amazon CloudWatch 경보를 구성했습니다. 하지만 상태가 변경되어도 SNS 알림이 오지 않습니다.
해결 방법
SNS 알림을 받지 못하는 이유를 확인하려면 CloudWatch 경보의 기록을 확인하여 트리거 작업의 상태를 보십시오.
SNS 액세스 정책 제한
CloudWatch 경보 기록에 다음과 비슷한 오류 메시지가 표시됩니다.
"Failed to execute action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME. Received error: "CloudWatch Alarms is not authorized to perform: SNS:Publish on resource: arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME""
이 오류는 SNS 액세스 정책이 SNS 주제에 대한 CloudWatch 액세스를 제한하기 때문에 발생합니다.
Amazon SNS는 액세스 정책을 사용하여 주제에 메시지를 게시할 수 있는 서비스를 제한합니다. SNS 주제에 메시지를 게시할 수 있는 권한을 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을 AWS 계정 ID로, TOPIC_NAME을 SNS 주제 이름으로 바꾸십시오.
특정 경보에 대한 주제에 메시지를 게시하는 기능을 제한하려면 글로벌 조건 키를 추가합니다. 다음 예시 정책에서는 ArnLike 조건 연산자와 aws:SourceArn 전역 조건 키를 사용합니다.
{ "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 주제를 소유한 계정과 경보를 소유한 계정이 동일한 계정이 되도록 정책을 제한하십시오.
자세한 내용은 Amazon SNS 액세스 제어의 예시 사례를 참조하십시오.
SNS 주제 암호화 문제
SNS 주제 암호화로 인해 트리거 작업이 실패한 경우 CloudWatch 경보 기록에 다음과 유사한 메시지가 표시됩니다.
"Failed to execute action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME. Received error: "CloudWatch Alarms does not have authorization to access the SNS topic encryption key.""
서버측 암호화에 기본 AWS Key Management Service(AWS KMS) alias/aws/sns 키를 사용하도록 Amazon SNS를 구성한 경우 CloudWatch가 SNS 주제에 게시할 수 없습니다. Amazon SNS에 대한 기본 AWS KMS 키 정책을 사용하면 CloudWatch에서 kms:Decrypt 및 kms:GenerateDataKey API 작업을 수행할 수 없습니다. 이 키는 AWS에서 관리하므로 정책을 수동으로 편집할 수 없습니다.
미사용 중인 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"
SNS 알림을 받지 못한 경우 SNS 주제와 해당 지표에서 전송 실패를 확인하십시오. 자세한 내용은 푸시 알림을 위한 Amazon SNS 주제 전송 로그에 액세스하려면 어떻게 합니까?를 참조하십시오.
CloudWatch는 사용자가 지정한 작업을 테스트하거나 유효성을 검사하지 않습니다. 또한 CloudWatch는 존재하지 않는 작업을 호출하려고 할 때 발생하는 Amazon EC2 Auto Scaling 또는 Amazon SNS 오류도 감지하지 못합니다. 작업이 존재하는지 확인하십시오.
관련 정보
Amazon CloudWatch 경보 사용
AWS KMS로 Amazon SNS에 게시된 메시지 암호화