

• AWS Systems Manager CloudWatch ダッシュボードは、2026 年 4 月 30 日以降は利用できなくなります。お客様は、これまでと同様に Amazon CloudWatch コンソールを使用して、Amazon CloudWatch ダッシュボードの表示、作成、管理を継続できます。詳細については、「[Amazon CloudWatch ダッシュボードのドキュメント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)」を参照してください。

# Maintenance Windows を設定する
<a name="setting-up-maintenance-windows"></a>

AWS アカウント内のユーザーが AWS Systems Manager のツールである Maintenance Windows を使用してメンテナンスウィンドウタスクを作成およびスケジュールできるようにするには、必要なアクセス許可を付与する必要があります。さらに、メンテナンスウィンドウ用の IAM サービスロールと、それにアタッチする IAM ポリシーを作成する必要があります。

**[開始する前に]**  
このセクションで設定するアクセス許可に加えて、メンテナンスウィンドウを操作する IAM エンティティ (ユーザー、ロール、またはグループ) が既に一般的なメンテナンスウィンドウのアクセス許可をもっている必要があります。そのようなアクセス許可は、対象エンティティに IAM ポリシーの `AmazonSSMFullAccess` を割り当てるか、またはメンテナンスウィンドウのタスクを対象とするより小規模な Systems Manager アクセス許可セットを提供するカスタム IAM ポリシーを割り当てることによって付与できます。

**Topics**
+ [コンソールを使用したメンテナンスウィンドウへのアクセスの制御](configuring-maintenance-window-permissions-console.md)
+ [AWS CLI を使用したメンテナンスウィンドウへのアクセスの制御](configuring-maintenance-window-permissions-cli.md)

# コンソールを使用したメンテナンスウィンドウへのアクセスの制御
<a name="configuring-maintenance-window-permissions-console"></a>

以下の手順では、AWS Systems Manager コンソールを使用して、メンテナンスウィンドウに必要なロールとアクセス許可を作成する方法を説明します。

