はじめに
おきたです。
今回はAWS試験で一度は聞いたことがある、
S3 Gateway Endpointを用いて、インターネットを使用せずにデータの取得を行う
というのを実際に構築していきます。
思ったよりも難しかったので、ぜひぜひチャレンジしてみてください!
なぜ通信が可能なのか
通常、EC2からS3へアクセスするにはインターネットゲートウェイやNATゲートウェイが必要です。
しかし、S3 Gateway Endpointを利用すると、
VPCのルートテーブルにS3専用のルートが追加され、
AWS内部ネットワーク経由でS3にアクセスできるようになります。
そのため、インターネットを経由せずに安全に通信が可能になります。
構成
構成は上図のようにしていきます。
Private subnetにEC2を設置し、S3 Gateway Endpointを用いてS3に接続していきます。
この接続が確からしいかをSystems Manager Session Managerを用いて検証していきます。
流れ
・VPC作成
・サブネット作成
・ルートテーブルの作成
・IAMロールの作成
・EC2の作成
・S3バケット作成
・VPCエンドポイントの作成
・Systems Manager用のインターフェースエンドポイント作成
・EC2にSession Managerを用いて接続し構築が正しく行われているか検証
上記のようになっております。
(結構やることある)
Step1:VPCの作成
目的:専用のネットワークスペースを作成するため
AWSコンソールの検索窓にVPCと打ち、VPCを作成を押します。

このように適当な名前タグをつけ、IPv4 CIDRを10.0.0.0/16という風に設定します。
Step2:サブネット作成
目的:EC2を設置するための、ネットワークとは隔離されたスペースを作成するため
同じくVPCのところから、

上図のサブネットというところをクリックします。
サブネットを作成というところをクリックし、
VPC IDをStep1で作成したVPCに設定します。
サブネットを以下のように設定します。

| 設定 | 値 |
|---|---|
| VPC ID | Step1で作成したVPC ID |
| サブネット名 | Private-subnet |
| アベイラビリティーゾーン | 米国 |
| IPv4 サブネットCIDR ブロック | 10.0.0.2/24 |
としてください。
作成後、アクションのところで

図のようにDNSホスト名を有効化というところにチェックをいれてください。
(これやらないとSystems Managerのエンドポイント作成が出来ない)
Step3:ルートテーブルを設定
目的:どこを通信するかを指定するため
同じくVPCのところから、ルートテーブルというところを選択します。
見てみると、

図のような特に名前もついていないルートテーブルが存在しています。
(デフォルトのVPCのルートテーブルがある人は複数あるはずです)
このルートテーブルはVPCを作成すると自動的に作成されます。
このルートテーブルの下の方に、
「サブネットの関連付け」
という項目があります。

そこに、先ほどStep2で作成したサブネットを選択してください。
これによって、ルートテーブルとサブネットが紐づけられました。
Step4:IAMロールの作成
目的:Step5のEC2の作成に必要なIAMロールを作成
AWSコンソールの検索窓にIAMを打ち、ロールというところをクリックします。
ロールを作成を押し、設定します。
設定を以下のように行います。
ここに書かれていること以外はデフォルトの設定値で構いません。
| 設定 | 値 |
|---|---|
| 信頼されたエンティティタイプ | AWSのサービス |
| ユースケース | EC2 |
| 許可ポリシー① | AmazonS3FullAccess |
| 許可ポリシー② | AmazonSSMManagedInstanceCore |
〇AmazonS3FullAccess
S3に対するアクセスを全て許可するポリシー
これによってEC2がS3にアクセスできるようになります。
〇AmazonSSMManagedInstanceCore
Systems Managerを利用できるようにするためのポリシー
これによってEC2とSystems Managerがアクセスできるようになります。
Step5:EC2の作成
目的:S3にアクセスする+Systems Managerで検証をするため
AWSコンソールの検索窓にEC2を打ち、インスタンスというところをクリックします。
その画面にインスタンスを起動を押します。
設定は以下の通りです。ここに記載されている以外の物はデフォルト値で構いません。
| 設定 | 値 |
|---|---|
| 名前タグ | 適当な名前付け |
| キーペア | キーペア無しで続行 |
| 高度な詳細のIAMインスタンスプロファイル | Step4で作成したIAMロール |
Step6:S3バケットの作成
目的:アクセスする先をつくる
AWSコンソールの検索窓にS3と打ち、バケットを作成をクリックします。
設定値は全てデフォルトで構いません。
作成し、そのバケットのリンクを踏むと以下の図のようなサイトが出てきます。

