

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 使用 AWS Secrets Manager 管理应用程序密钥
<a name="integration-secrets-manager"></a>

 [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/) 可帮助您在凭证、API 密钥及其他机密信息的全生命周期内，完成对其的管理、访问与轮换操作。借助 Secrets Manager，您能够安全管理用于访问 AWS 环境、第三方服务以及本地环境中各类资源的机密信息。有关更多信息，请参阅 [AWS Secrets Manager 用户指南](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)。

在适用于 Argo CD 的 EKS 功能中使用 Secrets Manager 时，该服务可提供一种安全方式来存储和获取 Git 存储库凭证，无需在 Argo CD 的配置项和资源列表中硬编码敏感数据。这种集成方式对于管理私有存储库访问令牌，以及 Argo CD 用于从 Git 存储库同步应用的 SSH 密钥，都尤为实用。

## 在 Argo CD 中使用 AWS Secrets Manager
<a name="integration-secrets-manager-use"></a>

在适用于 Argo CD 的 EKS 功能中进行操作时，可将 Git 存储库凭证存储在 Secrets Manager 中，并配置 Argo CD 来获取这些凭证。相较于直接在 Argo CD 配置中存储凭证，或是使用长期有效的个人访问令牌，这种方式安全性要更高。

 **先决条件** 
+ 已启用 Argo CD 功能的 Amazon EKS 集群
+ 已在 AWS Secrets Manager 中存储 Git 存储库凭证
+ 已为 Argo CD 配置访问 Secrets Manager 所需的 IAM 权限

 **配置 Argo CD 使用 Secrets Manager 管理存储库凭证** 

1. 将 Git 凭证存储到 Secrets Manager 中。例如，存储一个 GitHub 个人访问令牌：

   ```
   aws secretsmanager create-secret \
     --name argocd/github-token \
     --secret-string '{"username":"git","password":"ghp_xxxxxxxxxxxx"}'
   ```

1. 确保 Argo CD 功能角色具备获取机密信息的权限：

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "secretsmanager:GetSecretValue",
           "secretsmanager:DescribeSecret"
         ],
         "Resource": "arn:aws:secretsmanager:region:account-id:secret:argocd/github-token*"
       },
       {
         "Effect": "Allow",
         "Action": [
           "kms:Decrypt"
         ],
         "Resource": "arn:aws:kms:region:account-id:key/*",
         "Condition": {
           "StringLike": {
             "kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:region:account-id:secret:argocd/*",
             "kms:ViaService": "secretsmanager.*.amazonaws.com"
           }
         }
       }
     ]
   }
   ```
**注意**  
由于 Secrets Manager 会使用 AWS KMS 对所有机密信息进行加密，因此 KMS 解密权限是必需项。配置中的条件会将解密操作限制为仅针对带有 `argocd/` 前缀的机密信息。若使用 Secrets Manager 的默认 AWS 托管式密钥，则该权限已足够。若使用客户托管式 KMS 密钥，则在 `Resource` 字段中更新为对应的密钥 ARN。

1. 配置 Argo CD，使其从 Secrets Manager 中获取凭证。有关将 Secrets Manager 中的机密信息同步为 Argo CD 可引用的 Kubernetes 机密的方法，请参阅 Argo CD 文档中的[机密管理](https://argo-cd.readthedocs.io/en/stable/operator-manual/secret-management/)章节。

1. 创建一个引用该机密 ARN 的 Argo CD 存储库配置：

   ```
   apiVersion: v1
   kind: Secret
   metadata:
     name: private-repo
     namespace: argocd
     labels:
       argocd.argoproj.io/secret-type: repository
   stringData:
     type: git
     url: https://github.com/org/repo
     secretArn: arn:aws:secretsmanager:region:account-id:secret:argocd/github-token
   ```

有关使用 Argo CD 配置存储库访问权限的更多信息，请参阅[配置存储库访问权限](argocd-configure-repositories.md)。