在 GitLab 中使用 AWS Secrets Manager - AWS Secrets Manager

在 GitLab 中使用 AWS Secrets Manager

AWS Secrets Manager 与 GitLab 集成。您可以利用 Secrets Manager 密钥来保护自己的 GitLab 凭证,从而这些凭证不再于 GitLab 中进行硬编码。相反,当您的应用程序在 GitLab CI/CD 管道中运行作业时,GitLab 运行程序会从 Secrets Manager 中检索这些密钥。

要使用此集成,您需要在 IAM 中创建一个 OpenID Connect (OIDC) 身份提供商AWS Identity and Access Management和一个 IAM 角色。这可让 GitLab 运行程序访问您的 Secrets Manager 密钥。有关 GitLab CI/CD 和 OIDC 的更多信息,请参阅 GitLab 文档

注意事项

如果您使用的是非公有 GitLab 实例,则无法使用此 Secrets Manager 集成。相反,请参阅 GitLab 文档了解非公有实例

先决条件

要将 Secrets Manager 与 GitLab 集成,请满足以下先决条件:

  1. 创建 AWS Secrets Manager 密钥

    您将需要一个 Secrets Manager 密钥,将在您的 GitLab 作业中检索该密钥,从而无需对这些凭证进行硬编码。在配置 GitLab 管道时,您将需要 Secrets Manager 的密钥 ID。请参阅创建 AWS Secrets Manager 密钥了解更多信息。

  2. 在 IAM 控制台中让 GitLab 成为您的 OIDC 提供者。

    在此步骤中,您将在 IAM 控制台中使 GitLab 成为 OIDC 提供者。有关更多信息,请参阅创建 OpenID Connect(OIDC)身份提供者GitLab 文档

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

    1. provider URL 设置为您的 GitLab 实例。例如 gitlab.example.com

    2. audienceaud 设置为 sts.amazonaws.com

  3. 创建 IAM 角色和策略

    您将需要创建 IAM 角色和策略。此角色由 GitLab 使用 AWS Security Token Service(STS)担任。有关更多信息,请参阅使用自定义信任策略创建角色

    1. 在 IAM 控制台中,在创建 IAM 角色时使用以下设置:

      • Trusted entity type 设置为 Web identity

      • Group 设置为 your GitLab group

      • Identity provider 设置为在步骤 2 中使用的相同提供者 URL(GitLab 实例)。

      • Audience 设置为在步骤 2 中使用的相同受众

    2. 下面是允许 GitLab 担任 IAM 角色的示例信任策略。您的信任策略应列出您的 AWS 账户、GitLab URL 和项目路径

      { "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*" ] } } } ] }
    3. 您还需要创建 IAM 策略以允许 GitLab 访问 AWS Secrets Manager。您可以将此策略添加到信任策略。有关更多信息,请参阅创建 IAM 策略

      { "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 集成

完成先决条件后,您可以将 GitLab 配置为使用 Secrets Manager 来保护自己的凭证。

将 GitLab 管道配置为使用 Secrets Manager

您需要使用以下信息更新 GitLab CI/CD 配置文件

  • 设置为 STS 的令牌的受众。

  • Secrets Manager 密钥 ID。

  • 在 GitLab 管道中执行作业时,您希望 GitLab 运行程序担任的 IAM 角色。

  • 在其中存储密钥的 AWS 区域。

GitLab 从 Secrets Manager 中获取密钥并将该值存储在临时文件中。此文件的路径存储在 CI/CD 变量中,类似于文件类型 CI/CD 变量

以下是 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 集成文档

或者,您可以在 GitLab 中测试自己的 OIDC 配置。有关更多信息,请参阅测试 OIDC 配置的 GitLab 文档

故障排除

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

GitLab 管道问题

如果您遇到 GitLab 管道问题,请确保满足以下条件:

  • 您的 YAML 文件格式正确。有关更多信息,请参阅 GitLab 文档

  • 您的 GitLab 管道正在担任正确的角色,拥有相应的权限并可以访问正确的 AWS Secrets Manager 密钥。

其他资源

以下资源有助于您排查 GitLab 和 AWS Secrets Manager 的问题: