如何使用来自 gitlab-ci 的托管身份进行身份验证以将 docker 容器从 gitlab 注册表推送到 Azure Web 服务?
How do I authenticate using a managed identity from gitlab-ci to push a docker container from gitlab registry to Azure web service?
我研究了将 docker 图像从 gitlab 容器注册表推送到 azure 资源的方法:
我还在 [=17] 中找到了创建托管身份(系统分配 和 用户分配)的文档=]
我不知道如何使用
az login —-identity
在 gitlab-ci.yml
文件中访问 azure 应用服务。目的是从 gitlab container registry.
推送一个 docker 镜像
- 我该怎么做?
- 我需要如何配置 azure 应用程序服务(身份/访问控制)?
- 是否存在任何安全问题?如果是,
az login —-service-principal
是一种更安全的方法吗?或者任何其他身份验证程序? ssh
?
提前感谢您的帮助!
您可以使用 GitLab CI Job JWT 令牌从 CI/CD 管道内登录到 Azure,而无需在 GitLab 项目中存储机密。为此,您还需要为 GitLab 和 Azure 服务主体之间的 ID 联合配置 OpenID Connect (OIDC)。 Microsoft 建议使用此方法从 CI/CD 服务以及其他用例向 Azure 进行身份验证。
注意: 仅当您使用 gitlab.com 或可公开访问的 GitLab 实例时,如下所述使用 OIDC 才有效。这是因为 Azure 需要连接到令牌颁发者以获得密钥以验证令牌。如果您是 self-hosting GitLab 并且您的实例不可公开访问,您可以为第 2 步选择不同的凭证类型。
1。创建已注册的应用程序
首先,您需要在 Azure 中注册一个应用程序。您可以按照 these instructions 注册应用程序并创建服务主体来执行此操作。
完成此操作后,记下 应用程序(客户端)ID 和 目录(租户)ID 的值(在应用程序概览窗格)。步骤 3 将需要这些值。
2。添加联合凭据
注册您的应用程序后,您可以将联合凭据添加到应用程序的服务主体。在 Azure 门户中,转到 registered apps -> your application。在边栏中,select 证书和机密。在联合凭据 选项卡下,单击“添加凭据”按钮
使用以下参数进行凭据配置:
联合凭证场景:其他颁发者
Issuer: 你的 gitlab URL 例如https://gitlab.example.com
主题标识符:要匹配的sub
声明的值。例如,要允许 contoso/myproject
项目的 main
分支上的作业使用此服务主体,请使用 project_path:contoso/myproject:ref_type:branch:ref:main
名称:联合凭证的任何描述性名称(例如contoso-myproject-main
)
描述:可选,联合凭证的描述。
观众:您的 GitLab URL 例如https://gitlab.example.com
3。在你的工作中向 Azure 进行身份验证
创建联合凭据后,您可以利用作业中的 CI_JOB_JWT_V2
令牌向 Azure 进行身份验证。在此示例中,我们将使用 Azure CLI (az login
).
azure-cli:
image: mcr.microsoft.com/azure-cli
variables:
AZURE_CLIENT_ID: "YOUR Application Client ID"
AZURE_TENANT_ID: "YOUR TENANT ID"
script:
- az login --tenant $AZURE_TENANT_ID --service-principal -u $AZURE_CLIENT_ID --federation-token $CI_JOB_JWT_V2
# now you are logged into Azure and can take other actions using the CLI
# - az resource list # example
CI_JOB_JWT_V2
: 预定义变量
AZURE_CLIENT_ID
: 已注册应用程序的应用程序(客户端)ID。
AZURE_TENANT_ID
: 要登录的 Azure 租户的 ID(可以在应用程序概述中找到)
此外,不要忘记为您注册的应用程序授予 Azure 容器注册表的适当权限
我研究了将 docker 图像从 gitlab 容器注册表推送到 azure 资源的方法:
我还在 [=17] 中找到了创建托管身份(系统分配 和 用户分配)的文档=]
我不知道如何使用
az login —-identity
在 gitlab-ci.yml
文件中访问 azure 应用服务。目的是从 gitlab container registry.
- 我该怎么做?
- 我需要如何配置 azure 应用程序服务(身份/访问控制)?
- 是否存在任何安全问题?如果是,
az login —-service-principal
是一种更安全的方法吗?或者任何其他身份验证程序?ssh
?
提前感谢您的帮助!
您可以使用 GitLab CI Job JWT 令牌从 CI/CD 管道内登录到 Azure,而无需在 GitLab 项目中存储机密。为此,您还需要为 GitLab 和 Azure 服务主体之间的 ID 联合配置 OpenID Connect (OIDC)。 Microsoft 建议使用此方法从 CI/CD 服务以及其他用例向 Azure 进行身份验证。
注意: 仅当您使用 gitlab.com 或可公开访问的 GitLab 实例时,如下所述使用 OIDC 才有效。这是因为 Azure 需要连接到令牌颁发者以获得密钥以验证令牌。如果您是 self-hosting GitLab 并且您的实例不可公开访问,您可以为第 2 步选择不同的凭证类型。
1。创建已注册的应用程序
首先,您需要在 Azure 中注册一个应用程序。您可以按照 these instructions 注册应用程序并创建服务主体来执行此操作。
完成此操作后,记下 应用程序(客户端)ID 和 目录(租户)ID 的值(在应用程序概览窗格)。步骤 3 将需要这些值。
2。添加联合凭据
注册您的应用程序后,您可以将联合凭据添加到应用程序的服务主体。在 Azure 门户中,转到 registered apps -> your application。在边栏中,select 证书和机密。在联合凭据 选项卡下,单击“添加凭据”按钮
使用以下参数进行凭据配置:
联合凭证场景:其他颁发者
Issuer: 你的 gitlab URL 例如https://gitlab.example.com
主题标识符:要匹配的sub
声明的值。例如,要允许 contoso/myproject
项目的 main
分支上的作业使用此服务主体,请使用 project_path:contoso/myproject:ref_type:branch:ref:main
名称:联合凭证的任何描述性名称(例如contoso-myproject-main
)
描述:可选,联合凭证的描述。
观众:您的 GitLab URL 例如https://gitlab.example.com
3。在你的工作中向 Azure 进行身份验证
创建联合凭据后,您可以利用作业中的 CI_JOB_JWT_V2
令牌向 Azure 进行身份验证。在此示例中,我们将使用 Azure CLI (az login
).
azure-cli:
image: mcr.microsoft.com/azure-cli
variables:
AZURE_CLIENT_ID: "YOUR Application Client ID"
AZURE_TENANT_ID: "YOUR TENANT ID"
script:
- az login --tenant $AZURE_TENANT_ID --service-principal -u $AZURE_CLIENT_ID --federation-token $CI_JOB_JWT_V2
# now you are logged into Azure and can take other actions using the CLI
# - az resource list # example
CI_JOB_JWT_V2
: 预定义变量AZURE_CLIENT_ID
: 已注册应用程序的应用程序(客户端)ID。AZURE_TENANT_ID
: 要登录的 Azure 租户的 ID(可以在应用程序概述中找到)
此外,不要忘记为您注册的应用程序授予 Azure 容器注册表的适当权限