

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

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

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

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

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

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

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

要将密钥管理器与集成 GitLab，请完成以下先决条件：

1. 

**创建一个 AWS Secrets Manager 机密密钥**

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

1. 

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

   在此步骤中，您将在 IAM 控制台中创建 GitLab 您的 OIDC 提供商。有关更多信息，请参阅[创建 OpenID 连接 (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 角色和策略。此角色由 GitLab with [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 代入角色的信任策略示例。您的信任政策应列出您的 AWS 账户、 GitLab 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>

完成先决条件后，您可以配置 GitLab 为使用密钥管理器来保护您的证书。

### 将 GitLab 管道配置为使用密钥管理器
<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 从密钥管理器获取密钥并将该值存储在临时文件中。该文件的路径存储在 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}}"
```

有关更多信息，请参阅[GitLab密钥管理器集成文档](https://docs.gitlab.com/ci/secrets/aws_secrets_manager/)。

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

## 问题排查
<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)