暗号化を使用して転送中のデータを保護する - Amazon Simple Storage Service

暗号化を使用して転送中のデータを保護する

Amazon S3 は、データ転送用の HTTP プロトコルと HTTPS プロトコルの両方をサポートしています。HTTP はプレーンテキストでデータを送信し、HTTPS は Transport Layer Security (TLS) を使用してデータを暗号化することでセキュリティレイヤーを追加します。TLS は、盗聴、データ改ざん、中間者攻撃から保護します。HTTP トラフィックは受け入れられますが、ほとんどの実装では、HTTPS および TLS による転送中の暗号化を使用して、クライアントと Amazon S3 間のデータを保護します。

TLS 1.2 および TLS 1.3 のサポート

Amazon S3 は、すべての AWS リージョンのすべての API エンドポイントでの HTTPS 接続に TLS 1.2 および TLS 1.3 をサポートしています。S3 は、クライアントソフトウェアでサポートされている最も強力な TLS 保護と、アクセスしている S3 エンドポイントを自動的にネゴシエートします。AWS SDK と AWS CLI を含む現在の AWS ツール (2014 以降) は、デフォルトで自動的に TLS 1.3 になり、ユーザー側でアクションは必要ありません。TLS 1.2 との下位互換性が必要な場合は、この自動ネゴシエーションをクライアント設定で上書きして、特定の TLS バージョンを指定できます。TLS 1.3 を使用する場合、オプションでハイブリッドポスト量子キー交換 (ML-KEM) を設定して、Amazon S3 への量子耐性リクエストを行うことができます。詳細については、「クライアントのハイブリッドポスト量子 TLS の設定」を参照してください。

注記

TLS 1.3 は、Amazon S3 の AWS PrivateLink およびマルチリージョンアクセスポイントを除くすべての S3 エンドポイントでサポートされています。

TLS 使用状況のモニタリング

Amazon S3 サーバーアクセスログまたは AWS CloudTrail を使用して、Amazon S3 バケットへのリクエストをモニタリングできます。どちらのログ記録オプションも、各リクエストで使用される TLS バージョンと暗号スイートを記録します。

  • Amazon S3 サーバーアクセスログ – サーバーアクセスログ記録には、バケットに対して行われたリクエストの詳細が記録されます。例えば、アクセスのログ情報は、セキュリティやアクセスの監査に役立ちます。詳細については、「Amazon S3 サーバーアクセスログの形式」を参照してください。

  • AWS CloudTrailAWS CloudTrail は、ユーザーやロール、AWS サービスによって実行されたアクションを記録するサービスです。Amazon S3 へのすべての API コールをイベントとしてキャプチャします。詳細については、「Amazon S3 CloudTrail イベント」を参照してください。

転送時の暗号化の強制

Amazon S3 への転送中のデータの暗号化を適用することは、セキュリティのベストプラクティスです。さまざまなポリシーメカニズムを使用して、HTTPS のみの通信や特定の TLS バージョンの使用を適用できます。これには、S3 バケット (バケットポリシー)、サービスコントロールポリシー (SCP)、リソースコントロールポリシー (RCP)、VPC エンドポイントポリシーの IAM リソースベースのポリシーが含まれます。

転送中の暗号化を適用するためのバケットポリシーの例

S3 条件キー s3:TlsVersion を使用して、クライアントが使用する TLS バージョンに基づいて Amazon S3 バケットへのアクセスを制限できます。詳細については、「例 6: 最小の TLS バージョンの要求」を参照してください。

S3:TlsVersion 条件キーを使用して TLS 1.3 を適用するバケットポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyInsecureConnections", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket1/*" ], "Condition": { "NumericLessThan": { "s3:TlsVersion": "1.3" } } } ] }

S3 バケットポリシーの aws:SecureTransport グローバル条件キーを使用して、リクエストが HTTPS (TLS) 経由で送信されたかどうかを確認できます。前の例とは異なり、この条件は特定の TLS バージョンをチェックしません。詳細については、「HTTPS リクエストのみにアクセスを制限」を参照してください。

aws:SecureTransport グローバル条件キーを使用して HTTPS を適用するバケットポリシー
{ "Version":"2012-10-17", "Statement": [ { "Sid": "RestrictToTLSRequestsOnly", "Action": "s3:*", "Effect": "Deny", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket1/*" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } }, "Principal": "*" } ] }
両方のキーに基づくポリシーの例と、その他の例

前の例の両方のタイプの条件キーを 1 つのポリシーで使用できます。詳細とその他の適用アプローチについては、AWS ストレージブログ記事の「Amazon S3 で TLS1.2 以上を使用して転送中の暗号化を強制する」を参照してください。