ハイブリッドアクティベーションはオンプレサーバを AWS Systems Manager (以下、SSM)で管理しちゃおうという機能です。ハイブリッドアクティベーションというカッコいい名前は、クラウドとオンプレの両方を登録できるところから来ているのだと思います。
また、この機能を使うとオンプレだけでなく、異なるAWSアカウントにあるEC2インスタンスも登録することができます。すると、単一アカウントのSSMで統一的に複数アカウントのEC2インスタンスを管理できます。
ハイブリッドアクティベーションの基本的な設定に関しては、過去記事をご覧ください。
さて今回は、インターネット接続できないVPC(インターネットゲートウェイにデフォルトルートが向いていないVPC)にあるEC2インスタンスを、ハイブリッドアクティベーションし、パッチマネージャーを利用する構成を確認しました。
結論として「VPCエンドポイントを使えばオッケー」なのですが、ところどころハマりどころもあるので、以下ご参考にしていただければと思います。
- 閉域VPCでハイブリッドアクティベーション(失敗)
- 閉域VPCでハイブリッドアクティベーション(成功)
- 閉域VPCでパッチマネージャー(失敗)
- 閉域VPCでパッチマネージャー(成功)
- セキュリティグループのOutboundルールを最低限に
- まとめ
閉域VPCでハイブリッドアクティベーション(失敗)
まず、インターネットにつながらないVPCでハイブリッドアクティベーションを試すとどうなるのか確認してみましょう。EC2インスタンス内で sudo -E amazon-ssm-agent -register -code xxxxxxxxxxxxxxxxxxxx -id yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy -region ap-northeast-1
という感じにコマンドを打ちます。
Error occurred fetching the seelog config file path: open /etc/amazon/ssm/seelog.xml: no such file or directory Initializing new seelog logger New Seelog Logger Creation Complete 2022-02-01 03:55:11 WARN Could not read InstanceFingerprint file: InstanceFingerprint does not exist. 2022-02-01 03:55:11 INFO No initial fingerprint detected, generating fingerprint file... 2022-02-01 03:57:20 ERROR Registration failed due to error registering the instance with AWS SSM. RequestError: send request failed caused by: Post "https://ssm.ap-northeast-1.amazonaws.com/": dial tcp 52.119.221.73:443: i/o timeout
グローバルアドレスを持つ ssm.ap-northeast-1.amazonaws.com にアクセスできず、失敗しました。
閉域VPCでハイブリッドアクティベーション(成功)
VPCエンドポイントを利用し、SSMにアクセスできるようにしましょう。 細かい設定手順は省略しますが、下記画像のように3つのVPCエンドポイント追加しました。
サービス名 | 用途 |
---|---|
com.amazonaws.ap-northeast-1.ec2messages | SSMエージェントがSSMサービスを使う |
com.amazonaws.ap-northeast-1.ssmmessages | Session Managerで使う |
com.amazonaws.ap-northeast-1.ssm | SSMサービス全般で使う |
Session Managerを使わない場合は、ssmmessagesは不要です。 各用途についてもっと詳しいことが知りたい場合は、以下のドキュメントをご確認ください。
- AWS Systems Manager エンドポイントとクォータ - AWS 全般のリファレンス
- リファレンス: ec2messages、ssmmessages と他の API コール - AWS Systems Manager
VPCエンドポイントの作成が完了したら、再びアクティベーションコマンドを試します。 ログ出力の冒頭にErrorとあるので紛らわしいのですが、後続のログを読むと成功していることがわかります。成功すると、 mi-xxxxxxxxxxxxxxxx といったインスタンスIDを得ることができます。
Error occurred fetching the seelog config file path: open /etc/amazon/ssm/seelog.xml: no such file or directory Initializing new seelog logger New Seelog Logger Creation Complete 2022-02-01 05:38:17 INFO Successfully registered the instance with AWS SSM using Managed instance-id: mi-02117ab6c0a35dc0a
続いて、SSMエージェントのリスタートを sudo systemctl restart amazon-ssm-agent
とすると、フリートマネージャーの画面に先ほどの mi-xxxxxxxxxxxxxxxx が登場します。
閉域VPCでパッチマネージャー(失敗)
さて、アクティベーションできましたが、真の目的はその先にあります。私はパッチマネージャーでこのEC2インスタンスを管理したいのです。
詳細な手順はまた省略しますが、mi-xxxxxxxxxxxxxxxx にパッチマネージャーでScanやInstallをしようとすると失敗とか保留中となります。
EC2インスタンスのログ(/var/log/amazon/ssm/errors.log )を見てみると、S3へのアクセスに失敗しています。
2022-02-01 05:50:13 ERROR [Head @ s3util_dep.go.66] [ssm-document-worker] [b6e682d3-4e5c-433e-b9a7-8f3ee83fe66a] [DataBackend] [pluginName=aws:updateSsmAgent] UpdateS3Util HTTP HEAD request failed: url=http://amazon-ssm-ap-northeast-1.s3.amazonaws.com, error=Head "http://amazon-ssm-ap-northeast-1.s3.amazonaws.com": dial tcp 52.219.8.25:80: i/o timeout
閉域VPCでパッチマネージャー(成功)
VPCエンドポイントを利用し、S3にアクセスできるようにしましょう。 S3エンドポイント(com.amazonaws.ap-northeast-1.s3)を追加します。
今回はGatewayタイプを選択しましたが、おそらくInterfaceタイプでも問題ないと思います。 Gatewayタイプの場合は、上記の画像のようにルートテーブルの設定も必要です。
ここまでできたら、再度パッチマネージャーを動作させます。
成功しました。
セキュリティグループのOutboundルールを最低限に
パッチマネージャーを使うには、例えばAmazon Linuxの場合、2種類のOutbound通信が必要になります。
- AWS管理のS3にあるyumリポジトリ等からファイルをダウンロードします
- SSMのエンドポイントへ通信をします
セキュリティグループのOutboundルールはデフォルトでは特に制限されていませんが、そのままでよければ、以降の設定は不要です。
もしOutboundルールを厳格に最低限に制限したい場合は、これらが必要となります。
タイプ | ポート範囲 | 通信先 |
---|---|---|
HTTP | 80 | SSMのVPCエンドポイントのセキュリティグループ |
HTTPS | 443 | SSMのVPCエンドポイントのセキュリティグループ |
HTTP | 80 | S3のマネージメントプレフィックスリスト |
HTTPS | 443 | S3のマネージメントプレフィックスリスト |
ちなみに私は最初はHTTPSだけ許可し、HTTPは許可しないで試しました。しかし、パッチマネージャーの処理中にタイムアウトが発生したので調べたところ、yum等でHTTPが使われていることがわかりました。
また、DNSも必要そうに感じますが、VPCのデフォルト設定でDNSを使っている限りは、セキュリティグループの設定で制限されることはありません。
あと、セキュリティグループに設定するS3のアドレスは自分で調べる必要があると思っていたのですが、実際はマネージメントプレフィックスリストというのが用意されていて、それを利用するだけで済みました。
まとめ
閉域VPCでもSSMハイブリッドアクティベーションし、パッチマネージャーを使うことができました。 VPCエンドポイントをうまく利用しましょう。
渡辺 信秀(記事一覧)
2017年入社 / 地味な内容を丁寧に書きたい