用Amazon Secrets Manager于 GitLab - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

用Amazon Secrets Manager于 GitLab

Amazon Secrets Manager与。集成 GitLab。你可以利用 Secrets Manager 的密钥来保护你的 GitLab凭证,这样它们就不会再被硬编码了。 GitLab相反,当你的应用程序在 GitLab CI/CD 管GitLab 道中运行作业时,Runner 会从 Secrets Manager 中检索这些机密。

要使用此集成,您需要在 IAM 中创建一个 OpenID Connect (OIDC) 身份提供商Amazon Identity and Access Management和一个 IAM 角色。这允许 GitLab Runner 访问你的 Secrets Manager 密钥。有关 C GitLab I/CD 和 OIDC 的更多信息,请参阅文档。GitLab

注意事项

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

先决条件

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

  1. 创建密Amazon Secrets Manager钥

    你需要一个 Secrets Manager 密钥,该密钥将在你的 GitLab 工作中检索,无需对这些凭据进行硬编码。在配置 GitLab 管道时,你需要 Secrets Manager 的密钥 ID。请参阅创建密 Amazon 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 角色和策略。此角色由 with GitLab Amazon 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 代入角色的信任策略示例。您的信任策略应列出您 GitLab 的Amazon Web Services 账户、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 访问Amazon Secrets Manager。您可以将此策略添加到信任策略。有关更多信息,请参阅创建 IAM 策略

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

Amazon Secrets Manager与集成 GitLab

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

将 GitLab 管道配置为使用 Secrets Manager

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

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

  • Secrets Manager 密钥 ID。

  • 您希望 GitLab Runner 在 GitLab管道中执行任务时扮演的 IAM 角色。

  • 密钥的存储位置。Amazon Web Services 区域

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"

有关更多信息,请参阅 S GitLabecrets Manager 集成文档

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

问题排查

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

GitLab 管道问题

如果您遇到 GitLab 管道问题,请确保以下几点:

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

  • 您的 GitLab 管道扮演了正确的角色,拥有相应的权限,并且可以访问正确的Amazon Secrets Manager密钥。

其他资源

以下资源可以帮助您解决 GitLab 和的问题Amazon Secrets Manager: