在 GitLab 中使用 AWS Secrets Manager
AWS Secrets Manager 与 GitLab 集成。您可以利用 Secrets Manager 密钥来保护自己的 GitLab 凭证,从而这些凭证不再于 GitLab 中进行硬编码。相反,当您的应用程序在 GitLab CI/CD 管道中运行作业时,GitLab 运行程序
要使用此集成,您需要在 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 集成,请满足以下先决条件:
-
创建 AWS Secrets Manager 密钥
您将需要一个 Secrets Manager 密钥,将在您的 GitLab 作业中检索该密钥,从而无需对这些凭证进行硬编码。在配置 GitLab 管道时,您将需要 Secrets Manager 的密钥 ID。请参阅创建 AWS Secrets Manager 密钥了解更多信息。
-
在 IAM 控制台中让 GitLab 成为您的 OIDC 提供者。
在此步骤中,您将在 IAM 控制台中使 GitLab 成为 OIDC 提供者。有关更多信息,请参阅创建 OpenID Connect(OIDC)身份提供者和 GitLab 文档
。 在 IAM 控制台中创建 OIDC 提供者时,请使用以下配置:
-
将
provider URL设置为您的 GitLab 实例。例如gitlab.example.com。 -
将
audience或aud设置为sts.amazonaws.com。
-
-
创建 IAM 角色和策略
您将需要创建 IAM 角色和策略。此角色由 GitLab 使用 AWS Security Token Service(STS)担任。有关更多信息,请参阅使用自定义信任策略创建角色。
-
在 IAM 控制台中,在创建 IAM 角色时使用以下设置:
-
下面是允许 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*" ] } } } ] }
-
您还需要创建 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-1AWS_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 的问题: