以下の手順では、AWS Command Line Interface (AWS CLI) を使用して、AWS Systems Manager のツールである Maintenance Windows に必要なロールとアクセス許可を作成する方法について説明します。
トピック
タスク 1: 信頼ポリシーとカスタマー管理ポリシーファイルを JSON 形式で作成する
メンテナンスウィンドウのタスクには、ターゲットリソースで実行するために必要なアクセス許可を提供するための IAM ロールが必要です。アクセス許可は、ロールにアタッチされた IAM ポリシーを通じて提供されます。実行するタスクのタイプおよびその他の運用要件によって、このポリシーの内容が決定されます。ユーザーのニーズに対応する基本ポリシーを提供しています。メンテナンスウィンドウで実行するタスクおよびタスクのタイプによっては、このポリシーのすべてのアクセス許可が必要ではなく、追加のアクセス許可を含める必要がある場合があります。
このタスクでは、カスタムメンテナンスウィンドウロールに必要なアクセス許可を JSON ファイルのペアで指定します。後ほど タスク 2: AWS CLI を使用して、メンテナンスウィンドウ用にカスタムサービスロールを作成し確認する に作成するロールに、このポリシーをアタッチします。
信頼ポリシーとカスタマー管理ポリシーファイルを作成するには
-
次のトラストポリシーをテキストファイルに貼り付けます。次の名前と拡張子でファイルを保存します:
mw-role-trust-policy.json
。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
次の JSON ポリシーを別のテキストファイルに貼り付けます。最初のファイルを作成したのと同じディレクトリに、このファイルを次の名前と拡張子で保存します:
mw-role-custom-policy.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": "*", "Condition": { "StringEquals": { "iam:PassedToService": [ "ssm.amazonaws.com" ] } } } ] }
-
必要に応じて、アカウントで実行するメンテナンスタスク用に
mw-role-custom-policy.json
のコンテンツを変更します。変更した内容は、ユーザーが計画したオペレーションに固有のものです。例:
-
ワイルドカード (*) 修飾子を使用する代わりに、特定の関数およびステートマシンに 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 オートメーションランブックレファレンス」にあるランブックの説明を参照してください。
必要な変更を行った後、ファイルを再保存します。
-
タスク 2: AWS CLI を使用して、メンテナンスウィンドウ用にカスタムサービスロールを作成し確認する
前のタスクで作成したポリシーを、このタスクで作成するメンテナンスウィンドウサービスロールにアタッチします。ユーザーがメンテナンスウィンドウタスクを登録すると、タスク設定の一部としてこの IAM ロールが指定されます。このロールでアクセス許可が付与され、Systems Manager がユーザーに代わって、メンテナンスウィンドウでタスクを実行できます。
重要
以前は、Systems Manager コンソールが、AWS マネージド IAM サービスリンクロール AWSServiceRoleForAmazonSSM
を選択して、タスクのメンテナンスロールとして使用する機能を提供していました。メンテナンスウィンドウのタスクにおける、このロールとそれに関連するポリシーである AmazonSSMServiceRolePolicy
の使用は推奨されなくなりました。このロールをメンテナンスウィンドウのタスクに使用している場合は、使用を中止することをお勧めします。代わりに、メンテナンスウィンドウのタスクが実行されたときに、Systems Manager と他の AWS のサービス間の通信を可能にする独自の IAM ロールを作成します。
このタスクでは、CLI コマンドを実行してメンテナンスウィンドウサービスロールを作成し、作成した JSON ファイルからポリシーコンテンツを追加します。
AWS CLI を使用して、メンテナンスウィンドウ用にカスタムサービスロールを作成する
-
mw-role-custom-policy.json
とmw-role-trust-policy.json
を保存したディレクトリで、AWS CLI を開いて次のコマンドを実行します。このコマンドにより、my-maintenance-window-role
というメンテナンスウィンドウサービスロールが作成され、信頼ポリシーがアタッチされます。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
を書き留めておきます。それらを次のコマンドに含めます。 -
次のコマンドを実行して、カスタマー管理ポリシーをロールにアタッチします。
account-id
のプレースホルダーをお使いのアカウント AWS アカウント ID に置き換えます。aws iam attach-role-policy \ --role-name "my-maintenance-window-role" \ --policy-arn "arn:aws:iam::
account-id
:policy/mw-role-custom-policy.json
" -
次のコマンドを実行して、ロールが作成され、信頼ポリシーがアタッチされていることを確認します。
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" } } }
-
次のコマンドを実行して、カスタマー管理ポリシーがロールにアタッチされていることを確認します。
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 を使用して、特定のユーザーにメンテナンスウィンドウタスクを登録するアクセス許可を付与する
メンテナンスウィンドウのカスタムサービスロールにアクセスする許可をユーザーに付与すると、ユーサーはそのロールを自分のメンテナンスウィンドウタスクで使用できます。これは、Maintenance Windows ツール用に Systems Manager API コマンドを操作するために既に付与されているアクセス許可に追加されます。この IAM ロールは、メンテナンスウィンドウタスクを実行するために必要なアクセス許可を伝えます。このため、これらの IAM アクセス許可を渡す権限がないと、ユーザーは、カスタムサービスロールを使用してメンテナンスウィンドウにタスクを登録することができません。
メンテナンスウィンドウにタスクを登録する場合、実際のタスクオペレーションを実行するためのサービスロールを指定します。これは、サービスがユーザーに代わってタスクを実行するときに引き受けるロールです。その前に、タスク自体を登録するには、IAM PassRole
ポリシーを IAM エンティティ (ユーザーまたはグループ) に割り当てます。これにより、これらのタスクをメンテナンスウィンドウに登録する一環として、タスク実行時に使用するロールを指定することを IAM エンティティに許可します。詳細については、「IAM ユーザーガイド」の「AWS のサービスにロールを渡すアクセス権限をユーザーに付与する」を参照してください。
AWS CLI を使用して、メンテナンスウィンドウタスクの登録を許可されているユーザー向けにアクセス許可を設定するには
-
次の AWS Identity and Access Management (IAM) ポリシーをコピーしてテキストエディタに貼り付け、
mw-passrole-policy.json
というファイル名および拡張子で保存します。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::
account-id
:role/my-maintenance-window-role
" }, { "Effect": "Allow", "Action": "iam:ListRoles", "Resource": "arn:aws:iam::account-id
:role/" }, { "Effect": "Allow", "Action": "iam:ListRoles", "Resource": "arn:aws:iam::account-id
:role/aws-service-role/ssm.amazonaws.com/" } ] }my-maintenance-window-role
を、前に作成したカスタムメンテナンスウィンドウロールの名前に置き換えます。accountId
を AWS アカウント の ID に置き換えます。リソースarn:aws:iam::
に対してこのアクセス許可を追加すると、グループ内のユーザーは、メンテナンスウィンドウタスクを作成するときに、コンソールでカスタマーロールを表示および選択できます。account-id
:role/arn:aws:iam::
に対してこのアクセス許可を追加すると、グループ内のユーザーは、メンテナンスウィンドウタスクを作成するときに、コンソールで Systems Manager サービスにリンクされたロールを選択できます。account-id
:role/aws-service-role/ssm.amazonaws.com/ -
AWS CLI を開きます。
-
IAM エンティティ (ユーザーまたはグループ) にアクセス許可を割り当てるかどうかに応じて、以下のいずれかのコマンドを実行します。
-
IAM エンティティの場合:
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
" -
IAM グループの場合:
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
-
-
ポリシーがグループに割り当てられたことを確認するには、次のコマンドを実行します。
aws iam list-group-policies \ --group-name "
group-name
"
タスク 4: 指定したユーザーが AWS CLI を使用してメンテナンスウィンドウタスクを登録できないようにする
メンテナンスウィンドウでタスクを登録したくない AWS アカウント 内のユーザーに対する ssm:RegisterTaskWithMaintenanceWindow
アクセス許可を拒否できます。これにより、メンテナンスウィンドウのタスクを登録してはいけないユーザーに対して、追加の予防レイヤーが提供されます。
個別のユーザーまたはグループに ssm:RegisterTaskWithMaintenanceWindow
アクセス許可を拒否するかどうかに応じ、以下の手順のいずれかを使用して、ユーザーがメンテナンスウィンドウにタスクを登録できないようにします。
AWS CLI を使用して、メンテナンスウィンドウタスクの登録を許可されていないユーザー向けのアクセス許可を設定するには
-
次の IAM ポリシーをコピーしてテキストエディタに貼り付け、
deny-mw-tasks-policy.json
というファイル名および拡張子で保存します。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ssm:RegisterTaskWithMaintenanceWindow", "Resource": "*" } ] }
-
AWS CLI を開きます。
-
IAM エンティティ (ユーザーまたはグループ) にアクセス許可を割り当てるかどうかに応じて、以下のいずれかのコマンドを実行します。
-
ユーザーの場合:
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
-
グループの場合:
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
-
-
ポリシーがグループに割り当てられたことを確認するには、次のコマンドを実行します。
aws iam list-group-policies \ --group-name "
group-name
"