暗号化された Amazon Simple Notification Service (Amazon SNS) トピックを使用して Amazon CloudWatch アラームを設定したいと考えています。
簡単な説明
CloudWatch アラームで暗号化された Amazon SNS トピックを含む Amazon SNS 通知を配信するには、AWS Key Management Service (AWS KMS) のカスタマーマネージドキーを使用する必要があります。暗号化にデフォルトの AWS マネージドキーである alias/aws/sns を使用した場合、CloudWatch アラームはアラームアクションを開始することができません。その場合、[アラーム履歴] セクションに次のようなエラーが表示されます。
"アクション arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME を実行できません。発生したエラー: "CloudWatch アラームは、SNS トピックの暗号化キーへのアクセスを許可されていません。"
注: 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 アラームを作成します。
静的しきい値
メトリクスの数式
Metrics Insights のクエリ
接続されているデータソース
異常検知
関連情報
Amazon CloudWatch アラームを使用する
Amazon SNS に発行されたメッセージを AWS KMS で暗号化する
CloudWatch アラームトリガーに関する SNS 通知が届かない理由を教えてください