

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

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

AWS Secrets Manager 與 GitLab 整合。您可以利用 Secrets Manager 秘密來保護 GitLab 登入資料，使其不再於 GitLab 中進行硬式編碼。反之，當您的應用程式在 [GitLab CI/CD 管道中執行任務時，GitLab Runner](https://docs.gitlab.com/runner/) 會從 Secrets Manager 擷取這些秘密。 GitLab 

若要使用此整合，您將在 [IAM 和 IAM 角色中建立 OpenID Connect (OIDC) 身分提供者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html) AWS Identity and Access Management 。這可讓 GitLab Runner 存取您的 Secrets Manager 秘密。如需 GitLab CI/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 角色和政策。此角色由 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 擔任角色的信任政策範例。您的信任政策應列出您的 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 設定為使用 Secrets 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 管道中執行任務時，您希望 GitLab Runner 擔任的 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"
```

如需詳細資訊，請參閱 [GitLab Secrets Manager 整合文件](https://docs.gitlab.com/ci/secrets/aws_secrets_manager/)。

或者，您可以在 GitLab 中測試 OIDC 組態。如需詳細資訊[，請參閱 GitLab 文件以測試 OIDC 組態](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)