

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用加密保護傳輸中的資料
<a name="UsingEncryptionInTransit"></a>

Amazon S3 支援資料傳輸的 HTTP 和 HTTPS 通訊協定。HTTP 以純文字傳輸資料，而 HTTPS 透過使用 Transport Layer Security (TLS) 加密資料來新增安全層。TLS 可防止竊聽、資料竄改和man-in-the-middle攻擊。接受 HTTP 流量時，大多數實作會使用 HTTPS 和 TLS 傳輸中的加密來保護用戶端和 Amazon S3 之間傳輸的資料。

## TLS 1.2 和 TLS 1.3 支援
<a name="UsingEncryptionInTransit.TLS-support"></a>

針對所有 的所有 API 端點，Amazon S3 支援 HTTPS 連線的 TLS 1.2 和 TLS 1.3 AWS 區域。S3 會自動交涉用戶端軟體支援最強大的 TLS 保護，以及您存取的 S3 端點。目前的 AWS 工具 (2014 或更新版本），包括 AWS SDKs並 AWS CLI 自動預設為 TLS 1.3，您不需要採取任何動作。如果需要回溯相容於 TLS 1.2，您可以透過用戶端組態設定覆寫此自動交涉，以指定特定的 TLS 版本。使用 TLS 1.3 時，您可以選擇設定混合式後量子金鑰交換 (ML-KEM)，以向 Amazon S3 發出可保護量子的請求。如需詳細資訊，請參閱[為您的用戶端設定混合式後量子 TLS](pqtls-how-to.md)。

**注意**  
所有 S3 端點都支援 TLS 1.3，但 Amazon S3 和多區域存取點 AWS PrivateLink 除外。

## 監控 TLS 用量
<a name="UsingEncryptionInTransit.monitoring"></a>

您可以使用 Amazon S3 伺服器存取日誌或 AWS CloudTrail 來監控對 Amazon S3 儲存貯體的請求。兩個記錄選項都會記錄每個請求中使用的 TLS 版本和密碼套件。
+ **Amazon S3 伺服器存取日誌** – 伺服器存取日誌提供對儲存貯體提出之請求的詳細記錄。舉例來說，存取記錄資訊在安全與存取稽核中相當實用。如需詳細資訊，請參閱[Amazon S3 伺服器存取日誌格式](LogFormat.md)。
+ **AWS CloudTrail** – [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 是一種服務，可提供使用者、角色或服務所採取動作的記錄 AWS 。CloudTrail 會將 Amazon S3 的所有 API 呼叫當做事件來擷取。如需詳細資訊，請參閱[Amazon S3 CloudTrail 事件](cloudtrail-logging-s3-info.md)。

## 強制執行傳輸中的加密
<a name="UsingEncryptionInTransit.enforcement"></a>

強制執行傳輸到 Amazon S3 的資料加密是安全最佳實務。您可以透過各種政策機制，強制執行僅限 HTTPS 的通訊或使用特定 TLS 版本。其中包括 S3 儲存貯體 ([儲存貯體政策](bucket-policies.md))、[服務控制政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) (SCPs)、資源[控制政策 ](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)(RCPs) 和 [VPC 端點政策的 IAM 資源型政策](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)。

### 用於強制執行傳輸中加密的儲存貯體政策範例
<a name="UsingEncryptionInTransit.bucket-policy-example"></a>

您可以使用 [S3 條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-policy-keys)`s3:TlsVersion`，根據用戶端使用的 TLS 版本來限制對 Amazon S3 儲存貯體的存取。如需詳細資訊，請參閱[範例 6：需要最低 TLS 版本](amazon-s3-policy-keys.md#example-object-tls-version)。

**Example 使用 `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://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)，來檢查請求是否透過 HTTPS (TLS) 傳送。與先前的範例不同，此條件不會檢查特定 TLS 版本。如需詳細資訊，請參閱[限制僅 HTTPS 請求才能存取](example-bucket-policies.md#example-bucket-policies-use-case-HTTP-HTTPS-1)。

**Example 使用`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": "*"
    }
  ]
}
```

**以金鑰和更多範例為基礎的範例政策**  
您可以在一個政策的先前範例中使用這兩種類型的條件金鑰。如需詳細資訊和其他強制執行方法，請參閱 AWS Storage 部落格文章[使用 TLS1.2 或更新的 Amazon S3 強制執行傳輸中的加密。](https://aws.amazon.com/blogs/storage/enforcing-encryption-in-transit-with-tls1-2-or-higher-with-amazon-s3/)

# 搭配 Amazon S3 使用混合式後量子 TLS
<a name="UsingEncryptionInTransit.PQ-TLS"></a>

Amazon S3 支援 TLS 網路加密通訊協定的混合式後量子金鑰交換選項。當您使用 TLS 1.3 向 Amazon S3 端點提出請求時，您可以使用此 TLS 選項。S3 支援用於 TLS 工作階段的傳統密碼套件會對金鑰交換機制進行暴力破解攻擊，與目前的技術並不相容。不過，如果密碼編譯相關的量子電腦在未來變得實際，則 TLS 金鑰交換機制中使用的傳統密碼套件將容易遭受這些攻擊。目前，產業在混合式後量子金鑰交換上保持一致，該交換結合了傳統和後量子元素，以確保您的 TLS 連線至少與傳統密碼套件一樣強大。Amazon S3 目前支援混合 PQ-TLS，符合業界標準IANA規格

如果您開發的應用程式依賴於透過 TLS 連線傳遞的資料的長期機密性，您應該考慮在大規模量子電腦可供使用之前遷移到量子後密碼編譯的計劃。作為共同責任模型的一部分，S3 會在我們的服務端點上啟用規定人數安全密碼編譯。當瀏覽器和應用程式在其端啟用 PQ-TLS 時，S3 將選擇最強大的組態來保護傳輸中的資料。

**支援的端點類型和 AWS 區域**

Amazon S3 的後量子 TLS 適用於所有 AWS 區域。如需每個端點的 S3 端點清單 AWS 區域，請參閱《》中的 [Amazon Simple Storage Service 端點和配額](https://docs.aws.amazon.com/general/latest/gr/s3.html)*Amazon Web Services 一般參考*。

**注意**  
除了 Amazon S3 S3、多區域存取點和 S3 向量之外，所有 S3 AWS PrivateLink 端點都支援混合式後量子 TLS。

## 搭配 Amazon S3 使用混合式後量子 TLS
<a name="pqtls-details"></a>

您必須設定向 Amazon S3 提出請求的用戶端，以支援混合式後量子 TLS。設定 HTTP 用戶端測試環境或生產環境時，請注意下列資訊：

**傳輸中加密**

混合式後量子 TLS 僅用於傳輸中的加密。這可在資料從用戶端傳輸到 S3 端點時保護您的資料。這項新支援預設結合 Amazon S3 的伺服器端加密，利用AES-256演算法為客戶提供傳輸中和靜態的抗量子加密。如需 Amazon S3 中伺服器端加密的詳細資訊，請參閱[使用伺服器端加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)。

**支援的用戶端**

使用混合式後量子 TLS 需要使用支援此功能的用戶端。 AWS SDKs和工具具有不同語言和執行時間的密碼編譯功能和組態。若要進一步了解特定工具的後量子密碼編譯，請參閱[啟用混合後量子 TLS](https://docs.aws.amazon.com/payment-cryptography/latest/userguide/pqtls-details.html)。

**注意**  
對 Amazon S3 請求的 PQ-TLS 金鑰交換詳細資訊不適用於 AWS CloudTrail 事件或 S3 伺服器存取日誌。

## 進一步了解後量子 TLS
<a name="pqtls-see-also"></a>

如需使用混合式後量子 TLS 的詳細資訊，請參閱下列資源。
+ 若要了解 的後量子密碼編譯 AWS，包括部落格文章和研究論文的連結，請參閱 [的後量子密碼編譯 AWS](https://aws.amazon.com/security/post-quantum-cryptography/)。
+ 如需 s2n-tls 的資訊，請參閱 [全新開放原始碼 TLS 實作 s2n-tls 簡介](https://aws.amazon.com/blogs/security/introducing-s2n-a-new-open-source-tls-implementation/)和使用 [https://github.com/aws/s2n-tls/tree/main/docs/usage-guide](https://github.com/aws/s2n-tls/tree/main/docs/usage-guide)。
+ 如需有關 AWS 通用執行期 HTTP 用戶端的資訊，請參閱《 *AWS SDK for Java 2.x 開發人員指南*》中的[設定 AWS CRT 型 HTTP 用戶端](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/http-configuration-crt.html)。
+ 如需國家標準技術研究 (NIST) 的後量子加密法專案的資訊，請參閱[後量子加密法](https://csrc.nist.gov/Projects/Post-Quantum-Cryptography)。
+ 如需有關 NIST 後量子密碼編譯標準化的資訊，請參閱 [NIST 的後量子密碼編譯標準化](https://csrc.nist.gov/Projects/post-quantum-cryptography/post-quantum-cryptography-standardization)。

# 為您的用戶端設定混合式後量子 TLS
<a name="pqtls-how-to"></a>

若要搭配 Amazon S3 使用 PQ-TLS，您需要將用戶端設定為支援後量子金鑰交換演算法。此外，請確定您的用戶端支援混合式方法，將傳統的橢圓曲線密碼編譯與 ML-KEM (Module-Lattice-Based金鑰封裝機制） 等量子後演算法結合。

特定組態取決於您的用戶端程式庫和程式設計語言。如需詳細資訊，請參閱[啟用混合式後量子 TLS](https://docs.aws.amazon.com/payment-cryptography/latest/userguide/pqtls-details.html)。

## Java 2 的用戶端組態範例： AWS SDK
<a name="UsingEncryptionInTransit.PQ-TLS.configuration.java2-sdk"></a>

在此程序中，為 AWS 通用執行期 HTTP 用戶端新增 Maven 相依性。接下來，設定偏好後量子 TLS 的 HTTP 用戶端。然後，建立使用 HTTP 用戶端的 Amazon S3 用戶端。

**注意**  
已作為預覽版提供的 AWS 通用執行期 HTTP 用戶端，已於 2023 年 2 月正式推出。在該版本中，`tlsCipherPreference` 類別和 `tlsCipherPreference()` 方法參數由 `postQuantumTlsEnabled()` 方法參數取代。如果您在預覽期間使用此範例，則需要更新程式碼。

1. 將 AWS Common Runtime 用戶端新增至 Maven 相依性。我們建議使用最新的可用版本。

   例如，此陳述式會將 `2.30.22`版本的 AWS Common Runtime 用戶端新增至您的 Maven 相依性。

   ```
   <dependency>
       <groupId>software.amazon.awssdk</groupId>
       <artifactId>aws-crt-client</artifactId>
       <version>2.30.22</version>
   </dependency>
   ```

1. 若要啟用混合式後量子密碼套件，請將 AWS SDK for Java 2.x 新增至您的專案並初始化。然後如下列範例所示在 HTTP 用戶端啟用混合式後量子密碼套件。

   此程式碼使用 `postQuantumTlsEnabled()`方法參數來設定[AWS 常用的執行時間 HTTP 用戶端](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/http-configuration-crt.html)，其偏好建議的混合式後量子密碼套件 ECDH 搭配 ML-KEM。然後，它會使用設定的 HTTP 用戶端來建置 Amazon S3 非同步用戶端的執行個體 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html)。此程式碼完成後，`S3AsyncClient`執行個體上的所有 [Amazon S3 API](https://docs.aws.amazon.com/AmazonS3/latest/API/) 請求都會使用混合式後量子 TLS。
**重要**  
自 v2.35.11 起，發起人不再需要`.postQuantumTlsEnabled(true)`將 設定為為您的用戶端啟用混合式後量子 TLS。所有比 v2.35.11 更新的版本預設都會啟用後量子 TLS。

   ```
   // Configure HTTP client
   SdkAsyncHttpClient awsCrtHttpClient = AwsCrtAsyncHttpClient.builder()
             .postQuantumTlsEnabled(true)
             .build();
   
   // Create the Amazon S3 async client
   S3AsyncClient s3Async = S3AsyncClient.builder()
            .httpClient(awsCrtHttpClient)
            .build();
   ```

1. 使用混合式後量子 TLS 測試您的 Amazon S3 呼叫。

   當您在設定的 Amazon S3 用戶端上呼叫 Amazon S3 API 操作時，您的呼叫會使用混合式後量子 TLS 傳輸至 Amazon S3 端點。若要測試您的組態，請呼叫 Amazon S3 API，例如 `[ListBuckets](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html)`。

   ```
   ListBucketsResponse reponse = s3Async.listBuckets();
   ```

### 測試您的混合式後量子 TLS 組態
<a name="pqtls-testing"></a>

考慮在呼叫 Amazon S3 的應用程式上使用混合密碼套件執行下列測試。
+ 執行負載測試和基準測試。混合式密碼套件的執行方式不同於傳統的金鑰交換演算法。您可能需要調整連線逾時，以允許較長的交握時間。如果您在 AWS Lambda 函數內執行 ，請延長執行逾時設定。
+ 請嘗試從不同位置進行連線。視您請求佔用的網路路徑而定，您必須探索中繼主機、代理或採用深層封包檢查 (DPI) 的防火牆是否封鎖請求。這可能是因使用 TLS [ClientHello](https://tools.ietf.org/html/rfc5246#section-7.4.1.2) 部分中的新加密套件所導致，或因大型金要交換訊息所導致。如果您解決這些問題的能力有限，請與您的安全團隊或 IT 管理員合作，以更新相關組態並解除對於新 TLS 密碼套件的封鎖。