翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
VPC エンドポイントを介して Amazon S3 バケットへのプライベートアクセスを設定する
Martin Maritsch、Nicolas Jacob Baer、Gabriel Rodriguez Garcia、Shukhrat Khodjaev、Mohan Gowda Purushothama、Joaquin Rinaudo、Amazon Web Services
概要
Amazon Simple Storage Service (Amazon S3) では、署名付き URL を使用して、任意のサイズのファイルをターゲットユーザーと共有できます。デフォルトでは、Amazon S3 の署名付き URL には有効期限内にインターネットからアクセスできるため、使いやすくなっています。ただし、企業環境では、多くの場合、Amazon S3 の署名付き URL へのアクセスをプライベートネットワークのみに制限する必要があります。
このパターンは、インターネットトラバーサルなしでプライベートネットワークからの署名付き URL を使用して S3 オブジェクトを安全に操作するためのサーバーレスソリューションを示しています。このアーキテクチャでは、ユーザーは内部ドメイン名を介して Application Load Balancer にアクセスします。トラフィックは、Amazon API Gateway と S3 バケットの仮想プライベートクラウド (VPC) エンドポイントを介して内部でルーティングされます。この AWS Lambda 関数は、プライベート VPC エンドポイントを介してファイルをダウンロードするための署名URLs を生成し、機密データのセキュリティとプライバシーを強化するのに役立ちます。
前提条件と制限
前提条件
AWS アカウント 企業ネットワークに接続された にデプロイされたサブネットを含む VPC ( 経由など AWS Direct Connect)。
制限事項
S3 バケットにはドメインと同じ名前を付ける必要があるため、Amazon S3 バケットの命名規則を確認することをお勧めします。
このサンプルアーキテクチャには、デプロイされたインフラストラクチャのモニタリング機能は含まれていません。ユースケースでモニタリングが必要な場合は、AWS モニタリングサービスの追加を検討してください。
このサンプルアーキテクチャには、入力検証は含まれません。ユースケースで入力検証とセキュリティの強化が必要な場合は、 を使用して API AWS WAF を保護することを検討してください。
このサンプルアーキテクチャには、Application Load Balancer によるアクセスログ記録は含まれません。ユースケースでアクセスのログ記録が必要な場合は、ロードバランサーのアクセスログを有効にすることを検討してください。
バージョン
Python バージョン 3.11 以降
Terraform バージョン 1.6 以降
アーキテクチャ
ターゲットテクノロジースタック
ターゲットテクノロジースタックでは、次の AWS サービスが使用されます。
Amazon S3 は、ファイルのアップロード、ダウンロード、および保存を安全に行うために使用されるコアストレージサービスです。
Amazon API Gateway は、S3 バケットを操作するためのリソースとエンドポイントを公開します。このサービスは、データをダウンロードまたはアップロードするための署名付き URL を生成する役割を果たします。
AWS Lambda は、Amazon S3 からファイルをダウンロードするための署名付き URL を生成します。API ゲートウェイは Lambda 関数を呼び出します。
Amazon VPC は VPC 内にリソースをデプロイして、ネットワークを隔離します。VPC には、トラフィックフローを制御するためのサブネットとルーティングテーブルが含まれています。
Application Load Balancer は、受信トラフィックを API ゲートウェイまたは S3 バケットの VPC エンドポイントにルーティングします。これにより、企業ネットワークのユーザーは内部でリソースにアクセスできます。
Amazon S3 の VPC エンドポイントを使用すると、パブリックインターネットを経由することなく、VPC 内のリソースと Amazon S3 間の直接のプライベート通信が可能になります。
AWS Identity and Access Management (IAM) は、 AWS リソースへのアクセスを制御します。アクセス許可は、API およびその他のサービスとの安全なやり取りを確保するために設定されます。
ターゲットアーキテクチャ

この図表は、以下を示すものです:
企業ネットワークのユーザーは、内部ドメイン名を使用して Application Load Balancer にアクセスできます。企業ネットワークと のイントラネットサブネットの間に接続が存在することを前提としています AWS アカウント ( Direct Connect 接続経由など)。
Application Load Balancer は、受信トラフィックを API ゲートウェイにルーティングして、Amazon S3 または S3 バケットの VPC エンドポイントにデータをダウンロードまたはアップロードするための署名付き URL を生成します。どちらのシナリオでも、リクエストは内部でルーティングされるため、インターネットを経由する必要はありません。
API ゲートウェイは、S3 バケットを操作するためのリソースとエンドポイントを公開します。この例では、S3 バケットからファイルをダウンロードするためのエンドポイントを提供しますが、アップロード機能を提供するために拡張することもできます。
Lambda 関数は、パブリック Amazon S3 ドメインの代わりに Application Load Balancer のドメイン名を使用して Amazon S3 からファイルをダウンロードするための署名付き URL を生成します。
ユーザーは署名付き URL を受け取り、それと Application Load Balancer を使用して Amazon S3 からファイルをダウンロードします。ロードバランサーには、API を意図していないトラフィックを S3 バケットの VPC エンドポイントに送信するデフォルトルートが含まれています。
VPC エンドポイントは、カスタムドメイン名を使用して署名付き URL を S3 バケットにルーティングします。S3 バケットは、ドメインと同じ名前にする必要があります。
自動化とスケール
このパターンでは、Terraform を使用してコードリポジトリから AWS アカウントにインフラストラクチャをデプロイします。
ツール
ツール
「Python
」は汎用のコンピュータプログラミング言語です。 「Terraform
」は、HashiCorp の infrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。 AWS Command Line Interface (AWS CLI) は、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りするのに役立つオープンソースツールです。
コードリポジトリ
このパターンのコードは、https://github.com/aws-samples/private-s3-vpce
ベストプラクティス
このパターンのサンプルアーキテクチャでは、IAM アクセス許可を使用して API へのアクセスを制御します。有効な IAM 認証情報を持つユーザーは誰でも API を呼び出すことができます。より複雑な認可モデルが必要なユースケースにおいては、別のアクセスコントロールメカニズムの使用をご検討ください。
エピック
| タスク | 説明 | 必要なスキル |
|---|---|---|
AWS 認証情報を取得します。 | AWS 認証情報とアカウントへのアクセスを確認します。手順については、 AWS CLI ドキュメントの「設定と認証情報ファイルの設定」を参照してください。 | AWS DevOps、AWS 全般 |
リポジトリのクローン作成 | このパターンで提供されている GitHub リポジトリのクローンを作成します。
| AWS DevOps、AWS 全般 |
変数を設定します。 |
| AWS DevOps、AWS 全般 |
ソリューションをデプロイします。 |
| AWS DevOps、AWS 全般 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
テストファイルを作成します。 | Amazon S3 にファイルをアップロードして、ファイルのダウンロードのテストシナリオを作成します。Amazon S3 コンソール
| AWS DevOps、AWS 全般 |
署名付き URL 機能をテストします。 |
| AWS DevOps、AWS 全般 |
クリーンアップ | 不要になったリソースは必ず削除してください。
| AWS DevOps、AWS 全般 |
トラブルシューティング
| 問題 | ソリューション |
|---|---|
番号記号 (#) などの特殊文字を含む S3 オブジェクトキー名により URL パラメータが破損し、エラーが発生します。 | URL パラメータを適切にエンコードし、S3 オブジェクトキー名が Amazon S3 ガイドラインに従っていることを確認します。 |
関連リソース
Amazon S3:
Amazon API Gateway:
Application Load Balancer: