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 ポリシーを作成するには
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで、Policies を選択し、Create Policy を選択します。([Get Started] ボタンが表示された場合は、そのボタンを選択してから、[Create Policy] を選択します)。
-
[JSON] タブを選択します。
-
デフォルトコンテンツを以下のものと置き換えます。
{ "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 列を参照してください。
は、AWS アカウントの 12 桁の識別子をaccount-id
123456789012
形式で表します。sns-topic-name
は、通知の発行に使用する Amazon SNS トピックの名前を表します。 -
[Next: Tags] (次へ: タグ) を選択します。
-
(オプション) 1 つ以上のタグキーと値のペアを追加して、このポリシーのアクセスを整理、追跡、または制御します。
-
[次へ: レビュー] を選択します。
-
[Review policy (ポリシーの確認)] ページで、[Name (名前)] にインラインポリシーの名前を入力します。例:
my-sns-publish-permissions
。 -
(オプション) [Description (説明)] に、ポリシーの説明を入力します。
-
[Create policy] を選択します。
タスク 3: Amazon SNS 通知の IAM ロールを作成する
Amazon SNS 通知の IAM ロールを作成するには、次の手順を使用します。このサービスロールは、Systems Manager で Amazon SNS 通知を開始するために使用されます。以降の手順では、このロールは Amazon SNS IAM ロールと呼ばれます。
Amazon SNS 通知の IAM サービスロールを作成するには
AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
IAM コンソールのナビゲーションペインで、[ロール]、[ロールを作成] を選択します。
-
[AWS のサービス]、[Systems Manager] の順にクリックします。
-
[Systems Manager のユースケース] を選択します。[次へ] を選択します。
-
[Attach permissions policies (アクセス許可ポリシーのアタッチ)] ページで、タスク 2 で作成したカスタムポリシーの名前の左側にあるチェックボックスをオンにします。例:
my-sns-publish-permissions
。 -
(オプション) アクセス許可の境界を設定します。このアドバンスド機能は、サービスロールで使用できますが、サービスにリンクされたロールではありません。
[Permissions boundary] (アクセス許可の境界) セクションを展開し、[Use a permissions boundary to control the maximum role permissions] (アクセス許可の境界を使用して、ロールのアクセス許可の上限を設定する) を選択します。IAM には、あなたのアカウント内の AWS 管理ポリシーとカスタマー管理ポリシーのリストがあります。アクセス許可の境界に使用するポリシーを選択するか、[ポリシーを作成] を選択して新しいブラウザタブを開き、新しいポリシーをゼロから作成します。詳細については、『IAM ユーザーガイド』の「IAM ポリシーの作成」を参照してください。ポリシーを作成したら、そのタブを閉じて元のタブに戻り、アクセス許可の境界として使用するポリシーを選択します。
-
[Next] を選択します。
-
可能な場合は、このロールの目的を識別するのに役立つロール名またはロール名サフィックスを入力します。ロール名は AWS アカウント アカウント内で一意である必要があります。大文字と小文字は区別されません。例えば、
PRODROLE
とprodrole
というロール名を両方作成することはできません。多くのエンティティによりロールが参照されるため、作成後にロール名を変更することはできません。 -
(オプション) [Description (説明)] には、新しいロールの説明を入力します。
-
[Step 1: Select trusted entities] (ステップ 1: 信頼済みエンティティの選択) または [Step 2: Select permissions] (ステップ 2: 権限の選択) のセクションで [Edit] (編集) を選択し、ロールのユースケースと権限を変更します。
-
(オプション) タグをキーバリューペアとしてアタッチして、メタデータをユーザーに追加します。IAM でのタグの使用に関する詳細については、「IAM ユーザーガイド」の「IAM リソースにタグを付ける」を参照してください。
-
ロール情報を確認し、ロールの作成 を選択します。
-
ロールの名前を選択してから、[Role ARN] (ロール ARN) 値をコピーまたはメモします。Amazon SNS 通知を返すように設定されたコマンドを送信するときに、ロールのこの Amazon リソースネーム (ARN) が使用されます。
-
[Summary (概要)] ページは開いたままにします。
タスク 4: ユーザーアクセスを設定する
IAM エンティティ (ユーザー、ロール、またはグループ) に管理者許可が割り当てられている場合、ユーザーまたはロールには Run Command と Maintenance Windows へのアクセスと AWS Systems Manager 機能が付与されます。
管理者許可のないエンティティの場合、管理者は IAM エンティティに次のアクセス許可を付与する必要があります。
-
AmazonSSMFullAccess
マネージドポリシー、または同等のアクセス許可を付与するポリシー。 -
iam:PassRole
で作成されたロールの タスク 3: Amazon SNS 通知の IAM ロールを作成する アクセス許可。例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::
account-id
:role/sns-role-name
" } ] }
アクセス権限を付与するには、ユーザー、グループ、またはロールにアクセス許可を追加します。
-
AWS IAM Identity Center のユーザーとグループ:
アクセス許可セットを作成します。「AWS IAM Identity Center ユーザーガイド」の「権限設定を作成する」の手順に従ってください。
-
IAM 内で、ID プロバイダーによって管理されているユーザー:
ID フェデレーションのロールを作成します。詳細については、「IAM ユーザーガイド」の「サードパーティー ID プロバイダー (フェデレーション) 用のロールを作成する」を参照してください。
-
IAM ユーザー:
-
ユーザーが担当できるロールを作成します。手順については、「IAM ユーザーガイド」の「IAM ユーザーのロールの作成」を参照してください。
-
(お奨めできない方法) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加する。詳細については、「IAM ユーザーガイド」の「ユーザー (コンソール) へのアクセス権限の追加」を参照してください。
-
ユーザーアクセスを設定し、iam:PassRole
ポリシーをユーザーアカウントにアタッチするには
-
IAM のナビゲーションペインで、[ユーザー] を選択し、設定するユーザーアカウントを選択します。
-
[Permissions (アクセス許可)] タブのポリシーリストで、
AmazonSSMFullAccess
ポリシーがリストにあるか、またはアカウントに Systems Manager へのアクセス許可を与える同等のポリシーがあるかどうかを確認します。 -
[Add inline policy (インラインポリシーの追加)] を選択します。
-
[Create policy (ポリシーの作成)] ページの [Visual editor (ビジュアルエディタ)] タブを選択します。
-
[Choose a service (サービスの選択)] を選んでから、[IAM] を選択します。
-
[Actions] (アクション) の場合は、[Filter actions] (フィルタアクション) テキストボックスに「
PassRole
」を入力し、[PassRole] の横にあるチェックボックスを選択します。 -
[Resources (リソース)] の場合は、[Specific (固有)] が選択されていることを確認し、[Add ARN (ARN の追加)] を選択します。
-
[Specify ARN for role (ロールの ARN の指定)] フィールドに、タスク 3 の終わりでコピーした Amazon SNS IAM ロールの ARN を貼り付けます。システムによって、[アカウント] と [Role name with path (ロール名とパス)] フィールドが自動的に入力されます。
-
[Add] (追加) をクリックします。
-
[Review policy (ポリシーの確認)] を選択します。
-
[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 ロールにアタッチするには
-
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで [Roles (ロール)] を選択し、タスク 3 で作成した Amazon SNS IAM ロールを選択します。
-
[Role ARN (ロールの ARN)] をコピー、または書き留めて、IAM コンソールの[Roles (ロール)] セクションに戻ります。
-
[Role name] (ロール名) リストから、作成したカスタム Maintenance Windows のサービスロールを選択します。
-
[Permissions] (許可) タブで、
AmazonSSMMaintenanceWindowRole
ポリシーが一覧に表示されていること、または Systems Manager API に対するメンテナンスウィンドウの許可を与える同等のポリシーがあることを確認します。付与されていない場合は、[アクセス許可をアタッチ、ポリシーをアタッチ] をクリックして、アタッチします。 -
[Add permissions, Create inline policy] (アクセス許可の追加、インラインポリシーの作成) を選択します。
-
[Visual Editor (ビジュアルエディタ)] タブを選択します。
-
[Service (サービス)] で、[IAM] を選択します。
-
[Actions] (アクション) の場合は、[Filter actions] (フィルタアクション) テキストボックスに「
PassRole
」を入力し、[PassRole] の横にあるチェックボックスを選択します。 -
[Resources (リソース)] で、[Specific (特定)]、[Add ARN (ARN の追加)] の順に選択します。
-
[Specify ARN for role (ロールの ARN を指定)] ボックスで、タスク 3 で作成した Amazon SNS IAM ロールの ARN を貼り付けて、[Add (追加)] を選択します。
-
[ポリシーの確認] を選択します。
-
[ポリシーの確認] ページで
PassRole
ポリシーの名前を入力し、[ポリシーの作成] をクリックします。