

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 用 AWS Secrets Manager 于 GitLab
<a name="integrating_gitlab"></a>

AWS Secrets Manager 与。集成 GitLab。你可以利用 Secrets Manager 的密钥来保护你的 GitLab凭证，这样它们就不会再被硬编码了。 GitLab相反，当你的应用程序在 GitLab CI/CD 管[GitLab 道](https://docs.gitlab.com/runner/)中运行作业时，Runner 会从 Secrets Manager 中检索这些机密。

要使用此集成，您需要在 IAM 中创建一个 [OpenID Connect (OIDC) 身份提供商 AWS Identity and Access Management 和一个 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html)。这允许 GitLab Runner 访问你的 Secrets Manager 密钥。[有关 C GitLab I/CD 和 OIDC 的更多信息，请参阅文档。GitLab](https://docs.gitlab.com/ci/cloud_services/aws/)

## 注意事项
<a name="gitlab-integration-considerations"></a>

如果您使用的是非公共 GitLab 实例，则无法使用此 Secrets Manager 集成。相反，请参阅[非公共实例的GitLab 文档](https://docs.gitlab.com/ci/cloud_services/aws/#configure-a-non-public-gitlab-instance)。

## 先决条件
<a name="gitlab-integration-prerequisites"></a>

要将 Secrets Manager 与集成 GitLab，请完成以下先决条件：

1. 

**创建密 AWS Secrets Manager 钥**

   你需要一个 Secrets Manager 密钥，该密钥将在你的 GitLab 工作中检索，无需对这些凭据进行硬编码。在[配置 GitLab 管道](#configure-gitlab-pipeline)时，你需要 Secrets Manager 的密钥 ID。请参阅[创建密 AWS Secrets Manager 钥](create_secret.md)了解更多信息。

1. 

**在 IAM 控制台中创建 GitLab 您的 OIDC 提供商。**

   在此步骤中，您将在 IAM 控制台中创建 GitLab 您的 OIDC 提供商。[有关更多信息，请参阅[创建 OpenID Connect (OIDC) 身份](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_providers_create_oidc.html)提供商和文档。GitLab](https://docs.gitlab.com/ci/cloud_services/aws/)

   在 IAM 控制台中创建 OIDC 提供者时，请使用以下配置：

   1. <a name="step2-oidc-provider"></a>将设置`provider URL`为您的 GitLab 实例。例如 **gitlab.example.com**。

   1. <a name="step2-oidc-audience"></a>将 `audience` 或 `aud` 设置为 **sts.amazonaws.com**。

1. 

**创建 IAM 角色和策略**

   您将需要创建 IAM 角色和策略。此角色由 with GitLab [AWS Security Token Service (STS)](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) 担任。有关更多信息，请参阅[使用自定义信任策略创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-custom.html)。

   1. 在 IAM 控制台中，在创建 IAM 角色时使用以下设置：
      + 将 `Trusted entity type` 设置为 **Web identity**。
      + 将 `Group` 设置为 **your GitLab group**。
      + 设置`Identity provider`为您在步骤 2 中使用的提供商 URL（[GitLab 实例](#step2-oidc-provider)）。
      + 将 `Audience` 设置为在步骤 2 中使用的相同[受众](#step2-oidc-audience)。

   1. 以下是允许 GitLab 代入角色的信任策略示例。您的信任策略应列出您 GitLab 的 AWS 账户、URL 和[项目路径](https://docs.gitlab.com/user/project/)。  
****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Principal": {
              "Federated": "arn:aws:iam::111122223333:oidc-provider/gitlab.example.com"
            },
            "Condition": {
              "StringEquals": {
                "gitlab.example.com:aud": [
                  "sts.amazon.com"
                ]
              },
              "StringLike": {
                "gitlab.example.com:sub": [
                  "project_path:mygroup/project-*:ref_type:branch-*:ref:main*"
                ]
              }
            }
          }
        ]
      }
      ```

   1. 您还需要创建一个 IAM 策略以允许 GitLab 访问 AWS Secrets Manager。您可以将此策略添加到信任策略。有关更多信息，请参阅[创建 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。  
****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:your-secret"
          }
        ]
      }
      ```

## AWS Secrets Manager 与集成 GitLab
<a name="integrating-aws-secrets-manager-gitlab"></a>

完成先决条件后，您可以配置为使用 Sec GitLab rets Manager 来保护您的凭证。

### 将 GitLab 管道配置为使用 Secrets Manager
<a name="configure-gitlab-pipeline"></a>

您需要使用以下信息更新 [GitLab CI/CD 配置文件](https://docs.gitlab.com/ci/yaml/yaml_optimization/)：
+ 设置为 STS 的令牌的受众。
+ Secrets Manager 密钥 ID。
+ 您希望 GitLab Runner 在 GitLab管道中执行任务时扮演的 IAM 角色。
+ 密钥的存储位置。 AWS 区域 

GitLab 从 Secrets Manager 中获取密钥并将该值存储在临时文件中。此文件的路径存储在 CI/CD 变量中，类似于[文件类型 CI/CD](https://docs.gitlab.com/ci/variables/#use-file-type-cicd-variables) 变量。

以下是 GitLab CI/CD 配置文件的 YAML 文件片段：

```
variables:
  AWS_REGION: us-east-1
  AWS_ROLE_ARN: 'arn:aws:iam::111122223333:role/gitlab-role'
job:
  id_tokens:
    AWS_ID_TOKEN:
      aud: 'sts.amazonaws.com'
  secrets:
    DATABASE_PASSWORD:
      aws_secrets_manager:
        secret_id: "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name"
```

有关更多信息，请参阅 S [GitLabecrets Manager 集成文档](https://docs.gitlab.com/ci/secrets/aws_secrets_manager/)。

或者，您也可以在中测试 OIDC 配置。 GitLab有关更多信息[，请参阅测试 OIDC 配置的GitLab 文档](https://docs.gitlab.com/ci/cloud_services/aws/#test-the-oidc-configuration)。

## 问题排查
<a name="troubleshooting-integration"></a>

以下内容可以帮助您解决在将 Secrets Manager 与集成时可能遇到的常见问题 GitLab。

### GitLab 管道问题
<a name="gitlab-pipeline-issues"></a>

如果您遇到 GitLab 管道问题，请确保以下几点：
+ 您的 YAML 文件格式正确。有关更多信息，请参阅 [GitLab 文档](https://docs.gitlab.com/ee/ci/yaml/)。
+ 您的 GitLab 管道扮演了正确的角色，拥有相应的权限，并且可以访问正确的 AWS Secrets Manager 密钥。

### 其他资源
<a name="additional-resources"></a>

以下资源可以帮助您解决 GitLab 和的问题 AWS Secrets Manager：
+ [GitLab OIDC 疑难解答](https://docs.gitlab.com/ci/cloud_services/aws/#troubleshooting)
+ [调试 GitLab CI/CD 管道](https://docs.gitlab.com/ee/ci/troubleshooting.html)
+ [问题排查](ascp-eks-installation.md#troubleshooting)