Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング - AWS Systems Manager

Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング

注記

Amazon Simple 通知サービスの FIFO トピックはサポートされていません。

Amazon Simple Notification Service (Amazon SNS) を設定し、AWS Systems Manager の機能である Run Command または Maintenance Windows を使用して送信したコマンドのステータスに関する通知を送信できます。Amazon SNS は、Amazon SNS トピックをサブスクライブしているクライアントまたはエンドポイントへの通知の送信および配信を管理します。コマンドが新しい状態に変更、または失敗タイムアウトのような状態に変更されるたびに通知を受け取ることができます。複数のノードにコマンドを送信する場合、特定ノードに送信されたコマンドの各コピーに対して通知を受けることができます。各コピーは、その呼び出しと呼ばれます。

Amazon SNS は、HTTP または HTTPS POST、E メール (SMTP、プレーンテキストまたは JSON 形式のいずれか)、あるいは Amazon Simple Queue Service (Amazon SQS) キューに投稿されるメッセージとして通知を配信できます。詳細については、Amazon Simple Notification Service デベロッパーガイドの「Amazon SNS とは」を参照してください。Run Command と Maintenance Windows が提供する Amazon SNS 通知に含まれる JSON データの構造の例については、「AWS Systems Manager の Amazon SNS 通知の例」を参照してください。

AWS Systems Manager の Amazon SNS 通知の設定

メンテナンスウィンドウに登録されている Run Command および Maintenance Windows のタスクは、以下のステータスに入るコマンドタスクについて Amazon SNS 通知を送信できます。

  • 進行中

  • 成功

  • 失敗

  • タイムアウト

  • Canceled

これらのステータスのいずれかを入力するコマンドの条件については、「コマンドのステータスについて」を参照してください。

注記

Run Command を使用してコマンドを送信すると、キャンセル中および保留中のステータスも報告されます。これらのステータスは、Amazon SNS 通知ではキャプチャされません。

Amazon SNS 通知のコマンド概要

Amazon SNS 通知のメンテナンスウィンドウにある Run Command または Run Command のタスクを設定する場合、Amazon SNS は次の情報を含む概要メッセージを送信します。

フィールド タイプ 説明

eventTime

文字列

イベントが開始された時刻。Amazon SNS はメッセージの配信順序を保証しないため、タイムスタンプは重要です。例: 2016-04-26T13:15:30Z

documentName

文字列

このコマンドの実行に使用された SSM ドキュメントの名前。

commandId

文字列

コマンドが送信された後に Run Command によって生成された ID です。

expiresAfter

日付

この時間が経過したときにコマンドの実行がまだ開始されていない場合、コマンドは実行されません。

outputS3BucketName

文字列

コマンド実行に対する応答を保存する Amazon Simple Storage Service (Amazon S3) バケットです。

outputS3KeyPrefix

文字列

コマンド実行に対する応答を保存するバケット内の Amazon S3 のディレクトリパスです。

requestedDateTime

文字列

リクエストがこの特定のノードに送信された日時です。

instanceIds

StringList

コマンドの対象となるノードです。

注記

インスタンス ID が概要メッセージに含まれるのは、Run Command タスクがインスタンス ID を直接ターゲットにしている場合のみです。Run Command タスクがタグベースのターゲティングを使用して発行された場合、インスタンス ID は概要メッセージに含まれません。

status

文字列

コマンドのコマンドステータスです。

呼び出しベースの Amazon SNS 通知

コマンドを複数のノードに送信する場合、Amazon SNS はコマンドの各コピーまたは呼び出しに関するメッセージを送信できます。メッセージには次の情報が含まれます。

フィールド タイプ 説明

eventTime

文字列

イベントが開始された時刻。Amazon SNS はメッセージの配信順序を保証しないため、タイムスタンプは重要です。例: 2016-04-26T13:15:30Z

documentName

文字列

このコマンドの実行に使用された Systems Manager ドキュメント (SSM ドキュメント) の名前。

