AWS:EC2とS3をVPCエンドポイントで接続
目次
VPCエンドポイントってなに?
VPCエンドポイントって聞いたこと有りませんでした。
気がついたのがLightsail環境のインスタンスとS3をつなぎたいなと調べる中で出会いました。
Amazonのドキュメントはこちらにあります。
それによると・・・・
元祖wエンドポイントは仮想デバイスです。これらは水平にスケールされ、冗長で、可用性の高い VPC コンポーネントです。これにより、ネットワークトラフィックに可用性リスクや帯域幅の制約を課すことなく、VPC 内のインスタンスとサービス間の通信が可能になります。
VPC エンドポイントでは、AWS PrivateLink を使用する、サポートされている AWS サービスや VPC エンドポイントサービスに VPC をプライベートに接続できます。インターネットゲートウェイ、NAT デバイス、VPN 接続、または AWS Direct Connect 接続は必要ありません。VPC のインスタンスは、サービスのリソースと通信するためにパブリック IP アドレスを必要としません。VPC と他のサービス間のトラフィックは、Amazon ネットワークを離れません。
いちいちインターネットに出ることなく、プライベートネットワークで、VPC外のAWSサービスにアクセスができるようになります。
VPCエンドポイントには2種類あります
VPCエンドポイントの種類としては、インターフェイスタイプとゲートウェイタイプの2種類が存在ます。
ゲートウェイタイプは、S3とDynamoDBが対応しています。
インターフェイスタイプは、以外のサービスが対応しています。
他に、運用に直結する項目で、大きく違うのは通信量です。
ゲートウェイ型はエンドポイント経由の通信料は無料ですが、インターフェイス型は時間あたりのエンドポイントの利用料とGBあたりの通信料が掛かります。
内部通信やから、無料なんと違うんかいなって思ってると、痛い目にあうかもしれません(^^;
今回は、S3をつなぐので、ゲートウェイタイプのVPCエンドポイントの確認を行います。
今回の構成
今回は下記のような環境を構成しました。
※本ページでは、インスタンス、S3の基本的な設定は記載しません。
1)エンドポイントを作成します
下記の内容で作成します。
サービス名:com.amazonaws.ap-northeast-1.s3
VPC:test01-vpc
ルートテーブル:test01-vpc-rtb
ポリシー:フルアクセス
※test01-vpcとtest01-vpc-subnet01はインスタンス構築時に設定されたものです。
構築されるとtest01-vpc-rtbにs3へのサブネットが追加されます。
2)接続をしてみましょう!
たいていの「EC2とS3をVPCエンドポイントで接続する」って記事では、ここまでの作業をすれば接続ができるように書かれています。
ってことで、接続をしてみましょう!
$ aws s3 ls s3//ku-bucket01
Unable to locate credentials. You can configure credentials by running “aws configure”.
??つながらない??
aws configureを設定しろってことは、インターネットゲートウェイ経由で接続をしろって言われてます??
configureを設定すれば接続できることは確認はしたんですが、今回の目的とは違ってしまいます(^^;
IAMロールって知ってます?
いろいろ調べててもわからず、ヘルプを出したところ、「IAMロール」の設定が必要とのアドバイスをもらいました。
「AWS Identity and Access Management 」ってやつで、
AWS リソースへのアクセスを安全に管理するためのウェブサービスです。IAM を使用して、リソースを使用するために認証 (サインイン) され、許可された (アクセス許可を持つ) ユーザーを制御します。
ってこちらのドキュメントに記載されています。
リソースの制御に使用する認証の仕組みなんですね。。
こんなん、ググっても全然出てきませんでしたorz
ロールが作成されていないときこのような状態が表示されます。
1 2 3 4 5 6 7 |
$ aws configure list Name Value Type Location ---- ----- ---- -------- profile <not set> None None access_key <not set> None None secret_key <not set> None None region <not set> None None |
では、やってみましょう!
1)IAMロールの作成
インスタンスの画面から、アクション→インスタンスの設定→IAMロールを変更を選択します。
「インスタンスの概要」に”IAMロール”の項目がありますが、”-“な感じになっていると思います。
“新しいIAMロールを作成”を選択します。
「ロールを作成」ボタンをクリックします。
「ユースケースの選択」で”EC2″を選択して「アクセス制限」をクリックします。
ポリシーとして”AmazonS3FullAccess”をクリックして「タグ」をクリックします。
タグが必要なら入力して「確認」をクリックします。
※名称は”test01-s3-access-role“として作成をしました。
「ロールの作成」をクリックすると、IAMロールが作成されます。
2)IAMロールをアタッチします。
「IAMロールを変更」の画面を表示して、今作成したIAMロールを選択して、「保存」をクリックします。
先程の状態の表示が下記のように変わっています。
1 2 3 4 5 6 7 |
$ aws configure list Name Value Type Location ---- ----- ---- -------- profile <not set> None None access_key ****************3S4F iam-role secret_key ****************g17H iam-role region <not set> None None |
それと、インスタンス概要にアタッチしたIAMロールが表示されています。
3)S3に接続します。
$ aws s3 ls s3://ku-bucket01
2020-09-19 14:49:51 6 test.txt
無事表示されました!
やれやれ。。。