TLS 1.2 以上を使用していないお客様に Amazon S3 バケットへのアクセスを許可する方法を教えてください。

所要時間4分
0

お客様が TLS バージョン 1.2 以上を使用していないため、私の Amazon Simple Storage Service (Amazon S3) バケットに保存されているコンテンツにアクセスできません。お客様が TLS 1.0 または 1.1 を使用して Amazon S3 バケット内のコンテンツにアクセスできるようにしたいと考えています。

簡単な説明

AWS では、すべての AWS API エンドポイントで TLS 1.2 以降の使用を必須としています。引き続き AWS サービスに接続するには、TLS 1.0 または 1.1 を使用するすべてのソフトウェアを更新してください。

解決策

Amazon CloudFront では、お客様の CloudFront ディストリビューションと Amazon S3 の間で使用されている TLS プロトコルから顧客を抽象化することで、古い TLS バージョンを使用できます。

OAC を使用して CloudFront ディストリビューションを作成する

CloudFront では、S3 バケットへの匿名リクエストとパブリックリクエストをサポートできます。または、S3 バケットへのアクセスには署名付きリクエストを要求することによって、S3 バケットをプライベートにして、CloudFront のみからアクセスできるようにすることもできます。

S3 バケットへの匿名リクエストとパブリックリクエストをサポート

: 次の例では、すでに S3 バケットが使用中であることを前提としています。S3 バケットがない場合は、作成してください

CloudFront ディストリビューションを作成するには、以下の手順に従ってください。

  1. CloudFront コンソールを開きます。
  2. [Create Distribution] (ディストリビューションを作成) を選択します。
  3. [Origin] (オリジン) の [Origin domain] (オリジンドメイン) で、ドロップダウンリストから S3 バケットの REST API エンドポイントを選択します。
  4. [Viewer protocol policy] (ビューワープロトコルポリシー) で、[Redirect HTTP to HTTPS] (HTTP を HTTPS にリダイレクト) を選択します。
  5. [Allowed HTTP endpoints] (許可された HTTP エンドポイント) で、読み取りリクエストをサポートする [GET, HEAD, OPTIONS] を選択します。
  6. [Origin access] (オリジンアクセス) セクションで、[Origin access control settings (recommended)] (オリジンアクセスコントロール設定 (推奨)) を選択します。
  7. [Create control setting] (コントロール設定の作成) を選択し、デフォルトの名前を使用します。署名方法については、[Sign requests (recommended)] (署名リクエスト (推奨)) を選択し、**[Create] (作成) を選択します。**OAC を推奨設定にすると、閲覧者のリクエストは自動的に認証されます。
  8. ドロップダウンリストで ID を選択します。ディストリビューションが作成されたら、バケットポリシーを更新して OAC へのアクセスを制限します。
  9. [Default cache behavior] (デフォルトのキャッシュ動作) の**[Viewer]** (ビューワー)で、[Viewer Protocol Policy] (ビューワープロトコルポリシー) に**[Redirect HTTP to HTTPS]** (HTTP を HTTPS にリダイレクト) を選択し、他の設定はデフォルトのままにします。
  10. [Cache key and origin requests] (キャッシュキーとオリジンリクエスト) で、[Cache policy and origin request policy (recommended)] (キャッシュポリシーとオリジンリクエストポリシー (推奨)) を選択します。次に、[Cache policy] (キャッシュポリシー) には [CachingOptimized] を使用し、**[Origin request policy] (オリジンリクエストポリシー) **には [CORS-S3Origin] を使用します。
  11. [Create distribution] (ディストリビューションの作成) を選択し、ステータスが [Enabled] (有効) に更新されるまで待ちます。

S3 バケットへのアクセスに署名付きリクエストを必須にする

署名付きリクエストのみをサポートすることで、S3 バケットのセキュリティを強化できます。署名付きリクエストの場合、OAC は認証パラメータに従ってそれを S3 オリジンに転送し、S3 オリジンは匿名リクエストを拒否します。

