3
1

More than 3 years have passed since last update.

インターネット接続を禁止しているLinux EC2へSSMエージェントを自動的にインストールする方法

Last updated at Posted at 2020-06-17

はじめに

AWS Session Managerを利用するには、EC2インスタンスへSSMエージェントを導入する必要があります。

Amazon Linux 2では初めからAMIにSSMエージェントが導入されていますが、
Red Hat Enterprise Linux等の他のLinux AMIを使用する場合は、
自前でSSMエージェントのインストール作業が必要になります。

Linux EC2インスタンスへSSMエージェント自動的にインストールし、
インスタンス起動後すぐにセッションマネージャーを使用可能にするコードを書いていた時に、
軽くハマった内容と解決方法をご紹介します。

やりたいこと

インターネット接続を禁止しているサブネットで起動するLinux EC2インスタンスへ
AWS所有のS3バケットからSSMエージェントを自動的にインストールしたい。

vpc.png

前提条件

試したこと

AWSのドキュメントやナレッジセンターにて、
Red Hat Enterprise LinuxインスタンスにSSMエージェントを手動でインストールする方法」や
Linuxインスタンス起動時にSSMエージェントを自動インストールする方法」が紹介されています。

まずはEC2起動時にSSMエージェントをAWS所有のS3バケットからダウンロード・インストールするように
ユーザーデータでこちらの記事のコマンドを実行させてみました。

#!/bin/bash
cd /tmp
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

ハマりポイント

さきほどのコマンドをそのまま実行すると
インターネットへ接続できるEC2ではインストールに成功します。

igw.png

しかし、インターネット接続を禁止しているEC2では
AWS所有のS3バケットからのRPMパッケージダウンロードに失敗してしまいました。

vpce.png

ちなみに、サブネットからS3 VPC Endpointへの疎通はこちらの方法で確認できます。

なぜダウンロードに失敗するのか

結論から言うと、S3 VPC Endpointを設置しているにもかかわらず、
S3へのアクセス時にS3 VPC Endpointを経由しておらずエラーになっていました。

原因はアクセスするS3のURLに、リージョンを含んでいなかったことです。
S3 VPC Endpointを使用するときには、アクセスするリージョンを明示する必要があります。

まず、リージョンを指定しないURL https://s3.amazonaws.com/ でS3にアクセスすると、
どのリージョンへ行くのか確認してみます。

$ nslookup s3.amazonaws.com
Server:         10.0.0.2
Address:        10.0.0.2#53

Non-authoritative answer:
s3.amazonaws.com        canonical name = s3-1.amazonaws.com.
Name:   s3-1.amazonaws.com
Address: 52.216.89.102

アクセスするIPアドレス(52.216.89.102)を確認してみると、
us-east-1なので米国東部 (バージニア北部)リージョンであることが確認できます。

us-east-1.png

SSMエージェントは特定のリージョンからダウンロードすることも可能ですので、
東京リージョンからダウンロードするURL https://s3.ap-northeast-1.amazonaws.com/ に打ち換えて確認してみます。

$ nslookup s3.ap-northeast-1.amazonaws.com
Server:         10.0.0.2
Address:        10.0.0.2#53

Non-authoritative answer:
Name:   s3.ap-northeast-1.amazonaws.com
Address: 52.219.4.96

アクセスするIPアドレス(52.219.4.96)を確認してみると、
ap-northeast-1なので東京リージョンであることが確認できます。

ap-northeast-1.png

次に、VPCのルートテーブルを確認してみます。
S3 VPC Endpoint作成時に関連付けたルートテーブルには、
自動的にS3 VPC Endpointへのルーティング設定が追加されます。

このルーティング設定を確認すると、
東京リージョンのS3 IPアドレス(52.219.0.0/20,52.219.136.0/22,52.219.16.0/22,52.219.68.0/22)
へのアクセスのみS3 VPC Endpointへ送信することが確認できます。
先ほど確認したIPアドレス(52.219.4.96)もこのレンジに含まれます。

routetable.png

解決方法

SSMエージェントのダウンロードURLでリージョン指定することにより、
S3 VPC Endpointへルーティングされるようになります。
これでインターネット接続を禁止しているサブネットからも
S3 VPC Endpoint経由でSSMエージェントのダウンロードが行えます。

S3バケットのURLでリージョンを明示的に指定
https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm

ユーザーデータ全体

#!/bin/bash
cd /tmp
sudo curl -O https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm
sudo yum -y localinstall amazon-ssm-agent.rpm
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

まとめ

EC2インスタンスを起動した直後からセッションマネージャーが使えるととても便利ですよね。

S3 VPC Endpoinの振る舞いをおさらいしつつ、
AWS Session Managerをインターネット接続を禁止しているEC2に自動的にインストールする方法と、
SSMエージェントのインストールパッケージをVPCエンドポイント経由でダウンロードする方法を紹介しました。

以上です。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1