AWS re:Postを使用することにより、以下に同意したことになります 利用規約

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] (項目を追加) を選択し、ドメイン名を入力します。
    注: リソースにアクセスするには、カスタムの Canonical Name Record (CNAME) を使用するのがベストプラクティスです。CNAME を使用すると、ルーティングをより細かく制御でき、お客様の移行がしやすくなります。
  5. [Custom SSL Certificate] (カスタム 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公式更新しました 5ヶ月前