暗号化された Amazon Simple Notification Service (Amazon SNS) トピックを使用して Amazon CloudWatch アラームを設定したいと考えています。
簡単な説明
CloudWatch アラームで暗号化された Amazon SNS トピックを含む Amazon SNS 通知を配信するには、AWS Key Management Service (AWS KMS) のカスタマーマネージドキーを使用する必要があります。暗号化にデフォルトの AWS マネージドキーである alias/aws/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.""
注: Amazon SNS のデフォルトの AWS KMS キーポリシーでは、CloudWatch アラームは kms:Decrypt と kms:GenerateDataKey API コールの実行を許可されていません。AWS マネージドキーのポリシーを手動で編集することはできません。
解決策
暗号化された Amazon SNS トピックを使用して CloudWatch アラームを設定するには、次の手順を実行します。
-
Amazon SNS コンソールを開きます。
-
[トピックの作成] を選択します。
-
[タイプ] で [スタンダード] を選択し、トピック名と表示名を作成します。
-
[暗号化 - オプション] 設定を展開し、[暗号化] を有効にします。
-
カスタマーマネージドキーを選択します。
-
キーポリシーを手動で編集し、暗号化 Amazon SNS トピックにメッセージを発行するためのアクセス許可である Decrypt と GenerateDataKey を CloudWatch アラームに付与します。
{
"Sid": "Allow_CloudWatch_for_CMK",
"Effect": "Allow",
"Principal": {
"Service": [
"cloudwatch.amazonaws.com"
]
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey*"
],
"Resource": "*"
}
-
(オプション) ポリシーの制限を厳格にするには、Condition 要素を含めます。例えば、次のポリシーの Condition コンテキストキーでは、組織 o-123456789 によるアクションのみが許可されます。
"Resource": "*"
"Condition": {
"StringEquals": {
"aws:SourceOrgID": "o-123456789"
}
-
Amazon SNS トピックのアクセスポリシーに Publish アクセス許可が含まれており、CloudWatch アラームが Amazon SNS トピックにメッセージを発行できることを確認します。
{
"Sid": "Allow_Publish_Alarms",
"Effect": "Allow",
"Principal": {
"Service": [
"cloudwatch.amazonaws.com"
]
},
"Action": "sns:Publish",
"Resource": "arn:aws:sns:example-region:example-account-id:example-topic"}
注: お使いのものでそれぞれ、example-region を AWS リージョンに、example-account-id をアカウント ID に、example-topic をトピック名に置き換えます。
-
[トピックの作成] を選択します。
-
次のいずれかに基づいて CloudWatch アラームを作成します。<br id=hardline_break/>
静的しきい値<br id=hardline_break/>
メトリクスの数式<br id=hardline_break/>
Metrics Insights のクエリ<br id=hardline_break/>
接続されているデータソース<br id=hardline_break/>
異常検知
関連情報
Using Amazon CloudWatch alarms (Amazon CloudWatch アラームを使用する)
Encrypting messages published to Amazon SNS with AWS KMS (Amazon SNS に発行されたメッセージを AWS KMS で暗号化する)
CloudWatch アラームトリガーに関する SNS 通知が届かないのはなぜですか?