アラームの変更をユーザーに通知する - Amazon CloudWatch

アラームの変更をユーザーに通知する

このセクションでは、AWS ユーザー通知または Amazon Simple Notification Service を使用して、ユーザーにアラームの変更を通知する方法を説明します。

AWS ユーザー通知を設定する

AWS User Notifications を使用して、CloudWatch アラーム状態変更、設定変更イベントに関する通知を送信する配信チャネルを設定できます。指定したルールにイベントが一致すると、通知を受け取ります。イベントの通知は、E メール、AWS Chatbot のチャット通知、AWS コンソールモバイルアプリケーションのプッシュ通知 など、複数のチャネルで受け取ることができます。[コンソール通知センター] で通知を確認することもできます。ユーザー通知は集約をサポートしているため、特定のイベント中に受け取る通知の数を減らすことができます。

AWS User Notifications で作成した通知設定は、ターゲットアラーム状態ごとに設定できるアクション数の制限にはカウントされません。AWS User Notifications は Amazon EventBridge に送信されるイベントと一致すると、特定のアラームまたはパターンの許可リストまたは拒否リストの高度なフィルターを指定しない限り、アカウントと選択したリージョンのすべてのアラームに対する通知を送信します。

以下の高度なフィルタの例では、ServerCpuTooHigh という名前のアラームのアラーム状態が OK から ALARM に変化したことを照合します。

{ "detail": { "alarmName": ["ServerCpuTooHigh"], "previousState": { "value": ["OK"] }, "state": { "value": ["ALARM"] } } }

任意の EventBridge イベントのアラームによって公開されるプロパティを使用してフィルターを作成できます。詳細については、「アラームイベントと EventBridge」を参照してください。

Amazon SNS 通知の設定

Amazon Simple Notification Service を使用して、モバイルテキストメッセージング (SMS) や E メールメッセージなどのアプリケーション間 (A2A) メッセージングと、アプリケーション対個人間 (A2P) メッセージングの両方を送信できます。詳細については、「Amazon SNS イベントの送信先」を参照してください。

アラームが取りうる状態ごとに、SNS トピックにメッセージを送信するようにアラームを設定できます。特定のアラームの状態に設定するすべての Amazon SNS トピックは、そのアラームと状態に設定できるアクション数の制限にカウントされます。アカウント内のどのアラームからでも同じ Amazon SNS トピックにメッセージを送信でき、アプリケーション間 (A2A) とアプリケーション対個人(A2P) 両方のコンシューマーに同じ Amazon SNS トピックを使用できます。この設定はアラームレベルで行われるため、設定したアラームのみが選択した Amazon SNS トピックにメッセージを送信します。

最初にトピックを作成して、それをサブスクライブします。オプションでトピックにテストメッセージを発行できます。例については、「 を使用した Amazon SNS トピックの設定AWS Management Console」を参照してください。または、詳細については、「Amazon SNS の始め方」を参照してください。

または、AWS Management Console を使用して CloudWatch アラームを作成する予定である場合は、アラームの作成時にトピックを作成できるため、この手順を省略できます。

CloudWatch アラームを作成すると、アラームが入る任意のターゲット状態に対してアクションを追加できます。通知を受け取りたい状態の Amazon SNS 通知を追加し、前のステップで作成した Amazon SNS トピックを選択して、アラームが選択した状態になったときに E メール通知を送信します。

注記

Amazon SNS トピックを作成する際は、スタンダードトピックまたは FIFO トピックを選択します。CloudWatch では、両方のタイプのトピックへのアラーム通知のすべてが確実に公開されます。ただし、FIFO トピックを使用した場合でも、まれに CloudWatch により順不同でトピックに通知が送信されることがあります。FIFO トピックを使用する場合、アラームはアラーム通知のメッセージグループ ID がアラームの ARN のハッシュになるように設定されます。

混乱した代理セキュリティ問題の防止

混乱した代理問題は、アクションを実行する許可を持たないエンティティが、より権限のあるエンティティにアクションの実行を強制できるセキュリティ上の問題です。AWS では、サービス間でのなりすましによって、混乱した代理問題が発生する場合があります。サービス間でのなりすましは、1 つのサービス (呼び出し元サービス) が、別のサービス (呼び出し対象サービス) を呼び出すときに発生する可能性があります。呼び出し元サービスは、本来ならアクセスすることが許可されるべきではない方法でその許可を使用して、別のお客様のリソースに対する処理を実行するように操作される場合があります。これを防ぐため、AWS では、アカウント内のリソースへのアクセス権が付与されたサービスプリンシパルですべてのサービスのデータを保護するために役立つツールを提供しています。

