こんにちは、SCSKの網中です。
今回の記事は特定条件でのポリシー設計のお話になりますので、IAMポリシーをどうやって定義するのかご存じでない方は、前回の記事を読んでから本記事を読んでいただけますと幸いです。
はじめに
昨年11月頃でしょうか。AWS System Managerのフリートマネージャーを利用することでAWS のマネジメントコンソールからWindows OSにGUIベースでログインできるようになったことをご存知でしょうか?
以前までWindowsサーバにログインする場合は、わざわざ踏み台サーバを作成したり、PCを貸し出したりと運用が面倒でしたよね…フリートマネージャーを使えば、その面倒な運用から解放されます!!外部ベンダーが保守運用のためにWindows OSにログインする環境をお持ちの方は、ぜひぜひフリートマネージャーの利用をご検討ください!
今回は、フリートマネージャーを利用した運用をご検討中の方へ後押しとして、保守運用担当者様へ渡すIAMポリシーの必要最低限の権限を用意いたしましたので、最後まで読んでいただければ幸いです。
AWS System Manager(フリートマネージャーの構成)
前段階として、IAMの権限を使う前に簡単にフリートマネージャーの利用する際の構成について解説したいと思います。
図にするとだいたいこんな感じ。MFAのご利用はお好みで!
フリートマネージャーは、AWS マネジメントコンソールからOSにアクセスできる非常に便利なサービスです。
ただし、セキュアに接続が必要な場合はプライベートサブネットにVPCエンドポイントを作成して、インターネットを経由せずにアクセスできる経路を確立したりとひと手間必要となります。
そのあたりの詳細のセットアップ手順につきましては公式サイトをご参照ください。
動かない場合は、「SSM ハマりどころ」などで調べると良さげな記事が出てくるかと思います!
またフリートマネージャーの利用手順についても検索すればすぐ出てきますので、今回は省略させていただきます!
ポリシーの作成手順
ポリシー定義
さてさて、SSMのセットアップができたという前提で、保守運用担当者様向けのIAMポリシーを作成しましょう!
今回は以下のポリシーを作成しました。
下記JSONを、IAMのポリシー作成画面にコピペしてください!
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEc2andGUIconnect", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ssm-guiconnect:*", "ssm:DescribeInstanceProperties" ], "Resource": "*", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } }, { "Effect": "Allow", "Action": "ssm:StartSession", "Resource": [ "arn:aws:ec2:<リージョン>:<アカウントID>:instance/<インスタンスID>", "arn:aws:ssm:<リージョン>::document/AWS-StartPortForwardingSession" ] }, { "Effect": "Allow", "Action": [ "ssm:TerminateSession", "ssm:ResumeSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:username}-*" ] } ] }
作成したポリシーについては、適宜IAMユーザやIAMグループにアタッチしてください。
解説
ポリシーの簡単な解説をします。
① フリートマネージャーのインスタンス情報を参照したり、GUIの接続に必要な権限を付与しています。
② MFAが適用されているユーザかどうか確認して、適用されている場合にのみ①の権限が使えるようにしています。
③ セッションを開始する権限を付与しています。リソースでは、特定のインスタンスとポートフォワーディングするドキュメントを指定しています。<>囲いのところを編集して、自身のAWS環境に合うように設定してください。
④ セッションを停止させたり、再接続したりするための権限を付与しています。リソース部分については特に設定不要です。Resourceで記載している内容は、ユーザー名が入ったセッションのみ操作できるように指定しています。
最後に
できれば、他のインスタンスを見せないようにしたいと考えたのですが、ec2:DescribeInstancesがリージョンで切り分けることしかできず、ARNでリソースを特定することができないようです…念のために試してみたのですが、ARNで指定したりタグで指定すると全然動かなくなりました。。。詳細な理由については公式サイトで紹介されておりましたので、ご参照いただければと思います。
ちょっと残念に思いつつ、規模が大きくなってきたらシステム毎・管理体制ごとにアカウントを分けるのが必須だなと感じた今日この頃です。以上、フリートマネージャー利用者向けの必要最低限の権限紹介でした。