

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

# DynamoDB 預防性安全最佳實務
<a name="best-practices-security-preventative"></a>

下列最佳實務有助於預測並預防 Amazon DynamoDB 中的安全性事件。

**靜態加密**  
DynamoDB 使用儲存在 [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/) 中的加密金鑰，為資料表、索引、串流和備份中的所有使用者資料進行靜態加密。如此可透過保護您的資料免於發生未經授權的基礎儲存體存取，為資料提供另一層保護。  
您可以指定 DynamoDB 是否應使用 AWS 擁有的金鑰 （預設加密類型） AWS 受管金鑰、 或客戶受管金鑰來加密使用者資料。如需詳細資訊，請參閱 [Amazon DynamoDB 靜態加密](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EncryptionAtRest.html)。

**使用 IAM 角色驗證對 DynamoDB 的存取權**  
對於存取 DynamoDB 的使用者、應用程式和其他 AWS 服務，他們必須在其 AWS API 請求中包含有效的 AWS 登入資料。您不應將 AWS 登入資料直接存放在應用程式或 EC2 執行個體中。這些是不會自動輪換的長期憑證，因此如果遭到盜用，可能會對業務造成嚴重的影響。IAM 角色可讓您取得可用來存取 AWS 服務和資源的臨時存取金鑰。  
如需詳細資訊，請參閱[Amazon DynamoDB 的 Identity and Access Management](security-iam.md)。

**使用 IAM 政策進行 DynamoDB 基礎授權**  
授予許可時，會決定誰可以取得這些許可、可以取得哪些 DynamoDB API 的許可，以及可以對這些資源進行的特定動作。對降低錯誤或惡意意圖所引起的安全風險和影響而言，實作最低權限是其中關鍵。  
將許可政策連接至 IAM 身分 (即使用者、群組和角色)，藉此授予可在 DynamoDB 資源上執行操作的許可。  
您可以使用下列內容執行這項作業：  
+ [AWS 受管 （預先定義） 政策](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/using-identity-based-policies.html#access-policy-examples-aws-managed)
+ [客戶管理政策](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/using-identity-based-policies.html#access-policy-examples-for-sdk-cli)

**使用 IAM 政策條件進行精細定義存取控制**  
您在 DynamoDB 中授予許可時，可以指定條件，以決定許可政策的生效方式。對降低錯誤或惡意意圖所引起的安全風險和影響而言，實作最低權限是其中關鍵。  
您可以指定使用 IAM 政策授予許可時的條件。例如，您可以執行下列動作：  
+ 授予許可，允許使用者唯讀存取資料表或次要索引中的特定項目和屬性。
+ 授予許可，允許使用者根據該使用者的身分唯寫存取資料表中的特定屬性。
 如需詳細資訊，請參閱[使用 IAM 政策條件精細定義存取控制](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/specifying-conditions.html)。

**使用 VPC 端點和政策來存取 DynamoDB**  
如果只需要從虛擬私有雲端 (VPC) 內存取 DynamoDB，則應使用 VPC 端點來限制僅來自所需 VPC 的存取。這樣做可防止流量周遊開放式網際網路，也可防止流量受到該環境的限制。  
使用 DynamoDB 的 VPC 端點可讓您使用下列內容來控制和限制存取：  
+ VPC 端點政策：這些政策會套用在 DynamoDB VPC 端點上。它們可讓您控制和限制 API 對 DynamoDB 資料表的存取權限。
+ IAM 政策：利用使用連接至使用者、群組或角色的 `aws:sourceVpce` 條件，您可以強制要求對 DynamoDB 資料表進行的所有存取都要透過指定的 VPC 端點。
 如需詳細資訊，請參閱 [Amazon DynamoDB 端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-ddb.html)。

**考慮用戶端加密**  
我們建議您先規劃加密策略，再於 DynamoDB 中使用資料表。如果您將敏感或機密資料儲存在 DynamoDB，請考慮在計劃中加入用戶端加密。如此一來，您就能盡量靠近資料來源進行加密，並確保資料在整個生命週期受到保護。將您傳輸中和靜態的敏感資料加密，有助於確保您的明文資料不會被任何第三方取得。  
 [AWS Database Encryption SDK for DynamoDB](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/what-is-ddb-encrypt.html) 是一個軟體程式庫，可協助您保護在將資料表資料傳送至 DynamoDB 之前的安全性。其會加密、簽署、驗證和解密 DynamoDB 資料表項目。您可以控制要加密和簽署的屬性。

**主索引鍵設計考量**  
請勿在資料表與全域次要索引的[主索引鍵](HowItWorks.Partitions.md)中使用敏感名稱或純文字資料。主索引鍵名稱會顯示於資料表定義中。例如，任何擁有呼叫 [DescribeTable](WorkingWithTables.Basics.md#WorkingWithTables.Basics.DescribeTable) 權限的人都能查看主索引鍵名稱。主索引鍵值可能出現在 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 及其他日誌中。此外，DynamoDB 會使用金鑰值來分佈資料和路由請求， AWS 管理員可能會觀察這些值來維護服務的運作狀態。  
若需在資料表或 GSI 主索引鍵值中使用敏感資料，建議採用端到端用戶端加密。這可讓您執行鍵值查詢，同時確保資料在任何與 DynamoDB 相關的日誌中都不會以未加密形式出現。一種可行方法是使用 [AWS Database Encryption SDK for DynamoDB](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/client-server-side.html)，但這並非必要。若使用自訂解決方案，應一律採用足夠安全的加密演算法。請勿使用雜湊等非加密選項，因其在多數情境下安全性不足。  
若主索引鍵名稱包含敏感資訊，建議改用 ``pk`` 和 ``sk``。這是通用的最佳實務，可讓您的分割區索引鍵設計保持彈性。  
如果您擔心什麼是正確的選擇，請務必諮詢您的安全專家或 AWS 客戶團隊。