リソースポリシーで aws:SourceArnaws:SourceAccountaws:SourceOrgID、および aws:SourceOrgPaths のグローバル条件コンテキストキーを使用して、Amazon SNS が別のサービスに付与する許可をそのリソースに制限することをお勧めします。1 つのリソースだけをクロスサービスのアクセスに関連付ける場合は、aws:SourceArn を使用します。アカウント内の任意のリソースをクロスサービスの使用に関連付ける場合は、aws:SourceAccount を使用します。組織内の任意のアカウントの任意のリソースをクロスサービスの使用に関連付ける場合は、aws:SourceOrgID を使用します。AWS Organizations パス内の任意のアカウントのリソースをクロスサービスの使用に関連付ける場合は、aws:SourceOrgPaths を使用します。パスの使用と理解の詳細については、「AWS Organizations エンティティパスを理解する」を参照してください。

混乱した代理問題から保護するための最も効果的な方法は、リソースの完全な ARN を指定して、aws:SourceArn グローバル条件コンテキストキーを使用することです。リソースの完全な ARN が不明な場合や、複数のリソースを指定する場合には、グローバルコンテキスト条件キー aws:SourceArn で、ARN の未知部分を示すためにワイルドカード文字 (*) を使用します。例えば、arn:aws:servicename:*:123456789012:* と指定します。

aws:SourceArn の値に Amazon S3 バケット ARN などのアカウント ID が含まれていない場合は、両方の aws:SourceAccountaws:SourceArn を使用して、アクセス許可を制限する必要があります。

混乱した代理問題から保護するために、リソースベースポリシー内のリソースの組織 ID または組織パスを指定しながら、aws:SourceOrgID または aws:SourceOrgPaths のグローバル条件コンテキストキーを使用してください。aws:SourceOrgID または aws:SourceOrgPaths キーを含むポリシーには正しいアカウントが自動的に組み込まれるため、組織のアカウントを追加、削除、移動する際には手動で更新する必要はありません。

aws:SourceArn の値は、通知を送信しているアラームの ARN にする必要があります。

次の例は、CloudWatch で aws:SourceArn および aws:SourceAccount のグローバル条件コンテキストキーを使用して、混乱した代理問題を回避する方法を示しています。

{ "Statement": [{ "Effect": "Allow", "Principal": { "Service": "cloudwatch.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*" }, "StringEquals": { "aws:SourceAccount": "111122223333" } } }] }

アラーム ARN に非 ASCII 文字が含まれている場合は、aws:SourceAccount グローバル条件キーのみを使用して、許可を制限してください。

を使用した Amazon SNS トピックの設定AWS Management Console

最初にトピックを作成して、それをサブスクライブします。オプションでトピックにテストメッセージを発行できます。

