

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

# 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"
   ```

------