翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
静的 IP アドレスに関連付けられたエンドポイントを使用して、Amazon S3 の署名付き URL の生成とオブジェクトのダウンロードを統合する
Song Jin、Eunhye Jo、Jun Soung Lee、Amazon Web Services
概要
このパターンは、オブジェクトのダウンロード用に安全なカスタム署名付き URLs を作成することで、Amazon Simple Storage Service (Amazon S3) へのアクセスを簡素化します。このソリューションは、一意のドメインと静的 IP アドレスを持つ単一のエンドポイントを提供します。これは、API エンドポイントと Amazon S3 エンドポイントの両方を静的 IP アドレスを持つ統合ドメインに統合する必要があるお客様向けにカスタマイズされています。このユースケースでは、ユーザーが IP とドメインの許可リストのファイアウォールポリシーに従い、API アクセスを特定のドメインと IP アドレスに制限します。
このアーキテクチャでは AWS のサービス、Amazon API Gateway AWS Global Accelerator、 AWS Lambda Application Load Balancer AWS PrivateLink、Amazon S3 などのキーを使用します。この設計では、署名付き URLs を生成するための API と Amazon S3 エンドポイントを 1 つのドメインに一元化し、2 つの静的 IP アドレスを持つアクセラレーターにリンクします。そのため、ユーザーは署名付き URLs を簡単にリクエストし、静的 IP アドレスを持つ統合ドメインエンドポイントを介して Amazon S3 オブジェクトをダウンロードすることができます。
このアーキテクチャは、公共、医療、金融などの厳格なポリシーやコンプライアンス要件を持つお客様にとって特に有益です。
前提条件と制限
前提条件
アクティブな AWS アカウント
カスタムドメイン名のパブリックホストゾーン
AWS リージョン 選択した で AWS Certificate Manager (ACM) にインポートされたドメイン
制約事項
Amazon S3 バケット名は、エンドポイントのドメイン名と一致する必要があります。この要件は、Amazon S3 エンドポイントを単一の API エンドポイント経由で提供できるようにすることです。
API Gateway で使用されるカスタムドメイン名は、単一の API エンドポイントのドメイン名と一致する必要があります。
一部の AWS のサービス は、すべてで利用できるわけではありません AWS リージョン。リージョンの可用性については、AWS 「リージョン別のサービス
」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択します。
アーキテクチャ
次の図は、このパターンのターゲットアーキテクチャとワークフローを示しています。

