閉域VPCにあるEC2インスタンスがSSMハイブリッドアクティベーションしパッチマネージャーを使えるようにする

記事タイトルとURLをコピーする

ハイブリッドアクティベーションはオンプレサーバを AWS Systems Manager (以下、SSM)で管理しちゃおうという機能です。ハイブリッドアクティベーションというカッコいい名前は、クラウドとオンプレの両方を登録できるところから来ているのだと思います。

また、この機能を使うとオンプレだけでなく、異なるAWSアカウントにあるEC2インスタンスも登録することができます。すると、単一アカウントのSSMで統一的に複数アカウントのEC2インスタンスを管理できます。

ハイブリッドアクティベーションの基本的な設定に関しては、過去記事をご覧ください。

blog.serverworks.co.jp

さて今回は、インターネット接続できないVPC(インターネットゲートウェイにデフォルトルートが向いていないVPC)にあるEC2インスタンスを、ハイブリッドアクティベーションし、パッチマネージャーを利用する構成を確認しました。

結論として「VPCエンドポイントを使えばオッケー」なのですが、ところどころハマりどころもあるので、以下ご参考にしていただければと思います。

閉域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エンドポイント追加しました。

f:id:swx-watanabe:20220201190527p:plain

サービス名 用途
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は不要です。 各用途についてもっと詳しいことが知りたい場合は、以下のドキュメントをご確認ください。

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 が登場します。

f:id:swx-watanabe:20220201192121p:plain

閉域VPCでパッチマネージャー(失敗)

さて、アクティベーションできましたが、真の目的はその先にあります。私はパッチマネージャーでこのEC2インスタンスを管理したいのです。

詳細な手順はまた省略しますが、mi-xxxxxxxxxxxxxxxx にパッチマネージャーでScanやInstallをしようとすると失敗とか保留中となります。

f:id:swx-watanabe:20220201192706p:plain

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)を追加します。

f:id:swx-watanabe:20220201193640p:plain

今回はGatewayタイプを選択しましたが、おそらくInterfaceタイプでも問題ないと思います。 Gatewayタイプの場合は、上記の画像のようにルートテーブルの設定も必要です。

ここまでできたら、再度パッチマネージャーを動作させます。

f:id:swx-watanabe:20220201193941p:plain

成功しました。

セキュリティグループのOutboundルールを最低限に

パッチマネージャーを使うには、例えばAmazon Linuxの場合、2種類のOutbound通信が必要になります。

  1. AWS管理のS3にあるyumリポジトリ等からファイルをダウンロードします
  2. SSMのエンドポイントへ通信をします

セキュリティグループのOutboundルールはデフォルトでは特に制限されていませんが、そのままでよければ、以降の設定は不要です。

もしOutboundルールを厳格に最低限に制限したい場合は、これらが必要となります。

f:id:swx-watanabe:20220202193036p:plain

タイプ ポート範囲 通信先
HTTP 80 SSMのVPCエンドポイントのセキュリティグループ
HTTPS 443 SSMのVPCエンドポイントのセキュリティグループ
HTTP 80 S3のマネージメントプレフィックスリスト
HTTPS 443 S3のマネージメントプレフィックスリスト

ちなみに私は最初はHTTPSだけ許可し、HTTPは許可しないで試しました。しかし、パッチマネージャーの処理中にタイムアウトが発生したので調べたところ、yum等でHTTPが使われていることがわかりました。

また、DNSも必要そうに感じますが、VPCのデフォルト設定でDNSを使っている限りは、セキュリティグループの設定で制限されることはありません。

あと、セキュリティグループに設定するS3のアドレスは自分で調べる必要があると思っていたのですが、実際はマネージメントプレフィックスリストというのが用意されていて、それを利用するだけで済みました。

f:id:swx-watanabe:20220202201758p:plain

まとめ

f:id:swx-watanabe:20210729191141p:plain

閉域VPCでもSSMハイブリッドアクティベーションし、パッチマネージャーを使うことができました。 VPCエンドポイントをうまく利用しましょう。

渡辺 信秀(記事一覧)

2017年入社 / 地味な内容を丁寧に書きたい