requestedDateTime

文字列

リクエストがこの特定のノードに送信された日時です。

commandId

文字列

コマンドが送信された後に Run Command によって生成された ID です。

instanceId

文字列

コマンドの対象となるインスタンスを選択します。

status

文字列

この呼び出しのコマンドステータス。

コマンドがステータスを変更したときに Amazon SNS 通知をセットアップするには、次のタスクを完了する必要があります。

注記

メンテナンスウィンドウの Amazon SNS 通知を設定していない場合は、このトピックの「タスク 5」をスキップできます。

タスク 1: Amazon SNS トピックを作成してサブスクライブする

Amazon SNS トピックは、メンテナンスウィンドウに登録されている Run Command および Run Command タスクがコマンドのステータスに関する通知を送信するために使用する通信チャネルです。Amazon SNS では、HTTP/S、E メールに加え、Amazon Simple Queue Service (Amazon SQS) のような AWS のサービスをサポートしています。開始するには、E メールプロトコルを使用して開始することをお勧めします。トピックの作成方法の詳細については、Amazon Simple Notification Service デベロッパーガイドの「Amazon SNS トピックの作成」を参照してください。

注記

トピックを作成した後に [Topic ARN (トピック ARN)] をコピー、または書き留めます。ステータスの通知を返すように設定されたコマンドを送信するときに、この ARN を指定します。

トピックを作成したら、[エンドポイント] を指定してサブスクライブします。E メールプロトコルを選択した場合、エンドポイントは、通知を受け取る E メールアドレスです。トピックにサブスクライブする方法の詳細については、Amazon Simple Notification Service デベロッパーガイドの「Amazon SNS トピックへのサブスクライブ」を参照してください。

Amazon SNS は、AWS通知の確認メールをお客様が指定した E メールアドレスに送信します。E メールを開き、[サブスクリプションを確認] へのリンクを選択します。

AWS からの確認メッセージが届きます。Amazon SNS は、通知を受信し、通知を E メールとして指定された E メールアドレスに送信するように設定されました。

タスク 2: Amazon SNS 通知用の IAM ポリシーを作成する

以下の手順を使用して、Amazon SNS 通知を開始するためのアクセス許可を提供するカスタム AWS Identity and Access Management (IAM) ポリシーを作成します。

Amazon SNS 通知用のカスタム IAM ポリシーを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで、Policies を選択し、Create Policy を選択します。([Get Started] ボタンが表示された場合は、そのボタンを選択してから、[Create Policy] を選択します)。

  3. [JSON] タブを選択します。

  4. デフォルトコンテンツを以下のものと置き換えます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:region:account-id:sns-topic-name" } ] }

    region は、米国東部 (オハイオ) リージョンの us-east-2 のように、AWS Systems Manager でサポートされている AWS リージョン の識別子を表します。サポートされている region 値の一覧については、「Amazon Web Services 全般のリファレンス」の「Systems Manager サービスエンドポイント」にある Region 列を参照してください。

    account-id は、AWS アカウントの 12 桁の識別子を 123456789012 形式で表します。

    sns-topic-name は、通知の発行に使用する Amazon SNS トピックの名前を表します。

  5. [Next: Tags] (次へ: タグ) を選択します。

  6. (オプション) 1 つ以上のタグキーと値のペアを追加して、このポリシーのアクセスを整理、追跡、または制御します。

  7. [次へ: レビュー] を選択します。

  8. [Review policy (ポリシーの確認)] ページで、[Name (名前)] にインラインポリシーの名前を入力します。例: my-sns-publish-permissions

  9. (オプション) [Description (説明)] に、ポリシーの説明を入力します。

  10. [Create policy] を選択します。

タスク 3: Amazon SNS 通知の IAM ロールを作成する

Amazon SNS 通知の IAM ロールを作成するには、次の手順を使用します。このサービスロールは、Systems Manager で Amazon SNS 通知を開始するために使用されます。以降の手順では、このロールは Amazon SNS IAM ロールと呼ばれます。

Amazon SNS 通知の IAM サービスロールを作成するには
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. IAM コンソールのナビゲーションペインで、[ロール]、[ロールを作成] を選択します。

  3. [AWS のサービス]、[Systems Manager] の順にクリックします。

  4. [Systems Manager のユースケース] を選択します。[次へ] を選択します。

  5. [Attach permissions policies (アクセス許可ポリシーのアタッチ)] ページで、タスク 2 で作成したカスタムポリシーの名前の左側にあるチェックボックスをオンにします。例: my-sns-publish-permissions

  6. (オプション) アクセス許可の境界を設定します。このアドバンスド機能は、サービスロールで使用できますが、サービスにリンクされたロールではありません。

    [Permissions boundary] (アクセス許可の境界) セクションを展開し、[Use a permissions boundary to control the maximum role permissions] (アクセス許可の境界を使用して、ロールのアクセス許可の上限を設定する) を選択します。IAM には、あなたのアカウント内の AWS 管理ポリシーとカスタマー管理ポリシーのリストがあります。アクセス許可の境界に使用するポリシーを選択するか、[ポリシーを作成] を選択して新しいブラウザタブを開き、新しいポリシーをゼロから作成します。詳細については、『IAM ユーザーガイド』の「IAM ポリシーの作成」を参照してください。ポリシーを作成したら、そのタブを閉じて元のタブに戻り、アクセス許可の境界として使用するポリシーを選択します。

  7. [Next] を選択します。

  8. 可能な場合は、このロールの目的を識別するのに役立つロール名またはロール名サフィックスを入力します。ロール名は AWS アカウント アカウント内で一意である必要があります。大文字と小文字は区別されません。例えば、PRODROLEprodrole というロール名を両方作成することはできません。多くのエンティティによりロールが参照されるため、作成後にロール名を変更することはできません。

  9. (オプション) [Description (説明)] には、新しいロールの説明を入力します。

  10. [Step 1: Select trusted entities] (ステップ 1: 信頼済みエンティティの選択) または [Step 2: Select permissions] (ステップ 2: 権限の選択) のセクションで [Edit] (編集) を選択し、ロールのユースケースと権限を変更します。

  11. (オプション) タグをキーバリューペアとしてアタッチして、メタデータをユーザーに追加します。IAM でのタグの使用に関する詳細については、「IAM ユーザーガイド」の「IAM リソースにタグを付ける」を参照してください。

  12. ロール情報を確認し、ロールの作成 を選択します。

  13. ロールの名前を選択してから、[Role ARN] (ロール ARN) 値をコピーまたはメモします。Amazon SNS 通知を返すように設定されたコマンドを送信するときに、ロールのこの Amazon リソースネーム (ARN) が使用されます。

  14. [Summary (概要)] ページは開いたままにします。

タスク 4: ユーザーアクセスを設定する

IAM エンティティ (ユーザー、ロール、またはグループ) に管理者許可が割り当てられている場合、ユーザーまたはロールには Run Command と Maintenance Windows へのアクセスと AWS Systems Manager 機能が付与されます。

管理者許可のないエンティティの場合、管理者は IAM エンティティに次のアクセス許可を付与する必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/sns-role-name" } ] }

アクセス権限を付与するには、ユーザー、グループ、またはロールにアクセス許可を追加します。

