

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

# AWS Secrets Manager 最佳實務
<a name="best-practices"></a>

Secrets Manager 提供許多安全功能，供您在開發和實作自己的安全政策時考慮。以下最佳實務為一般準則，並不代表完整的安全解決方案。這些最佳實務可能不適用或無法滿足您的環境需求，因此請將其視為實用建議就好，而不要當作是指示。

**Topics**
+ [在 中存放登入資料和其他敏感資訊 AWS Secrets Manager](#best-practices-store-secrets-safely)
+ [在程式碼中尋找未受保護的秘密](#w2aab9b9)
+ [為您的秘密選擇加密金鑰](#w2aab9c11)
+ [使用快取來擷取秘密](#w2aab9c13)
+ [輪換 秘密](#w2aab9c15)
+ [降低使用 CLI 的風險](#w2aab9c17)
+ [限制對秘密的存取](#w2aab9c19)
+ [複寫秘密](#w2aab9c21)
+ [監控秘密](#w2aab9c23)
+ [在私有網路上執行您的基礎設施](#w2aab9c25)

## 在 中存放登入資料和其他敏感資訊 AWS Secrets Manager
<a name="best-practices-store-secrets-safely"></a>

Secrets Manager 可協助改善您的安全狀態和合規，並降低未經授權存取敏感資訊的風險。Secrets Manager 會使用您擁有並存放在 AWS Key Management Service () 中的加密金鑰來加密靜態秘密AWS KMS。當您擷取秘密時，Secrets Manager 會解密秘密，並透過 TLS 將其安全地傳輸至您的本機環境。如需詳細資訊，請參閱[建立 AWS Secrets Manager 秘密](create_secret.md)。

## 在程式碼中尋找未受保護的秘密
<a name="w2aab9b9"></a>

CodeGuru Reviewer 與 Secrets Manager 整合，以使用在程式碼中尋找未受保護秘密的秘密偵測器。秘密偵測器會搜尋硬式編碼密碼、資料庫連線字串、使用者名稱等。如需詳細資訊，請參閱[透過 Amazon CodeGuru Reviewer 在您的程式碼中尋找未受保護的機密](integrating-codeguru.md)。

Amazon Q 可以掃描您的程式碼庫是否有安全漏洞和程式碼品質問題，以改善整個開發週期的應用程式狀態。如需詳細資訊，請參閱《[Amazon Q 開發人員使用者指南》中的使用 Amazon Q 掃描程式碼](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/security-scans.html)。 **

## 為您的秘密選擇加密金鑰
<a name="w2aab9c11"></a>

在大多數情況下，我們建議使用 `aws/secretsmanager` AWS 受管金鑰來加密秘密。使用它無需付費。

若要能夠從另一個帳戶存取秘密，或將金鑰政策套用至加密金鑰，請使用客戶受管金鑰來加密秘密。
+ 在金鑰政策中，將值指派給`secretsmanager.<region>.amazonaws.com`[https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)條件金鑰。這會將金鑰的使用限制為僅來自 Secrets Manager 的請求。
+ 若要進一步限制金鑰的使用僅限於具有正確內容的 Secrets Manager 請求，請在 [Secrets Manager 加密內容](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html#security-encryption-encryption-context)中使用金鑰或值，作為使用 KMS 金鑰的條件，方法是建立：
  + IAM 政策或金鑰政策中的[字串條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String) 
  + 授權中的[授予限制條件](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)

如需詳細資訊，請參閱[中的秘密加密和解密 AWS Secrets Manager](security-encryption.md)。

## 使用快取來擷取秘密
<a name="w2aab9c13"></a>

若要以最有效率的方式使用您的秘密，建議您使用下列其中一個支援的 Secrets Manager 快取元件來快取秘密，並只在需要時才更新它們：
+ [Java 搭配用戶端快取](retrieving-secrets_cache-java.md)
+ [Python 搭配用戶端快取](retrieving-secrets_cache-python.md)
+ [具有用戶端快取的 .NET](retrieving-secrets_cache-net.md)
+ [使用用戶端快取](retrieving-secrets_cache-go.md)
+ [具有用戶端快取的 Rust](retrieving-secrets_cache-rust.md)
+ [AWS 參數和秘密 Lambda 延伸模組](retrieving-secrets_lambda.md)
+ [在 Amazon Elastic Kubernetes Service 中使用 AWS Secrets Manager 秘密](integrate_eks.md)
+ 使用 [使用 AWS Secrets Manager 代理程式](secrets-manager-agent.md) 來標準化 Secrets Manager 在 Amazon Elastic Container Service AWS Lambda、Amazon Elastic Kubernetes Service 和 Amazon Elastic Compute Cloud 等環境中的秘密使用。

## 輪換 秘密
<a name="w2aab9c15"></a>

如果您長時間未變更您的秘密，秘密就更有可能遭到盜用。透過 Secrets Manager，您可以設定每四小時自動輪換一次。Secrets Manager 提供兩種輪換策略： [單一使用者](rotation-strategy.md#rotating-secrets-one-user-one-password)和 [交替使用者](rotation-strategy.md#rotating-secrets-two-users)。如需詳細資訊，請參閱[輪換 AWS Secrets Manager 秘密](rotating-secrets.md)。

## 降低使用 CLI 的風險
<a name="w2aab9c17"></a>

當您使用 AWS CLI 叫用 AWS 操作時，您可以在命令 shell 中輸入這些命令。大多數命令 shell 提供的功能可能會危害您的秘密，例如記錄和查看上次輸入的命令。在您使用 AWS CLI 輸入敏感資訊之前，請務必輸入 [降低使用 AWS CLI 存放 AWS Secrets Manager 秘密的風險](security_cli-exposure-risks.md)。

## 限制對秘密的存取
<a name="w2aab9c19"></a>

在控制秘密存取的 IAM 政策陳述式中，使用[最低權限存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)的原則。您可以使用 [IAM 角色和政策](auth-and-access_iam-policies.md)、[資源政策和](auth-and-access_resource-policies.md)[屬性型存取控制 (ABAC)](auth-and-access-abac.md)。如需詳細資訊，請參閱[的身分驗證和存取控制 AWS Secrets Manager](auth-and-access.md)。

**Topics**
+ [封鎖對秘密的廣泛存取](#iam-contextkeys-blockpublicpolicy)
+ [請謹慎處理政策中的 IP 地址條件](#iam-contextkeys-ipaddress)
+ [限制具有 VPC 端點條件的請求](#iam-contextkeys-vpcendpoint)

### 封鎖對秘密的廣泛存取
<a name="iam-contextkeys-blockpublicpolicy"></a>

在允許 `PutResourcePolicy`操作的身分政策中，我們建議您使用 `BlockPublicPolicy: true`。此條件意味著只有在政策不允許廣泛存取時，使用者才能將資源政策連接到秘密。

Secrets Manager 使用 Zelkova 自動推理來分析廣泛存取的資源政策。如需 Zelkova 的詳細資訊，請參閱 [安全部落格上的 AWS 如何使用自動化推理來協助您大規模實現](https://aws.amazon.com/blogs/security/protect-sensitive-data-in-the-cloud-with-automated-reasoning-zelkova/) AWS 安全。

下列範例示範如何使用 `BlockPublicPolicy`。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "secretsmanager:PutResourcePolicy",
        "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:secretName-AbCdEf",
    "Condition": {
            "Bool": {
                "secretsmanager:BlockPublicPolicy": "true"
            }
        }
    }
}
```

------

### 請謹慎處理政策中的 IP 地址條件
<a name="iam-contextkeys-ipaddress"></a>

在允許或拒絕對 Secrets Manager 之存取權的同一政策陳述式中，指定 [IP 地址條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_IPAddress)或 `aws:SourceIp` 條件索引鍵時，請謹慎小心。例如，如果您將限制從公司網路 IP 地址範圍請求 AWS 的動作連接到秘密的政策，則以 IAM 使用者身分從公司網路叫用請求的請求會如預期運作。不過，如果您讓其他 服務代表您存取秘密，例如當您使用 Lambda 函數啟用輪換時，該函數會從 AWS內部地址空間呼叫 Secrets Manager 操作。使用 IP 地址篩選條件時受到政策影響的請求會失敗。

此外，當請求來自 Amazon VPC 端點時，`aws:sourceIP` 條件金鑰較無效。若要將請求限制為特定 VPC 端點，請使用 [限制具有 VPC 端點條件的請求](#iam-contextkeys-vpcendpoint)。

### 限制具有 VPC 端點條件的請求
<a name="iam-contextkeys-vpcendpoint"></a>

若要允許或拒絕對特定 VPC 或 VPC 端點所發出之請求的存取權，請使用 `aws:SourceVpc` 來限制對指定 VPC 所發出之請求的存取權，或使用 `aws:SourceVpce` 來限制對指定 VPC 端點所發出之請求的存取權。請參閱 [範例：許可和 VPC](auth-and-access_resource-policies.md#auth-and-access_examples_vpc)。
+ `aws:SourceVpc` 會限制對指定 VPC 所發出之請求的存取權。
+ `aws:SourceVpce` 會限制對指定 VPC 端點所發出之請求的存取權。

如果您在允許或拒絕對 Secrets Manager 秘密之存取權的資源政策陳述式中使用這些條件金鑰，則您可能會不小心拒絕對使用 Secrets Manager 之服務的存取權，而這些服務會代表您存取秘密。只有部分 AWS 服務可以使用 VPC 中的端點執行。如果您將秘密的請求限制為來自 VPC 或 VPC 端點，則從未設定的服務呼叫 Secrets Manager 可能會失敗。

請參閱 [使用 AWS Secrets Manager VPC 端點](vpc-endpoint-overview.md)。

## 複寫秘密
<a name="w2aab9c21"></a>

Secrets Manager 可以自動將您的秘密複寫到多個 AWS 區域，以符合您的復原能力或災難復原需求。如需詳細資訊，請參閱[跨區域複寫 AWS Secrets Manager 秘密](replicate-secrets.md)。

## 監控秘密
<a name="w2aab9c23"></a>

Secrets Manager 可讓您透過與 AWS 記錄、監控和通知服務的整合來稽核和監控秘密。如需詳細資訊，請參閱：
+ [使用 記錄 AWS Secrets Manager 事件 AWS CloudTrail](monitoring-cloudtrail.md)
+ [AWS Secrets Manager 使用 Amazon CloudWatch 監控](monitoring-cloudwatch.md)
+ [使用 監控 AWS Secrets Manager 秘密的合規性 AWS Config](configuring-awsconfig-rules.md)
+ [監控 Secrets Manager 成本](monitor-secretsmanager-costs.md)
+ [使用 Amazon GuardDuty 偵測威脅](monitoring-guardduty.md)

## 在私有網路上執行您的基礎設施
<a name="w2aab9c25"></a>

我們建議您在無法從公有網際網路存取的私有網路上儘可能執行基礎設施。您可以建立*介面 VPC 端點*，以在您的 VPC 與 Secrets Manager 之間建立私有連線。如需詳細資訊，請參閱[使用 AWS Secrets Manager VPC 端點](vpc-endpoint-overview.md)。