SSM Automationを実行するIAM Roleを作成してみた
こんにちは、臼田です。
皆さん、自動化してますか?(挨拶
様々なことが出来るSystems Managerの中でも特に自動化で利用するのはSSM Automationです。
SSM Automationでは一連の処理を定義して自動化することができますが、処理の中でCloudFormationの実行なども可能です。
しかしながら、SSMで一般的に利用するIAM Role(サービスに紐付いたRoleのためService-Linked Roleと呼ばれます)では、SSM AutomationでCloudFormationを実行したりタグを付けたりという諸々の権限が足りません。
主にメンテンスウインドウからService-Linked Roleを使おうとするとハマるでしょう。(ハマりました)
というわけで、これを実行できるRoleを作成していきます。
Roleの作成
SSM AutomationのRole作成方法は下記に載っています。
方法 2: IAM を使用して、Automation のロールを設定 - AWS Systems Manager
それでは作っていきます。
マネジメントコンソールからIAMでRoleを開いて「ロールの作成」を押します。
まず「AWSサービス」から「EC2」を選択します。
ポリシーのフィルタで「ssm」を入力してAmazonSSMAutomationRole
を選択して次に進みます。
タグは設定してもしなくても大丈夫です。最後にロール名や説明などを入れ「ロールの作成」で作成します。
設定はこれで終わりではないです。続いて信頼関係を編集します。作成したRoleの詳細画面から「信頼関係」タブを開いて「信頼関係の編集」を押します。
Service
をリスト表記にして"ssm.amazonaws.com"
を追記します。(ここのjsonを丸コピしたほうがいいかもしれないです)「信頼ポリシーの更新」で更新します。
続いてPassRole権限の追加です。作成したRoleのARNをコピーして「アクセス権限」タブから「インラインポリシーの追加」を押します。
ビジュアルエディタからサービスでIAM
、アクションでPassRole
を選択して、リソースで「ARNの追加」を押します。
先程コピーしたRoleのARNを入力します。(Account等は自動的に置き換えられます)「追加」を押して、右下の「ポリシーの確認」を押します。
ポリシー名を適当に入れて「ポリシーの作成」を押します。
以上で参考ページにある手順は完了です。しかしながら実行するAutomationによってはこれでも足りない場合があります。
私はAWS-PatchAsgInstanceを実行するために下記ポリシーを追加する必要がありました。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "iam:CreatePolicy", "lambda:CreateFunction", "iam:GetRole", "iam:PassRole", "lambda:InvokeFunction", "iam:DeleteRolePolicy", "lambda:GetFunction", "iam:DeletePolicy", "iam:CreateRole", "iam:DeleteRole", "lambda:DeleteFunction", "iam:PutRolePolicy" ], "Resource": "*" } ] }
これをIAM Policyとして作成し、Roleに追加することで、うまくいくことが確認できると思います。
まとめ
SSM Automationを実行する際に使うRoleの設定方法を紹介しました。
普段検証等で自分の権限でAutomationを実行していると気づかないかもしれませんが、メンテンスウインドウ等から実行した場合には結構権限が必要であることがわかります。
このRoleを作成して、快適な自動化生活をエンジョイしましょう。