SNS トピックを作成するには
  1. Amazon SNS コンソール (https://console.aws.amazon.com/sns/v3/home) を開きます。

  2. Amazon SNS ダッシュボードの [Common actions] の下で、[Create topic] を選択します。

  3. [新しいトピックの作成] ダイアログボックスで、[トピック] にトピックの名前 (例: my-topic) を入力します。

  4. [Create topic] (トピックの作成) を選択します。

  5. 次のタスクの [Topic ARN] (例: arn:aws:sns:us-east-1:111122223333:my-topic) をコピーします。

SNS トピックをサブスクライブするには
  1. Amazon SNS コンソール (https://console.aws.amazon.com/sns/v3/home) を開きます。

  2. ナビゲーションペインで、[サブスクリプション]、[サブスクリプションの作成] の順に選択します。

  3. [サブスクリプションの作成] ダイアログボックスの [トピック ARN] に、前のタスクで作成したトピック ARN を貼り付けます。

  4. [Protocol (プロトコル)] として [Email (E メール)] を選択します。

  5. [エンドポイント] に通知の受取先として使用する E メールアドレスを入力し、[サブスクリプションの作成] を選択します。

  6. E メールアプリケーションで AWS 通知から届いたメッセージを開き、サブスクライブを確認します。

    ウェブブラウザに Amazon SNS の確認画面が表示されます。

SNS トピックにテストメッセージを発行するには
  1. Amazon SNS コンソール (https://console.aws.amazon.com/sns/v3/home) を開きます。

  2. ナビゲーションペインで、[トピック] を選択します。

  3. [トピック] ページでトピックを選択し、[トピックに発行] を選択します。

  4. [メッセージを発行] ページの [件名] にメッセージの件名を入力し、[メッセージ] に短いメッセージを入力します。

  5. [メッセージの発行] を選択します。

  6. メールをチェックして、メッセージを受信したことを確認します。

を使用した SNS トピックの設定AWS CLI

最初に SNS トピックを作成し、次にメッセージをトピックに直接発行して設定が正しいことをテストします。

SNS トピックを設定するには
  1. 次のように create-topic コマンドを使用してトピックを作成します。

    aws sns create-topic --name my-topic

    Amazon SNS は次の形式でトピック ARN を返します。

    { "TopicArn": "arn:aws:sns:us-east-1:111122223333:my-topic" }
  2. subscribe コマンドを用いて、自分の E メールアドレスをトピックにサブスクライブします。サブスクライブのリクエストが成功すると、確認メールが届きます。

    aws sns subscribe --topic-arn arn:aws:sns:us-east-1:111122223333:my-topic --protocol email --notification-endpoint my-email-address

    Amazon SNS は以下を返します。

    { "SubscriptionArn": "pending confirmation" }
  3. E メールアプリケーションで AWS 通知から届いたメッセージを開き、サブスクライブを確認します。

    ウェブブラウザに、Amazon Simple Notification Service からの確認応答が表示されます。

  4. list-subscriptions-by-topic コマンドを使用して、サブスクリプションを確認します。

    aws sns list-subscriptions-by-topic --topic-arn arn:aws:sns:us-east-1:111122223333:my-topic

    Amazon SNS は以下を返します。

    { "Subscriptions": [ { "Owner": "111122223333", "Endpoint": "me@mycompany.com", "Protocol": "email", "TopicArn": "arn:aws:sns:us-east-1:111122223333:my-topic", "SubscriptionArn": "arn:aws:sns:us-east-1:111122223333:my-topic:64886986-bf10-48fb-a2f1-dab033aa67a3" } ] }
  5. (オプション) publish コマンドを使用してトピックにテストメッセージを発行します。

    aws sns publish --message "Verification" --topic arn:aws:sns:us-east-1:111122223333:my-topic

    Amazon SNS は以下を返します。

    { "MessageId": "42f189a0-3094-5cf6-8fd7-c2dde61a4d7d" }
  6. メールをチェックして、メッセージを受信したことを確認します。

アラームの状態が変更された場合の Amazon SNS 通知のスキーマ

このセクションでは、アラームの状態が変更された場合に Amazon SNS トピックに送信される通知のスキーマを一覧で示します。

メトリクスアラームの状態が変更された場合のスキーマ

{ "AlarmName": "string", "AlarmDescription": "string", "AWSAccountId": "string", "AlarmConfigurationUpdatedTimestamp": "string", "NewStateValue": "string", "NewStateReason": "string", "StateChangeTime": "string", "Region": "string", "AlarmArn": "string", "OldStateValue": "string", "OKActions": ["string"], "AlarmActions": ["string"], "InsufficientDataActions": ["string"], "Trigger": { "MetricName": "string", "Namespace": "string", "StatisticType": "string", "Statistic": "string", "Unit": "string or null", "Dimensions": [ { "value": "string", "name": "string" } ], "Period": "integer", "EvaluationPeriods": "integer", "DatapointsToAlarm": "integer", "ComparisonOperator": "string", "Threshold": "number", "TreatMissingData": "string", "EvaluateLowSampleCountPercentile": "string or null" } }

複合アラームの状態が変更された場合のスキーマ

{ "AlarmName": "string", "AlarmDescription": "string", "AWSAccountId": "string", "NewStateValue": "string", "NewStateReason": "string", "StateChangeTime": "string", "Region": "string", "AlarmArn": "string", "OKActions": [String], "AlarmActions": [String], "InsufficientDataActions": [String], "OldStateValue": "string", "AlarmRule": "string", "TriggeringChildren": [String] }