ユーザーアクセスを設定し、iam:PassRole ポリシーをユーザーアカウントにアタッチするには
  1. IAM のナビゲーションペインで、[ユーザー] を選択し、設定するユーザーアカウントを選択します。

  2. [Permissions (アクセス許可)] タブのポリシーリストで、AmazonSSMFullAccess ポリシーがリストにあるか、またはアカウントに Systems Manager へのアクセス許可を与える同等のポリシーがあるかどうかを確認します。

  3. [Add inline policy (インラインポリシーの追加)] を選択します。

  4. [Create policy (ポリシーの作成)] ページの [Visual editor (ビジュアルエディタ)] タブを選択します。

  5. [Choose a service (サービスの選択)] を選んでから、[IAM] を選択します。

  6. [Actions] (アクション) の場合は、[Filter actions] (フィルタアクション) テキストボックスに「PassRole」を入力し、[PassRole] の横にあるチェックボックスを選択します。

  7. [Resources (リソース)] の場合は、[Specific (固有)] が選択されていることを確認し、[Add ARN (ARN の追加)] を選択します。

  8. [Specify ARN for role (ロールの ARN の指定)] フィールドに、タスク 3 の終わりでコピーした Amazon SNS IAM ロールの ARN を貼り付けます。システムによって、[アカウント] と [Role name with path (ロール名とパス)] フィールドが自動的に入力されます。

  9. [Add] (追加) をクリックします。

  10. [Review policy (ポリシーの確認)] を選択します。

  11. [Review Policy] (ポリシーの確認) ページに名前を入力し、[Create Policy] (ポリシーの作成) を選択します。

タスク 5: iam:PassRole ポリシーをメンテナンスウィンドウロールにアタッチする

Run Command タスクをメンテナンスウィンドウに登録する場合、サービスロール Amazon リソースネーム (ARN) を指定します。このサービスロールは、メンテナンスウィンドウに登録されているタスクを実行するために Systems Manager によって使用されます。登録された Run Command タスクの Amazon SNS 通知を設定するには、指定されたメンテナンスウィンドウサービスロールに iam:PassRole ポリシーをアタッチします。登録されたタスクを Amazon SNS 通知に設定しない場合、このタスクはスキップしてください。

iam:PassRole ポリシーを使用すると、Maintenance Windows サービスロールは、タスク 3 で作成した Amazon SNS IAM ロールを Amazon SNS サービスに渡すことができます。次の手順は、iam:PassRole ポリシーを Maintenance Windows サービスロールにアタッチする方法を示しています。

注記

登録された Run Command タスクに関連する通知を送信するには、メンテナンスウィンドウのカスタムサービスロールを使用します。詳細については、Maintenance Windows を設定する を参照してください。

メンテナンスウィンドウのタスク用にカスタムサービスロールを作成する必要がある場合は、「Maintenance Windows を設定する」を参照してください。

iam:PassRole ポリシーを Maintenance Windows ロールにアタッチするには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles (ロール)] を選択し、タスク 3 で作成した Amazon SNS IAM ロールを選択します。

  3. [Role ARN (ロールの ARN)] をコピー、または書き留めて、IAM コンソールの[Roles (ロール)] セクションに戻ります。

  4. [Role name] (ロール名) リストから、作成したカスタム Maintenance Windows のサービスロールを選択します。

  5. [Permissions] (許可) タブで、AmazonSSMMaintenanceWindowRole ポリシーが一覧に表示されていること、または Systems Manager API に対するメンテナンスウィンドウの許可を与える同等のポリシーがあることを確認します。付与されていない場合は、[アクセス許可をアタッチ、ポリシーをアタッチ] をクリックして、アタッチします。

  6. [Add permissions, Create inline policy] (アクセス許可の追加、インラインポリシーの作成) を選択します。

  7. [Visual Editor (ビジュアルエディタ)] タブを選択します。

  8. [Service (サービス)] で、[IAM] を選択します。

  9. [Actions] (アクション) の場合は、[Filter actions] (フィルタアクション) テキストボックスに「PassRole」を入力し、[PassRole] の横にあるチェックボックスを選択します。

  10. [Resources (リソース)] で、[Specific (特定)]、[Add ARN (ARN の追加)] の順に選択します。

  11. [Specify ARN for role (ロールの ARN を指定)] ボックスで、タスク 3 で作成した Amazon SNS IAM ロールの ARN を貼り付けて、[Add (追加)] を選択します。

  12. [ポリシーの確認] を選択します。

  13. [ポリシーの確認] ページで PassRole ポリシーの名前を入力し、[ポリシーの作成] をクリックします。