S3 バケットにアクセスするための署名付きリクエストを必要とする CloudFront ディストリビューションを作成するには、以下の手順に従ってください。

  1. CloudFront コンソールを開きます。
  2. [Create Distribution] (ディストリビューションを作成) を選択します。
  3. [Origin] (オリジン) の [Origin domain] (オリジンドメイン) で、ドロップダウンリストから S3 バケットの REST API エンドポイントを選択します。
  4. [Viewer protocol policy] (ビューワープロトコルポリシー) で、[Redirect HTTP to HTTPS] (HTTP を HTTPS にリダイレクト) を選択します。
  5. [Allowed HTTP endpoints] (許可された HTTP エンドポイント) で、読み取りリクエストをサポートする [GET, HEAD, OPTIONS] を選択します。
  6. [Origin access] (オリジンアクセス) セクションで、[Origin access control settings (recommended)] (オリジンアクセスコントロール設定 (推奨)) を選択します。
  7. [Do not sign requests] (リクエストに署名しない) オプションをオンにして、署名なしのリクエストをすべてブロックします。
    **注:**署名されていないリクエストをブロックすると、すべてのお客様がリクエストに署名することが必要になります。これによって、S3 オリジンが権限を評価できるようになります。
  8. カスタムのキャッシュポリシーを作成して、お客様の Authorization ヘッダーをオリジンに転送します。
  9. [Cache key and origin requests] (キャッシュキーとオリジンリクエスト) で、[Cache policy and origin request policy (recommended))] (キャッシュポリシーとオリジンリクエストポリシー (推奨) を選択します。
  10. [Create Policy] (ポリシーの作成) を選択します。
  11. [Name] (名前) セクションにキャッシュポリシーの名前を入力します。
  12. [Cache key settings] (キャッシュキー設定) で [Headers] (ヘッダー) に移動し、[Include the following headers] (次のヘッダーを含める) を選択します。
  13. [Add Header] (ヘッダーの追加) で [Authorization] (認証) を選択します。
  14. [Create] (作成)を選択します。

お客様のセキュリティポリシーをコントロールする

CloudFront のセキュリティポリシーをコントロールするには、カスタムドメインが必要です。ディストリビューションには代替ドメイン名を指定するのがベストプラクティスです。AWS Certificate Manager (ACM) で設定されたカスタム SSL 証明書を使用することもベストプラクティスです。そうすることで、セキュリティポリシーをより細かくコントロールできるようになり、お客様は引き続き TLS 1.0 を使用できるようになります。詳細については、「ビューワーと CloudFront の間でサポートされているプロトコルと暗号」を参照してください。

デフォルトの***.cloudfront.net** ドメイン名を使用すると、CloudFront は自動的に証明書をプロビジョニングし、TLS 1.0 と 1.1 を許可するようにセキュリティポリシーを設定します。詳細については、「ディストリビューション設定」を参照してください。

CloudFront ディストリビューションの代替ドメイン名を設定するには、以下の手順に従います。

  1. AWS マネジメントコンソールにサインインし、CloudFront コンソールを開きます。
  2. 更新するディストリビューションの ID を選択します。
  3. [General] (一般) タブで [Edit] (編集) を選択します。
  4. [Alternate Domain Names (CNAMEs)] (代替ドメイン名 (CNAME)) で、[Add item] (項目を追加) を選択し、ドメイン名を入力します。
    **注:**リソースにアクセスするには、カスタムの正規名レコード (CNAME) を使用するのがベストプラクティスです。CNAME を使用すると、ルーティングをより細かくコントロールでき、お客様の移行がしやすくなります。
  5. カスタムSSL証明書の場合は、ドロップダウンリストから CNAME に対応するカスタム SSL 証明書を選択して、ディストリビューションに割り当てます。
    **注:**証明書のインストールの詳細については、「SSL/TLS 証明書を使用するように CloudFront ディストリビューションを設定するにはどうすればよいですか?」を参照してください。
  6. [Create distribution] (ディストリビューションの作成) を選択し、ステータスが [Enabled] (有効) に更新されるのを待ちます。

ディストリビューションを作成したら、OAC がバケットにアクセスできるようにする必要があります。次の手順を実行します。

  1. CloudFront コンソールページに移動し、CloudFront ディストリビューションを開きます。
  2. [Origins] (オリジン) タブを選択し、オリジンを選択して [Edit] (編集) をクリックします。
  3. [Copy policy] (ポリシーをコピー) を選択し、バケットアクセス許可を開いて、バケットポリシーを更新します。
  4. [Go to S3 bucket permissions] (S3 バケットアクセス許可に移動) ページを開きます。
  5. [Bucket policy] (バケットポリシー) で [Edit] (編集) を選択します。前にコピーしたポリシーを貼り付けて、[Save] (保存) を選択します。バケットポリシーで S3 からの読み取り以外にも必要な操作がある場合は、必要な API を追加できます。

カスタムドメイン名を使用する場合は、新しい CloudFront ディストリビューション URL を使用するように DNS エントリを変更します。カスタムドメイン名を使用しない場合は、新しい CloudFront ディストリビューション URL をユーザーに提供する必要があります。また、古い URL を使用するすべてのクライアントまたはデバイスソフトウェアを更新する必要があります。

AWS SDK を使用して Amazon S3 オブジェクトにアクセスする場合は、通常の HTTPS エンドポイントを使用するようにコードを変更する必要があります。また、新しい CloudFront URL を必ず使用してください。オブジェクトが公開されておらず、より詳細なコントロールが必要な場合は、署名付き URL と署名付き Cookie を使用してプライベートコンテンツを提供できます。

S3 の事前署名付き URL を使用してオブジェクトにアクセスする

ワークフローが S3 事前署名付き URL に依存している場合は、CloudFront ディストリビューションを使用してクエリを S3 オリジンに中継します。まず、必要なオブジェクトの事前署名付き URL を生成します。次に、URL 内のホストを CloudFront エンドポイントに置き換えて、CloudFront 経由で呼び出しを配信し、暗号化プロトコルを自動的にアップグレードします。事前署名付き URL をテストして生成するには、次の CLI コマンドを実行します。

aws s3 presign s3://BUCKET_NAME/test.jpg

出力例:

https://bucket_name.s3.us-east-1.amazonaws.com/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=%5b...%5d%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=%5b...%5d&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature">https://BUCKET_NAME.s3.us-east-1.amazonaws.com/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=[...]%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=[...]&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature    =[...]

次に、S3 URL を新しい CloudFront エンドポイントに変更します。たとえば、次のように S3 URL を置き換えます。

BUCKET_NAME.s3.eu-west-1.amazonaws.com

このエンドポイントの場合:

https://DISTRIBUTION_ID.cloudfront.net.

出力例:

https://<DISTRIBUTION_ID>.cloudfront.net /test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=[...]%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=[...]&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=[...]

事前署名付き URL を使用するには、次の CloudFront 設定を適用します。

  1. OAC の署名動作を [Do not sign requests] (リクエストに署名しない) に設定します。
  2. CloudFront ディストリビューションオリジンリクエストポリシーを [Origin request settings] (オリジンリクエスト設定): **[Headers – None; Cookies – None; Query strings – All] (ヘッダー – なし 、クッキー – なし、クエリ文字列 – すべて)**に設定します。
  3. キャッシュポリシーを [Headers – None; Cookies – None; Query strings – None] (ヘッダー – なし、クッキー – なし、クエリ文字列 – なし) に設定します。

AWS CloudTrail では、S3 の事前署名付き URL からダウンロードする GET リクエストが、事前署名付き URL を生成した ID として表示されます。

AWS SDK を使用して S3 オブジェクトにアクセスする場合は、事前署名付き URL を使用するようにコードを変更する必要があります。代わりに通常の HTTPS リクエストを使用し、新しい CloudFront URL を使用してください。

Amazon S3 用の最新の暗号化プロトコルを使用していることを確認する

新しいポリシーをテストするには、次の curl コマンドの例を使用して、特定のレガシープロトコルを使用する HTTPS リクエストを行います。

curl https://${CloudFront_Domain}/image.png -v --tlsv1.0 --tls-max 1.0

curl コマンドの例では、TLS 1.0 を使用して CloudFront にリクエストを行います。これにより、TLS 1.2 を使用して S3 オリジンに接続し、ファイルが正常にダウンロードされます。

AWS CloudTrail Lake を使用して、AWS サービスエンドポイントへの古い TLS 接続を識別するのがベストプラクティスです。CloudTrail Lake イベントデータストアは、管理イベントまたはデータイベントをキャプチャするように設定できます。CloudTrail Lake 内の対応する CloudTrail イベントでは TLS バージョン 1.2 が表示されています。これは、お客様が最新のセキュリティポリシーを使用して Amazon S3 に接続していることの確認になっています。

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