**Topics**
+ [タスク 1: コンソールを使用して、メンテナンスウィンドウサービスロール用にカスタムポリシーを作成する](#create-custom-policy-console)
+ [タスク 2: コンソールを使用して、メンテナンスウィンドウのカスタムサービスロールを作成する](#create-custom-role-console)
+ [タスク 3: コンソールを使用して、特定のユーザーにメンテナンスウィンドウタスクを登録するアクセス許可を付与する](#allow-maintenance-window-access-console)
+ [タスク 4: 指定されたユーザーがコンソールを使用してメンテナンスウィンドウタスクを登録できないようにする](#deny-maintenance-window-access-console)

## タスク 1: コンソールを使用して、メンテナンスウィンドウサービスロール用にカスタムポリシーを作成する
<a name="create-custom-policy-console"></a>

メンテナンスウィンドウのタスクには、ターゲットリソースで実行するために必要なアクセス許可を提供するための IAM ロールが必要です。アクセス許可は、ロールにアタッチされた IAM ポリシーを通じて提供されます。実行するタスクのタイプおよびその他の運用要件によって、このポリシーの内容が決定されます。ユーザーのニーズに対応する基本ポリシーを提供しています。メンテナンスウィンドウで実行するタスクおよびタスクのタイプによっては、このポリシーのすべてのアクセス許可が必要ではなく、追加のアクセス許可を含める必要がある場合があります。後ほど [タスク 2: コンソールを使用して、メンテナンスウィンドウのカスタムサービスロールを作成する](#create-custom-role-console) に作成するロールに、このポリシーをアタッチします。

**コンソールを使用してカスタムポリシーを作成するには**

1. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソール を開きます。

1. ナビゲーションペインで **ポリシー**を選択してから **ポリシーの作成**を選択します。

1. **[ポリシーエディタ]** 欄で、**[JSON]** を選択します。

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

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:SendCommand",
                   "ssm:CancelCommand",
                   "ssm:ListCommands",
                   "ssm:ListCommandInvocations",
                   "ssm:GetCommandInvocation",
                   "ssm:GetAutomationExecution",
                   "ssm:StartAutomationExecution",
                   "ssm:ListTagsForResource",
                   "ssm:DescribeInstanceInformation",
                   "ssm:GetParameters"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "states:DescribeExecution",
                   "states:StartExecution"
               ],
               "Resource": [
                   "arn:aws:states:*:*:execution:*:*",
                   "arn:aws:states:*:*:stateMachine:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lambda:InvokeFunction"
               ],
               "Resource": [
                   "arn:aws:lambda:*:*:function:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "resource-groups:ListGroups",
                   "resource-groups:ListGroupResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "tag:GetResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/maintenance-window-role-name",
               "Condition": {
                   "StringEquals": {
                       "iam:PassedToService": [
                           "ssm.amazonaws.com"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 必要に応じて、アカウントで実行するメンテナンスタスクの JSON コンテンツを変更します。変更した内容は、ユーザーが計画したオペレーションに固有のものです。

   例:
   + ワイルドカード (\$1) 修飾子を使用する代わりに、特定の関数およびステートマシンに Amazon リソースネーム (ARN) を指定できます。
   + AWS Step Functions タスクを実行する予定がない場合は、`states` のアクセス許可と (ARN) を削除できます。
   + AWS Lambda タスクを実行する予定がない場合は、`lambda` のアクセス許可と ARN を削除できます。
   + オートメーションタスクを実行する予定がない場合は、`ssm:GetAutomationExecution` および `ssm:StartAutomationExecution` のアクセス許可を削除できます。
   + タスクの実行に必要な追加のアクセス許可を追加します。たとえば、一部のオートメーションアクションは AWS CloudFormation スタックと連携します。そのため、`cloudformation:CreateStack`、`cloudformation:DescribeStacks`、および `cloudformation:DeleteStack` のアクセス許可が必要です。

     別の例: オートメーションランブックの `AWS-CopySnapshot` では、Amazon Elastic Block Store (Amazon EBS) スナップショットを作成するためのアクセス許可が必要です。このため、サービスロールに許可 `ec2:CreateSnapshot` が必要です。

     自動化ランブックで必要なロールの許可については、「[AWS Systems Manager Automation Runbook Reference](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-runbook-reference.html)」にあるランブックの説明を参照してください。

1. ポリシーのリビジョンを完了したら、**[次へ]** をクリックします。

1. **[ポリシー名]** に、作成したサービスロールにアタッチするポリシーを識別するためのポリシー名を入力します。例: **my-maintenance-window-role-policy**。

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

1. [**Create policy**] (ポリシーの作成) を選択します。

   ポリシーに指定した名前をメモしておきます。次の手順、「[タスク 2: コンソールを使用して、メンテナンスウィンドウのカスタムサービスロールを作成する](#create-custom-role-console)」で参照します。

## タスク 2: コンソールを使用して、メンテナンスウィンドウのカスタムサービスロールを作成する
<a name="create-custom-role-console"></a>

前のタスクで作成したポリシーを、このタスクで作成するメンテナンスウィンドウサービスロールにアタッチします。ユーザーがメンテナンスウィンドウタスクを登録すると、タスク設定の一部としてこの IAM ロールが指定されます。このロールでアクセス許可が付与され、Systems Manager がユーザーに代わって、メンテナンスウィンドウでタスクを実行できます。

**重要**  
以前は、Systems Manager コンソールが、AWS マネージド IAM サービスリンクロール `AWSServiceRoleForAmazonSSM` を選択して、タスクのメンテナンスロールとして使用する機能を提供していました。メンテナンスウィンドウのタスクにおける、このロールとそれに関連するポリシーである `AmazonSSMServiceRolePolicy` の使用は推奨されなくなりました。このロールをメンテナンスウィンドウのタスクに使用している場合は、使用を中止することをお勧めします。代わりに、メンテナンスウィンドウのタスクが実行されたときに、Systems Manager と他の AWS のサービス間の通信を可能にする独自の IAM ロールを作成します。

以下の手順を使用して、Systems Manager がユーザーに代わって Maintenance Windows タスクを実行するための Maintenance Windows のカスタムサービスロールを作成します。前のタスクで作成したポリシーを、新しく作成したカスタムサービスロールにアタッチします。

**コンソールを使用して、メンテナンスウィンドウのカスタムサービスロールを作成する**

1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. ナビゲーションペインで **ロール** を選択してから、**ロールを作成する** を選択します。

1. **[Select trusted entity]** (信頼できるエンティティを選択) で、次のように選択します。

   1. **[信頼できるエンティティタイプ]** で、**[AWS サービス]** を選択してください。

   1. **[ユースケース]** で、**[Systems Manager]** を選択します

   1. **[Systems Manager]** を選択します。

      次の画像は、Systems Manager オプションの場所を示しています。  
![\[Systems Manager は、ユースケースのオプションの 1 つです。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/iam_use_cases_for_MWs.png)

1. [**次へ**] を選択します。

1. **[アクセス許可ポリシー]** 欄で、[タスク 1: コンソールを使用して、メンテナンスウィンドウサービスロール用にカスタムポリシーを作成する](#create-custom-policy-console) で作成したポリシー名を検索ボックスに入力します。名前の横にあるチェックボックスをオンにして、**[次へ]** を選択します。

1. **[Role name]** (ロール名) に、このロールが Maintenance Windows ロールであることを識別できる名前を入力します。例: **my-maintenance-window-role**。

1. (オプション) デフォルトのロールの説明を変更して、このロールの目的を反映させます。例: **Performs maintenance window tasks on your behalf**。

1. **[ステップ 1: 信頼できるエンティティを選択する]** で、**[信頼ポリシー]** に次のポリシーが表示されていることを確認します。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": "ssm.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. **[ステップ 2: アクセス許可を追加する]** で、[タスク 1: コンソールを使用して、メンテナンスウィンドウサービスロール用にカスタムポリシーを作成する](#create-custom-policy-console) で作成したポリシーが存在するのを確認します。

1. (オプション) **[ステップ3: タグを追加する]** で、タグとキーの値のペアを 1 つまたは複数追加して、このロールのアクセスを整理、追跡、または制御できます。

1. **[Create role]** (ロールの作成) を選択します。**ロール**ページが再度表示されます。

1. さきほど作成した IAM ロールの名前を選択します。

1. **[Summary]** (概要) エリアのロール名と **[ARN]** をコピーするか、書き留めます。アカウントのユーザーは、メンテナンスウィンドウを作成するときにこの情報を指定します。

## タスク 3: コンソールを使用して、特定のユーザーにメンテナンスウィンドウタスクを登録するアクセス許可を付与する
<a name="allow-maintenance-window-access-console"></a>

メンテナンスウィンドウのカスタムサービスロールにアクセスする許可をユーザーに付与すると、ユーサーはそのロールを自分のメンテナンスウィンドウタスクで使用できます。これは、Maintenance Windows ツール用に Systems Manager API コマンドを操作するために既に付与されているアクセス許可に追加されます。この IAM ロールは、メンテナンスウィンドウタスクを実行するために必要なアクセス許可を伝えます。このため、これらの IAM アクセス許可を渡す権限がないと、ユーザーは、カスタムサービスロールを使用してメンテナンスウィンドウにタスクを登録することができません。

メンテナンスウィンドウにタスクを登録する場合、実際のタスクオペレーションを実行するためのサービスロールを指定します。これは、サービスがユーザーに代わってタスクを実行するときに引き受けるロールです。その前に、タスク自体を登録するには、IAM `PassRole` ポリシーを IAM エンティティ (ユーザーまたはグループ) に割り当てます。これにより、これらのタスクをメンテナンスウィンドウに登録する一環として、タスク実行時に使用するロールを指定することを IAM エンティティに許可します。詳細については、「*IAM ユーザーガイド*」の「[AWS のサービスにロールを渡すアクセス許可をユーザーに付与](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)」を参照してください。

**メンテナンスウィンドウタスクの登録を許可するアクセス許可をユーザーに設定するには**

IAM エンティティ (ユーザー、ロール、またはグループ) に管理者権限が設定されている場合、その IAM ユーザーまたはロールはメンテナンスウィンドウにアクセスできます。管理者権限のない IAM エンティティの場合、管理者は IAM エンティティに次の権限を付与する必要があります。タスクをメンテナンスウィンドウに登録するために必要な最低限の権限です。
+ `AmazonSSMFullAccess` マネージドポリシー、または同等のアクセス許可を付与するポリシー。
+ 次の `iam:PassRole` および `iam:ListRoles` のアクセス許可。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "iam:PassRole",
              "Resource": "arn:aws:iam::111122223333:role/my-maintenance-window-role"
          },
          {
              "Effect": "Allow",
              "Action": "iam:ListRoles",
              "Resource": "arn:aws:iam::111122223333:role/"
          },
          {
              "Effect": "Allow",
              "Action": "iam:ListRoles",
              "Resource": "arn:aws:iam::111122223333:role/aws-service-role/ssm.amazonaws.com/"
          }
      ]
  }
  ```

------

  *my-maintenance-window-role* は、前に作成したカスタムメンテナンスウィンドウ向けサービスロールの名前を表します。

  *account-id* は、AWS アカウント の ID を表します。リソース `arn:aws:iam::account-id:role/` に対してこのアクセス許可を追加すると、ユーザーはメンテナンスウィンドウタスクを作成するときに、コンソールでカスタマーロールを表示および選択できます。`arn:aws:iam::account-id:role/aws-service-role/ssm.amazonaws.com/` に対してこのアクセス許可を追加すると、ユーザーはメンテナンスウィンドウタスクを作成するときに、コンソールで Systems Manager サービスにリンクされたロールを選択できます。

  アクセス権限を付与するにはユーザー、グループ、またはロールにアクセス許可を追加します。
  + AWS IAM アイデンティティセンター のユーザーとグループ:

    アクセス許可セットを作成します。「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)」の手順に従ってください。
  + IAM 内で、ID プロバイダーによって管理されているユーザー:

    ID フェデレーションのロールを作成します。詳細については *IAM ユーザーガイド* の [サードパーティー ID プロバイダー (フェデレーション) 用のロールを作成する](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) を参照してください。
  + IAM ユーザー:
    + ユーザーが担当できるロールを作成します。手順については *IAM ユーザーガイド* の [IAM ユーザーのロールの作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) を参照してください。
    + (お奨めできない方法) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加します。*IAM ユーザーガイド* の [ユーザー (コンソール) へのアクセス許可の追加](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) の指示に従います。

**コンソールを使用して、メンテナンスウィンドウタスクの登録を許可するグループのアクセス許可を設定するには**

1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. ナビゲーションペインで、**[ユーザーグループ]** を選択します。

1. グループリストで `iam:PassRole` のアクセス許可を割り当てるグループの名前を選択するか、必要に応じて新しいグループを作成します。

1. **[Permissions]** (アクセス許可) タブで、**[Add permissions, Create inline policy]** (アクセス許可の追加、インラインポリシーの作成) をクリックします。

1. **[ポリシーエディタ]** 欄で **[JSON]** を選択し、ボックスのデフォルトの内容を以下に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/my-maintenance-window-role"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::111122223333:role/"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::111122223333:role/aws-service-role/ssm.amazonaws.com/"
           }
       ]
   }
   ```

------

   *my-maintenance-window-role* は、前に作成したカスタムメンテナンスウィンドウロールの名前を表します。

   *account-id* は、AWS アカウント の ID を表します。リソース `arn:aws:iam::account-id:role/` に対してこのアクセス許可を追加すると、ユーザーはメンテナンスウィンドウタスクを作成するときに、コンソールでカスタマーロールを表示および選択できます。`arn:aws:iam::account-id:role/aws-service-role/ssm.amazonaws.com/` に対してこのアクセス許可を追加すると、ユーザーはメンテナンスウィンドウタスクを作成するときに、コンソールで Systems Manager サービスにリンクされたロールを選択できます。

1. [**次へ**] を選択します。

1. **[レビューと確認]** ページで、この `PassRole` ポリシーを識別するための名前を **[ポリシー名]** ボックスに入力し (**my-group-iam-passrole-policy** など)、**[ポリシーの作成]** を選択します。

## タスク 4: 指定されたユーザーがコンソールを使用してメンテナンスウィンドウタスクを登録できないようにする
<a name="deny-maintenance-window-access-console"></a>

メンテナンスウィンドウでタスクを登録したくない AWS アカウント 内のユーザーに対する `ssm:RegisterTaskWithMaintenanceWindow` アクセス許可を拒否できます。これにより、メンテナンスウィンドウのタスクを登録してはいけないユーザーに対して、追加の予防レイヤーが提供されます。

**コンソールを使用して、メンテナンスウィンドウタスクの登録を許可しないグループ向けのアクセス許可を設定するには**

1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. ナビゲーションペインで、**[ユーザーグループ]** を選択します。

1. グループのリストで、`ssm:RegisterTaskWithMaintenanceWindow` のアクセス許可を拒否するグループの名前を選択するか、もしくは必要に応じて新しいグループを作成します。

1. **[Permissions]** (アクセス許可) タブで、**[Add permissions, Create inline policy]** (アクセス許可の追加、インラインポリシーの作成) をクリックします。

1. **[ポリシーエディタ]** 欄で **[JSON]** を選択し、ボックスのデフォルトの内容を以下に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": "ssm:RegisterTaskWithMaintenanceWindow",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. [**次へ**] を選択します。

1. **[レビューと確認]** ページで、このポリシーを識別するための名前 (**my-groups-deny-mw-tasks-policy** など) を **[ポリシー名]** ボックスに入力し、**[ポリシーの作成]** を選択します。

# AWS CLI を使用したメンテナンスウィンドウへのアクセスの制御
<a name="configuring-maintenance-window-permissions-cli"></a>

以下の手順では、AWS Command Line Interface (AWS CLI) を使用して、AWS Systems Manager のツールである Maintenance Windows に必要なロールとアクセス許可を作成する方法について説明します。

**Topics**
+ [タスク 1: 信頼ポリシーとカスタマー管理ポリシーファイルを JSON 形式で作成する](#create-custom-policy-json-files-cli)
+ [タスク 2: AWS CLI を使用して、メンテナンスウィンドウ用にカスタムサービスロールを作成し確認する](#create-custom-role-cli)
+ [タスク 3: AWS CLI を使用して、特定のユーザーにメンテナンスウィンドウタスクを登録するアクセス許可を付与する](#allow-maintenance-window-access-cli)
+ [タスク 4: 指定したユーザーが AWS CLI を使用してメンテナンスウィンドウタスクを登録できないようにする](#deny-maintenance-window-access-cli)

## タスク 1: 信頼ポリシーとカスタマー管理ポリシーファイルを JSON 形式で作成する
<a name="create-custom-policy-json-files-cli"></a>

メンテナンスウィンドウのタスクには、ターゲットリソースで実行するために必要なアクセス許可を提供するための IAM ロールが必要です。アクセス許可は、ロールにアタッチされた IAM ポリシーを通じて提供されます。実行するタスクのタイプおよびその他の運用要件によって、このポリシーの内容が決定されます。ユーザーのニーズに対応する基本ポリシーを提供しています。メンテナンスウィンドウで実行するタスクおよびタスクのタイプによっては、このポリシーのすべてのアクセス許可が必要ではなく、追加のアクセス許可を含める必要がある場合があります。

このタスクでは、カスタムメンテナンスウィンドウロールに必要なアクセス許可を JSON ファイルのペアで指定します。後ほど [タスク 2: AWS CLI を使用して、メンテナンスウィンドウ用にカスタムサービスロールを作成し確認する](#create-custom-role-cli) に作成するロールに、このポリシーをアタッチします。

**信頼ポリシーとカスタマー管理ポリシーファイルを作成するには**

1. 次のトラストポリシーをテキストファイルに貼り付けます。次の名前と拡張子でファイルを保存します: **mw-role-trust-policy.json**。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 次の JSON ポリシーを別のテキストファイルに貼り付けます。最初のファイルを作成したのと同じディレクトリに、このファイルを次の名前と拡張子で保存します: **mw-role-custom-policy.json**。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:SendCommand",
                   "ssm:CancelCommand",
                   "ssm:ListCommands",
                   "ssm:ListCommandInvocations",
                   "ssm:GetCommandInvocation",
                   "ssm:GetAutomationExecution",
                   "ssm:StartAutomationExecution",
                   "ssm:ListTagsForResource",
                   "ssm:GetParameters"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "states:DescribeExecution",
                   "states:StartExecution"
               ],
               "Resource": [
                   "arn:aws:states:*:*:execution:*:*",
                   "arn:aws:states:*:*:stateMachine:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lambda:InvokeFunction"
               ],
               "Resource": [
                   "arn:aws:lambda:*:*:function:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "resource-groups:ListGroups",
                   "resource-groups:ListGroupResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "tag:GetResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/maintenance-window-role-name",
               "Condition": {
                   "StringEquals": {
                       "iam:PassedToService": [
                           "ssm.amazonaws.com"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 必要に応じて、アカウントで実行するメンテナンスタスク用に `mw-role-custom-policy.json` のコンテンツを変更します。変更した内容は、ユーザーが計画したオペレーションに固有のものです。

   例:
   + ワイルドカード (\$1) 修飾子を使用する代わりに、特定の関数およびステートマシンに Amazon リソースネーム (ARN) を指定できます。
   + AWS Step Functions タスクを実行する予定がない場合は、`states` のアクセス許可と (ARN) を削除できます。
   + AWS Lambda タスクを実行する予定がない場合は、`lambda` のアクセス許可と ARN を削除できます。
   + オートメーションタスクを実行する予定がない場合は、`ssm:GetAutomationExecution` および `ssm:StartAutomationExecution` のアクセス許可を削除できます。
   + タスクの実行に必要な追加のアクセス許可を追加します。たとえば、一部のオートメーションアクションは AWS CloudFormation スタックと連携します。そのため、`cloudformation:CreateStack`、`cloudformation:DescribeStacks`、および `cloudformation:DeleteStack` のアクセス許可が必要です。

     別の例: オートメーションランブックの `AWS-CopySnapshot` では、Amazon Elastic Block Store (Amazon EBS) スナップショットを作成するためのアクセス許可が必要です。このため、サービスロールに許可 `ec2:CreateSnapshot` が必要です。

     自動化ランブックで必要なロールの許可については、「[AWS Systems Manager Automation Runbook Reference](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-runbook-reference.html)」にあるランブックの説明を参照してください。

   必要な変更を行った後、ファイルを再保存します。

## タスク 2: AWS CLI を使用して、メンテナンスウィンドウ用にカスタムサービスロールを作成し確認する
<a name="create-custom-role-cli"></a>

前のタスクで作成したポリシーを、このタスクで作成するメンテナンスウィンドウサービスロールにアタッチします。ユーザーがメンテナンスウィンドウタスクを登録すると、タスク設定の一部としてこの IAM ロールが指定されます。このロールでアクセス許可が付与され、Systems Manager がユーザーに代わって、メンテナンスウィンドウでタスクを実行できます。

**重要**  
以前は、Systems Manager コンソールが、AWS マネージド IAM サービスリンクロール `AWSServiceRoleForAmazonSSM` を選択して、タスクのメンテナンスロールとして使用する機能を提供していました。メンテナンスウィンドウのタスクにおける、このロールとそれに関連するポリシーである `AmazonSSMServiceRolePolicy` の使用は推奨されなくなりました。このロールをメンテナンスウィンドウのタスクに使用している場合は、使用を中止することをお勧めします。代わりに、メンテナンスウィンドウのタスクが実行されたときに、Systems Manager と他の AWS のサービス間の通信を可能にする独自の IAM ロールを作成します。

このタスクでは、CLI コマンドを実行してメンテナンスウィンドウサービスロールを作成し、作成した JSON ファイルからポリシーコンテンツを追加します。

**AWS CLI を使用して、メンテナンスウィンドウ用にカスタムサービスロールを作成する**

1. `mw-role-custom-policy.json` と `mw-role-trust-policy.json` を保存したディレクトリで、AWS CLI を開いて次のコマンドを実行します。このコマンドにより、`my-maintenance-window-role` というメンテナンスウィンドウサービスロールが作成され、信頼ポリシーがアタッチされます。

------
#### [ Linux & macOS ]

   ```
   aws iam create-role \
       --role-name "my-maintenance-window-role" \
       --assume-role-policy-document file://mw-role-trust-policy.json
   ```

------
#### [ Windows ]

   ```
   aws iam create-role ^
       --role-name "my-maintenance-window-role" ^
       --assume-role-policy-document file://mw-role-trust-policy.json
   ```

------

   システムは以下のような情報を返します。

   ```
   {
       "Role": {
           "AssumeRolePolicyDocument": {
               "Version": "2012-10-17", 		 	 	 		 	 	 
               "Statement": [
                   {
                       "Action": "sts:AssumeRole",
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "ssm.amazonaws.com"
                       }
                   }
               ]
           },
           "RoleId": "AROAIIZKPBKS2LEXAMPLE",
           "CreateDate": "2024-08-19T03:40:17.373Z",
           "RoleName": "my-maintenance-window-role",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:role/my-maintenance-window-role"
       }
   }
   ```
**注記**  
`RoleName` と `Arn` を書き留めておきます。それらを次のコマンドに含めます。

1. 次のコマンドを実行して、カスタマー管理ポリシーをロールにアタッチします。*account-id* のプレースホルダーをお使いのアカウント AWS アカウント ID に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws iam attach-role-policy \
       --role-name "my-maintenance-window-role" \
       --policy-arn "arn:aws:iam::account-id:policy/mw-role-custom-policy.json"
   ```

------
#### [ Windows ]

   ```
   aws iam attach-role-policy ^
       --role-name "my-maintenance-window-role" ^
       --policy-arn "arn:aws:iam::account-id:policy/mw-role-custom-policy.json"
   ```

------

1. 次のコマンドを実行して、ロールが作成され、信頼ポリシーがアタッチされていることを確認します。

   ```
   aws iam get-role --role-name my-maintenance-window-role
   ```

   コマンドは以下のような情報を返します。

   ```
   {
       "Role": {
           "Path": "/",
           "RoleName": "my-maintenance-window-role",
           "RoleId": "AROA123456789EXAMPLE",
           "Arn": "arn:aws:iam::123456789012:role/my-maintenance-window-role",
           "CreateDate": "2024-08-19T14:13:32+00:00",
           "AssumeRolePolicyDocument": {
               "Version": "2012-10-17", 		 	 	 		 	 	 
               "Statement": [
                   {
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "ssm.amazonaws.com"
                       },
                       "Action": "sts:AssumeRole"
                   }
               ]
           },
           "MaxSessionDuration": 3600,
           "RoleLastUsed": {
               "LastUsedDate": "2024-08-19T14:30:44+00:00",
               "Region": "us-east-2"
           }
       }
   }
   ```

1. 次のコマンドを実行して、カスタマー管理ポリシーがロールにアタッチされていることを確認します。

   ```
   aws iam list-attached-role-policies --role-name my-maintenance-window-role
   ```

   コマンドは以下のような情報を返します。

   ```
   {
       "AttachedPolicies": [
           {
               "PolicyName": "mw-role-custom-policy",
               "PolicyArn": "arn:aws:iam::123456789012:policy/mw-role-custom-policy"
           }
       ]
   }
   ```

## タスク 3: AWS CLI を使用して、特定のユーザーにメンテナンスウィンドウタスクを登録するアクセス許可を付与する
<a name="allow-maintenance-window-access-cli"></a>

メンテナンスウィンドウのカスタムサービスロールにアクセスする許可をユーザーに付与すると、ユーサーはそのロールを自分のメンテナンスウィンドウタスクで使用できます。これは、Maintenance Windows ツール用に Systems Manager API コマンドを操作するために既に付与されているアクセス許可に追加されます。この IAM ロールは、メンテナンスウィンドウタスクを実行するために必要なアクセス許可を伝えます。このため、これらの IAM アクセス許可を渡す権限がないと、ユーザーは、カスタムサービスロールを使用してメンテナンスウィンドウにタスクを登録することができません。

メンテナンスウィンドウにタスクを登録する場合、実際のタスクオペレーションを実行するためのサービスロールを指定します。これは、サービスがユーザーに代わってタスクを実行するときに引き受けるロールです。その前に、タスク自体を登録するには、IAM `PassRole` ポリシーを IAM エンティティ (ユーザーまたはグループ) に割り当てます。これにより、これらのタスクをメンテナンスウィンドウに登録する一環として、タスク実行時に使用するロールを指定することを IAM エンティティに許可します。詳細については、「IAM ユーザーガイド」の「[AWS のサービスにロールを渡すアクセス権限をユーザーに付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)」を参照してください。

**AWS CLI を使用して、メンテナンスウィンドウタスクの登録を許可されているユーザー向けにアクセス許可を設定するには**

1. 次の AWS Identity and Access Management (IAM) ポリシーをコピーしてテキストエディタに貼り付け、`mw-passrole-policy.json` というファイル名および拡張子で保存します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/my-maintenance-window-role"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::111122223333:role/"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::111122223333:role/aws-service-role/ssm.amazonaws.com/"
           }
       ]
   }
   ```

------

   *my-maintenance-window-role* を、前に作成したカスタムメンテナンスウィンドウロールの名前に置き換えます。

   *accountId* を AWS アカウント の ID に置き換えます。リソース `arn:aws:iam::account-id:role/` に対してこのアクセス許可を追加すると、グループ内のユーザーは、メンテナンスウィンドウタスクを作成するときに、コンソールでカスタマーロールを表示および選択できます。`arn:aws:iam::account-id:role/aws-service-role/ssm.amazonaws.com/` に対してこのアクセス許可を追加すると、グループ内のユーザーは、メンテナンスウィンドウタスクを作成するときに、コンソールで Systems Manager サービスにリンクされたロールを選択できます。

1. AWS CLI を開きます。

1. IAM エンティティ (ユーザーまたはグループ) にアクセス許可を割り当てるかどうかに応じて、以下のいずれかのコマンドを実行します。
   + **IAM エンティティの場合:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-user-policy \
         --user-name "user-name" \
         --policy-name "policy-name" \
         --policy-document file://path-to-document
     ```

------
#### [ Windows ]

     ```
     aws iam put-user-policy ^
         --user-name "user-name" ^
         --policy-name "policy-name" ^
         --policy-document file://path-to-document
     ```

------

     *user-name* では、メンテナンスウィンドウにタスクを割り当てるユーザーを指定します。*policy-name* では、ポリシーを識別するための名前を入力します (例: **my-iam-passrole-policy**)。*path-to-document* では、ステップ 1 で保存したファイルへのパスを指定します。例: `file://C:\Temp\mw-passrole-policy.json`
**注記**  
Systems Manager コンソールを使用してメンテナンスウィンドウにタスクを登録するためのアクセス許可をユーザーに付与するには、`AmazonSSMFullAccess` ポリシー (または、メンテナンスウィンドウのタスクを対象として限られた範囲のアクセス許可を Systems Manager に提供する IAM ポリシー) もユーザーに割り当てる必要があります。`AmazonSSMFullAccess` ポリシーをユーザーに割り当てるには、次のコマンドを実行します。  

     ```
     aws iam attach-user-policy \
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" \
         --user-name "user-name"
     ```

     ```
     aws iam attach-user-policy ^
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" ^
         --user-name "user-name"
     ```
   + **IAM グループの場合**:

------
#### [ Linux & macOS ]

     ```
     aws iam put-group-policy \
         --group-name "group-name" \
         --policy-name "policy-name" \
         --policy-document file://path-to-document
     ```

------
#### [ Windows ]

     ```
     aws iam put-group-policy ^
         --group-name "group-name" ^
         --policy-name "policy-name" ^
         --policy-document file://path-to-document
     ```

------

     *group-name* では、メンテナンスウィンドウにタスクを割り当てるメンバーが属するグループを指定します。*policy-name* では、ポリシーを識別するための名前を入力します (例: **my-iam-passrole-policy**)。*path-to-document* では、ステップ 1 で保存したファイルへのパスを指定します。例: `file://C:\Temp\mw-passrole-policy.json`
**注記**  
Systems Manager コンソールを使用してメンテナンスウィンドウのタスクを登録するためのアクセス許可をグループのメンバーに付与するには、`AmazonSSMFullAccess` ポリシーもグループに割り当てる必要があります。このポリシーをグループに割り当てるには、次のコマンドを実行します。  

     ```
     aws iam attach-group-policy \
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" \
         --group-name "group-name"
     ```

     ```
     aws iam attach-group-policy ^
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" ^
         --group-name "group-name"
     ```

1. ポリシーがグループに割り当てられたことを確認するには、次のコマンドを実行します。

------
#### [ Linux & macOS ]

   ```
   aws iam list-group-policies \
       --group-name "group-name"
   ```

------
#### [ Windows ]

   ```
   aws iam list-group-policies ^
       --group-name "group-name"
   ```

------

## タスク 4: 指定したユーザーが AWS CLI を使用してメンテナンスウィンドウタスクを登録できないようにする
<a name="deny-maintenance-window-access-cli"></a>

メンテナンスウィンドウでタスクを登録したくない AWS アカウント 内のユーザーに対する `ssm:RegisterTaskWithMaintenanceWindow` アクセス許可を拒否できます。これにより、メンテナンスウィンドウのタスクを登録してはいけないユーザーに対して、追加の予防レイヤーが提供されます。

個別のユーザーまたはグループに `ssm:RegisterTaskWithMaintenanceWindow` アクセス許可を拒否するかどうかに応じ、以下の手順のいずれかを使用して、ユーザーがメンテナンスウィンドウにタスクを登録できないようにします。

**AWS CLI を使用して、メンテナンスウィンドウタスクの登録を許可されていないユーザー向けのアクセス許可を設定するには**

1. 次の IAM ポリシーをコピーしてテキストエディタに貼り付け、**deny-mw-tasks-policy.json** というファイル名および拡張子で保存します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": "ssm:RegisterTaskWithMaintenanceWindow",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. AWS CLI を開きます。

1. IAM エンティティ (ユーザーまたはグループ) にアクセス許可を割り当てるかどうかに応じて、以下のいずれかのコマンドを実行します。
   + **ユーザーの場合:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-user-policy \
         --user-name "user-name" \
         --policy-name "policy-name" \
         --policy-document file://path-to-document
     ```

------
#### [ Windows ]

     ```
     aws iam put-user-policy ^
         --user-name "user-name" ^
         --policy-name "policy-name" ^
         --policy-document file://path-to-document
     ```

------

     *user-name* では、メンテナンスウィンドウにタスクを割り当てられないようにするユーザーを指定します。*policy-name* では、ポリシーを識別するための名前を入力します (例: **my-deny-mw-tasks-policy**)。*path-to-document* では、ステップ 1 で保存したファイルへのパスを指定します。例: `file://C:\Temp\deny-mw-tasks-policy.json`
   + **グループの場合:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-group-policy \
         --group-name "group-name" \
         --policy-name "policy-name" \
         --policy-document file://path-to-document
     ```

------
#### [ Windows ]

     ```
     aws iam put-group-policy ^
         --group-name "group-name" ^
         --policy-name "policy-name" ^
         --policy-document file://path-to-document
     ```

------

     *group-name* では、メンテナンスウィンドウにタスクを割り当てられないようにするグループを指定します。*policy-name* では、ポリシーを識別するための名前を入力します (例: **my-deny-mw-tasks-policy**)。*path-to-document* では、ステップ 1 で保存したファイルへのパスを指定します。例: `file://C:\Temp\deny-mw-tasks-policy.json`

1. ポリシーがグループに割り当てられたことを確認するには、次のコマンドを実行します。

------
#### [ Linux & macOS ]

   ```
   aws iam list-group-policies \
       --group-name "group-name"
   ```

------
#### [ Windows ]

   ```
   aws iam list-group-policies ^
       --group-name "group-name"
   ```

------