今回は、S3にアクセスできたかを確認するため、S3バケットにオブジェクトを入れていきます。
内容は以下のようにして、ファイル名をindex.htmlとします。

このファイルをS3バケットにアップロードします。
これでS3バケットの作成および中身を入れることに成功しました。
Step7:S3用のVPCエンドポイントの作成
**目的:VPC外のS3と通信するため
同じくVPCのエンドポイントという欄をクリックします。

設定を以下のように行います。
| 設定 | 値 |
|---|---|
| 名前タグ | 適当な名前付け |
| サービス | com.amazonaws.us-east-1.s3 |
| ネットワーク設定 | Step2で作成したVPC |
| ルートテーブル | Step3で関連付けたルートテーブル |
これでエンドポイントを作成します。
Step8:Systems Manager用のインターフェースエンドポイント作成
目的:Systems Manager用のエンドポイントを作成
現時点で、PrivateサブネットにいるEC2がS3ゲートウェイエンドポイントを通じてS3のバケットに接続している。という構築が出来ているはずです。
一方でSystems Manager用のエンドポイントを作成しない限り、外部からEC2に接続することが出来ないため、Systems Manager用のエンドポイントを作成します。
AWSコンソールの検索窓にVPCと入れ、左側のバーでエンドポイントの箇所をクリックしてください。
今回は3種類のエンドポイントを作成してもらいます。
| エンドポイント | 役割 |
|---|---|
| com.amazonaws.us-east-1.ssm | Systems Manager本体のAPIがコマンド送信など行うため |
| com.amazonaws.us-east-1.ec2messages | EC2とSSMを連携するために必要 |
| com.amazonaws.us-east-1.ssmmessages | シェル操作を行うために必要 |
設定は以下の通りにします。
| 設定 | 値 |
|---|---|
| 名前タグ | 適当な名前 |
| サービス | さきほどのエンドポイント3種類のいずれか |
| ネットワーク設定 | Step2で作成したVPC |
| サブネット | Step2で作成したサブネット |
| セキュリティグループ | Step5で作成したセキュリティグループと同じもの |
にします。これを3種類作成してください。
Step9:EC2にSession Managerを用いて接続し構築が正しく行われているか検証
目的:きちんと構成が出来ているかを確認する
ようやく最後の段階に入ってきました。
AWSコンソールの検索窓にEC2を打ち、先ほど作成したEC2インスタンスにチェックマークを押します。
すると、接続ボタンが光るので、押してください。
SSM Session Managerという欄をクリックしてください。
ここのPing StatusとSession Manager connection statusが緑色であればOKです。
(赤色の場合はだいたい、セキュリティグループが原因だと思います)
接続すると、黒い画面に映ります。
ここで以下のコマンドを打ちます。
whoami
aws s3 ls
aws s3 ls s3://s3バケット名
aws s3 cp s3://s3バケット名/index.html -
それぞれ回答が得られればOKです!
以下の図のようになるはずです。
最後に
今回はS3ゲートウェイを用いた構築を行いました。
AWS試験では1行ほどで軽く済まされる内容でしたが、実践してみるとかなり歯ごたえがありました。
せひチャレンジしてみてください。
注意
使用後のリソースはすぐに削除するようにしてください!
(無駄に課金されてしまうので)




