[AWS] VPCエンドポイント経由でEC2からS3へファイル転送
EC2 と S3 は同じネットワーク( VPC )内にいないので、通常の通信は、EC2 → インターネット → S3 となり、 S3 へのアクセスは、インターネットを介した通信となる。ここに VPC エンドポイントを設定すると、インターネットを介することなく、 EC2 – S3 間でセキュアな通信が可能となる。
また、インターネット経由での S3 のデータ転送には費用が生じるが、 EC2 と S3 が同じリージョンにあればデータ転送量は無料!異なるリージョンでも安くなるはず。
VPC エンドポイントについて
VPC とは
VPC とは Virtual Private Cloud の略。
Amazon VPC は、 AWS 上にある仮想ネットワークのこと。 Amazon VPC とインターネットの通信は、インターネットゲートウェイを介しておこなわれる。
EC2 と S3 のネットワーク構成
EC2 は、 VPC の中にあって、 S3 は VPC の外側にある。よって、デフォルトだと EC2 – S3 間のアクセスは、インターネット経由となる。
VPC エンドポイントというものを設置し、 AWS (のネットワーク)の内部で通信が可能となる。 (インターネットを経由しない。)
エンドポイントの作成
作成手順
VPC ダッシュボードから、「エンドポイント」をクリック
「エンドポイントの作成」をクリック
「 AWS サービス」を選択し、「 com.amazonaws.リージョン.s3 」を選択。
フィルターから「 s3 」で検索すると見つかる。VPC 選択欄には対象の EC2 インスタンスの VPC を、ルートテーブル ID には、利用するサブネットに関連づけられたルートテーブルを選択する。
ポリシーを設定する。デフォルトだと「フルアクセス」になっているので、「カスタム」を選択し、 ポリシー作成ツール で S3 の対象パケットのみ許可とするポリシーを作り、コピペする。
ポリシー作成ツールの使い方
「 Select Type of Policy 」で、「 VPC Endpoint Policy 」を選択。
「Principal」は、「AWS Service」で選択したサービスへのアクセスの許可 / 拒否するユーザーや IAM ロール、 AWS アカウントなどを指定できる。全てを指定するとき、決まりがなくてよくわからないときは ” * ” とする。
「Actions」は、特定の操作しかしないときは対象のアクションを選択。例えば、ファイルダウンロードのみなら「GetObject」だけとか。いろんな操作をするなら、「All Actions ('*’)」のチェックボックスにチェックを入れる。
「 Amazon Resource Name (ARN) 」には、 arn:aws:s3:::
の形式で入力しなければならない。複数あるときはカンマ( , )で区切る。
例) arn:aws:s3:::BUCKET-NAME,arn:aws:s3:::BUCKET-NAME/*
必要なものを記入・選択したら、「 Add Statement 」をクリック後、「 Generate Policy 」をクリック。
※ 入力値に不備があると、「 Add Statement 」ボタンはクリックできない。
テキストでポリシーが表示されるのでコピぺする。
{ "Statement": [ { "Sid": "Access-to-specific-bucket-only", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::my_secure_bucket", "arn:aws:s3:::my_secure_bucket/*"] } ] }
S3 へアクセス・ファイル転送
s3 バケットの中身を確認
$ aws s3 ls s3://BUCKET-NAME/
EC2 から S3 バケットにファイルを同期する
/hoge/hoge/uploads というフォルダ配下を S3 の uploadtest というフォルダ内に同期させる
$ aws sync /hoge/hoge/uploads s3://BUCKET-NAME/uploadtest
EC2 から S3 バケットにファイルをコピーする
$ aws s3 cp /FILE-PATH/FILE-NAME s3://BUCKET-NAME/FILE-PATH/FILE-NAME
S3 にコピーされるファイルの名前は、 s3://〜
以降で指定したファイル名となる。 (元のファイル名と異なる名前をつけるとファイル名が変わるよ。)