プライベートサブネットEC2インスタンスでセッションマネージャーを使うための経路確保確認
SSM Agent バージョン 3.0.222.0 、AmazonLinux2でした。SSMエージェントが対象のプライベートサブネットのEC2インスタンスにインストールされ、有効化(active)になっているか?バージョンは古くないか?それぞれ確認。
amazon-ssm-agent確認コマンド(AmazonLinux2)
sudo systemctl status amazon-ssm-agent
amazon-ssm-agent起動コマンド(2つのどちらでもいい)(AmazonLinux2)
sudo systemctl start amazon-ssm-agent
sudo systemctl enable amazon-ssm-agent
セッションマネージャーで使うVPCエンドポイント用のセキュリティグループをつくる
セッションマネージャーで使うVPCエンドポイント用のセキュリティグループを作ります。
インバウンドのHTTPS443でセッションマネージャーを使う「プライベートサブネットのEC2インスタンス」のセキュリティグループを送信元で指定したりVPCを指定する
アウトバウンドは全部なし、なにかポートが開放されていたら削除でOK.
SSM用VPCエンドポイントがあることを確認
以下4つが必要
- com.amazonaws.リージョン.ssm
- com.amazonaws.リージョン.ec2messages
- com.amazonaws.リージョン.ssmmessages
- com.amazonaws.リージョン.s3
1,2,3 はGatewayタイプではなくInterface型なのでセキュリティグループが必要。上記のセキュリティグループ1つをVPCエンドポイント3つに使い回す。
上記VPCエンドポイントの4つめに「com.amazonaws.リージョン.s3」があるので、プライベートサブネットのEC2インスタンスからS3バケットへの経路確保も必要。リージョンを指定するため、プライベートサブネットのEC2インスタンスでaws s3 lsコマンドが使えなくなり、以下のようにリージョン指定しなければならない。これハマってセキュリティグループまで開放しまくって検証した・・・。
aws s3 ls --region ap-northeast-1
のように東京などのリージョン指定したAWS CLIコマンドがプライベートサブネットのEC2インスタンスからS3に対して必要になる。
S3のVPCエンドポイント経路ができると、InternetGateway経由で外部ネットワークと通信出来なくても、プライベートサブネットのEC2インスタンスでyum check-updateできるケースが発生するので要注意。S3内にAWSが用意しているAmazonLinux2のyumリポジトリがあり、S3フルアクセスなどのIAMポリシーを使っていてS3バケット単位でアクセス制限していない場合に発生します。
このあたりから、「S3バケットポリシー」、「EC2のIAMロールのIAMポリシー」、「VPC エンドポイントのポリシー」、「S3のACLポリシー」、「S3アクセスポイントのアクセスポリシー」、(「KMSのキーポリシー」)など、ポリシー地獄になります。ポリシー間違えるとアプリ開発者やプロジェクト出資者などチームに大変な迷惑をかけてしまいます。内部の人たちから恨まれるだけで、情報漏洩が起きないなら、まだマシですが、慎重に作業をする必要があります。セキュリティポリシー管理系の見積は安く提示すると爆死しますので、くれぐれも安請け合いしないようにしましょう。
4 の「com.amazonaws.リージョン.s3」のVPCエンドポイントは、セキュリティグループではなく、「ルートテーブルの設定」と「VPCエンドポイントポリシー」の設定が必要。ルートテーブルは、プライベートサブネットのルートテーブルを選択し、VPCエンドポイントポリシーはフルアクセスを選ぶと、yum check-updateできるケースが発生する
プライベートサブネットのEC2インスタンスのセキュリティグループのセッションマネージャー経路確保
プライベートサブネットのEC2インスタンスのセキュリティグループでSSMのVPCエンドポイント(のセキュリティグループ)に送るため、アウトバウンドHTTPSで送信先「SSMのVPCエンドポイント用のセキュリティグループ」が必要。
プライベートサブネットのEC2インスタンスのIAMロールにIAMポリシーをアタッチ
余分なものも書いてますが、念の為に確認。
プライベートサブネットのAmazonLinux2のEC2インスタンスのIAMロールに以下のIAMポリシーをアタッチ
- AmazonSSMManagedInstanceCore
プライベートサブネットのWindows Server の EC2 インスタンスを Microsoft AD ディレクトリに結合
- AmazonSSMDirectoryServiceAccess
CloudWatchエージェント をインストールして実行する場合
- CloudWatchAgentServerPolicy
IAMポリシーのjsonの例