タダです.
前回記事同様プロキシ環境で EC2 から AWS CLI で VPC エンドポイント経由での別アカウント S3 につなぐ対応を行なったのでこの記事でその内容をまとめます.
関連記事 sadayoshi-tada.hatenablog.com
結論
接続元の EC2 の環境変数に次の設定を行って S3 への通信は VPC エンドポイントのみを経由するようにしました.
HTTP_PROXY=http://[プロキシの URL] HTTPS_PROXY=http://[プロキシの URL] NO_PEOXY=s3.ap-northeast-1.amazonaws.com,169.254.169.254
ドキュメントに記載の通り,VPC エンドポイントはアカウントまたぎであっても AWS 内部ネットワークを通じて対象のバケットに到達する仕様になっているので,セキュリティグループのアウトバウンドを解放してルートテーブルに S3 への経路を定義しておけばネットワークの設定は事足ります.
[ドキュメント抜粋]
エンドポイントには、Amazon S3 リソースにアクセスするエンドポイントの使用を管理するポリシーがあります。デフォルトのポリシーでは、任意の AWS アカウントからの認証情報を使用して、VPC 内のユーザーまたはサービスによる、任意の Amazon S3 リソースへのアクセスが許可されます。これには、VPC が関連付けられているアカウントとは別の AWS アカウントの Amazon S3 リソースが含まれます。
ハマったこと
NO_PEOXY
に S3 の接続先リージョンのサービスエンドポイント指定をしていないとプロキシに接続できないといったメッセージと 503 エラーが発生しました.トラブルシュートのページにもありますが,S3 への接続にプロキシを介する必要がない場合はNO_PROXY
を指定する必要があったので指定したら事象は解消しました.
[ドキュメント抜粋]
プロキシサーバーを使用する場合、必ず VPC 接続を許可してください。S3 にプロキシサーバーを使用しない場合、S3 バケットにアクセスする際に次のコマンドを使用してプロキシサーバーを迂回します。
export no_proxy = mybucket.s3-us-west-2.amazonaws.com
まとめ
プロキシ環境で VPC エンドポイント経由で別のアカウントのバケットにつなぐ時の対応をまとめました.アカウントまたぎでも通信が AWS 内部に閉じているのでインターネットへ通信を出したくないといった要件にも適用可能です.