この図は、次の概念とワークフローを示しています。
ユーザーは、カスタムドメイン名と関連する IP アドレスを使用して AWS Global Accelerator、 を通じて提供されるカスタムエンドポイントを使用して署名付き URL を生成するリクエストを開始します。
Lambda 関数は、カスタムエンドポイントを指す署名付き URL を生成します。生成された署名付き URL を含む 301 リダイレクトで応答します。リダイレクトされた署名付き URL を通じて、ユーザーは Global Accelerator を通じて提供されるカスタムエンドポイントを使用してオブジェクトを自動的にダウンロードします。
署名付き URL 生成とオブジェクトダウンロードワークフローのアーキテクチャ全体のコンポーネントは次のとおりです。
Global Accelerator による静的 IP アドレスのプロビジョニング。
アクセラレーターのエイリアスを A レコードとして Amazon Route 53 パブリックホストゾーンにカスタムドメイン名で登録します。
登録されたカスタムドメイン名と一致するバケット名を持つ Amazon S3 バケットの作成。
API Gateway と Amazon S3 サービスの VPC エンドポイントの作成。
Global Accelerator に接続するための内部向け Application Load Balancer の設定。
ACM 証明書がアタッチされた API Gateway のカスタムドメイン名の割り当て。
Lambda 関数と統合されたプライベート API Gateway のデプロイ。
Lambda 関数には、 AWS Identity and Access Management (IAM) ロールがアタッチされています (GetObject アクセス許可があります)。
ツール
AWS のサービス
「Amazon API Gateway」は、任意のスケールで REST、HTTP、WebSocket API を作成、公開、維持、監視、保護する上で役立ちます。
Application Load Balancer は、受信アプリケーショントラフィックを複数のアベイラビリティーゾーンの Amazon Elastic Compute Cloud (Amazon EC2) インスタンスなどの複数のターゲットに分散します。
AWS Certificate Manager (ACM) は、 AWS ウェブサイトとアプリケーションを保護するパブリックおよびプライベート SSL/TLS X.509 証明書とキーの作成、保存、更新に役立ちます。
AWS Cloud Development Kit (AWS CDK) は、コードで AWS クラウド インフラストラクチャを定義およびプロビジョニングするのに役立つソフトウェア開発フレームワークです。
AWS Global Accelerator は、複数の のエンドポイントをサポートするグローバルサービスです AWS リージョン。 AWS グローバルネットワーク経由で最適なエンドポイントにトラフィックを誘導するアクセラレーターを作成できます。これにより、世界中のユーザーが使用するインターネットアプリケーションの可用性とパフォーマンスが向上します。
AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
AWS PrivateLink は、仮想プライベートクラウド (VPCs) から VPC 外のサービスへの一方向のプライベート接続を作成するのに役立ちます。
Amazon Route 53 は、高可用性でスケーラブルな DNS Web サービスです。
Amazon Simple Storage Service (Amazon S3) は、どのようなデータ量であっても、データを保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。
その他のツール
「Terraform
」は、HashiCorpのinfrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。
コードリポジトリ
このパターンは、必要に応じて AWS CDK または Terraform を使用してデプロイできます。エピックセクションには、両方のデプロイ方法の手順が含まれています。このパターンのコードは、次の GitHub リポジトリで使用できます。
ベストプラクティス
本番環境のセキュリティを強化するには、Amazon Cognito などの認可メカニズムを実装して、
PresignedUrl
生成 API へのアクセスを制限することが重要です。最小特権の原則に従い、タスクの実行に必要な最小限のアクセス許可を付与します。詳細については、IAM ドキュメントの「最小特権の付与」と「セキュリティのベストプラクティス」を参照してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
ドメイン名を決定します。 | 統合 Amazon S3 エンドポイントのパブリックドメイン名を決定します。ドメイン名は Amazon S3 バケット名としても使用されます。 | AWS 管理者、ネットワーク管理者 |
パブリックホストゾーンを作成します。 | Amazon Route 53 でパブリックホストゾーンを作成します。そのドメイン名は、API Gateway で使用されるドメイン名と一致する必要があります。 | AWS 管理者、ネットワーク管理者 |
SSL 証明書を準備します。 | AWS Certificate Manager (ACM) を使用して、ウェブアプリケーションドメインの SSL 証明書をリクエストまたはインポートします。 | AWS 管理者、ネットワーク管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
Terraform 開発環境を設定します。 | 開発環境を設定するには、以下を実行します。
| AWS 管理者、クラウド管理者 |
|
次の点に注意してください。
| AWS 管理者、クラウド管理者 |
ネットワークリソースをプロビジョニングします。 | ネットワークリソースをプロビジョニングするには、次のコマンドを実行します。
| AWS 管理者、クラウド管理者 |
API Gateway、Amazon S3、Lambda をプロビジョニングします。 | ネットワークリソースをプロビジョニングするには、次のコマンドを使用します。
| AWS 管理者、クラウド管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS CDK 開発環境をセットアップします。 | 開発環境を設定するには、以下を実行します。
| AWS 管理者、クラウド管理者 |
| 定数変数のオプションを編集するには、次のコマンドを使用します。
コマンドで、各プレースホルダーを独自の情報に置き換えます。
| AWS 管理者、クラウド管理者 |
スタックをデプロイします。 | Virtual Private Cloud (VPC) 用とアプリケーション用の 2 つのスタックをデプロイするには、次のコマンドを使用します。
| AWS 管理者、クラウド管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
エンドポイントの IP アドレスを確認します。 | このパターンのドメインに静的 IP アドレスがあることを確認するには、次のコマンドを使用します。
| ネットワーク管理者 |
後でダウンロードできるテストファイルをアップロードします。 | テストファイルを Amazon S3 バケットの | AWS 管理者、クラウド管理者 |
API を呼び出して、署名付き URL を生成します。 | 署名付き URL を生成するには、ブラウザまたは API クライアント (Postman
| アプリ所有者 |
結果を確認します。 | 期待される結果は、301 (Moved Permanently) リダイレクトステータスコードを受け取ることです。このレスポンスには、テストファイルのダウンロードを自動的に開始する署名付き URL が含まれます。 | テストエンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
API Gateway、Amazon S3、および Lambda リソースを破棄します。 | リソースを削除するには、次のコマンドを使用します。
| AWS 管理者、クラウド管理者 |
ネットワークリソースを破棄します。 | ネットワークリソースを削除するには、次のコマンドを使用します。
| AWS 管理者、クラウド管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
スタックを破棄します。 | VPC スタックとアプリケーションスタックの両方を破棄するには、次のコマンドを使用します。
| AWS 管理者、クラウド管理者 |
Amazon S3 バケットを空にして削除します。 | デフォルトでは削除されていないオブジェクトの Amazon S3 バケットとログの Amazon S3 バケットを空にして削除します。 Amazon S3 バケット名は (AWS Command Line InterfaceAWS CLI) を使用してバケットを削除する場合は、次のコマンドを使用します。
| AWS 管理者、クラウド管理者 |
関連リソース
AWS ブログ