Skip to main content

在 Octopus 部署中配置 OpenID Connect

在工作流中使用 OpenID Connect 通过 Octopus Deploy 进行身份验证。

概述

OpenID Connect(OIDC)允许您使用 Octopus Deploy 对您的GitHub Actions工作流进行身份验证,以便推送包、创建发布或触发部署,而无需将 Octopus Deploy 的密码或 API 密钥作为长期的GitHub机密来存储。

本指南概述了如何配置 Octopus Deploy 以信任 GitHub 的 OIDC 作为联合标识,并包含一个工作流示例,该示例使用 octopusdeploy/login 操作通过令牌向你的 Octopus Deploy 实例进行身份验证。

先决条件

  • 若要了解 GitHub 如何使用 OpenID Connect (OIDC) 及其体系结构和优势的基本概念,请参阅“OpenID Connect”。

  • 在继续之前,必须规划安全策略,以确保仅以可预测的方式分配访问令牌。 要控制云提供商颁发访问令牌的方式,必须至少定义一个条件,以便不受信任的存储库无法为云资源请求访问令牌。 有关详细信息,请参阅“OpenID Connect”。

将身份提供者添加到 Octopus Deploy

若要将 OIDC 与 Octopus Deploy 配合使用,请先在 GitHub Actions 与 Octopus Deploy 实例之间建立信任关系。 有关此过程的详细信息,请参阅 Octopus 部署文档中将 OpenID Connect 与 Octopus API 配合使用

  1. 登录您的 Octopus Deploy 实例。
  2. 创建或打开将通过令牌请求授予访问权限的服务帐户。
  3. 配置新的 OIDC 标识,定义 GitHub Actions 工作流令牌请求将依据其进行验证的相关主题。

更新 GitHub Actions 工作流程

要更新 OIDC 的工作流程,您需要对 YAML 进行两项更改:

  1. 为令牌添加权限设置。
  2. 使用 OctopusDeploy/login 操作以交换 OIDC 令牌 (JWT) 以获得云访问令牌。

注意

在工作流或 OIDC 策略中使用环境时,建议将保护规则添加到环境中以提高安全性。 例如,可以在环境中配置部署规则,以限制可以部署到环境或访问环境机密的分支和标记。 有关详细信息,请参阅“管理部署环境”。

添加权限设置

作业或工作流运行需要使用 id-token: writepermissions 设置,以允许 GitHub 的 OIDC 提供者为每个运行创建 JSON Web 令牌。

注意

在工作流权限中设置 id-token: write 不会授予工作流修改或写入任何资源的权限。 这只会允许工作流为某个操作或步骤请求(提取)并使用(设置)OIDC 令牌。 然后,此令牌用于通过生存期较短的访问令牌向外部服务进行身份验证。

有关所需权限、配置示例和高级方案的详细信息,请参阅 OpenID Connect 参考

请求访问令牌

OctopusDeploy/login 操作从 GitHub OIDC 提供商接收 JWT,然后向你的 Octopus Server 实例请求访问令牌。 有关详细信息,请参阅 OctopusDeploy/login 文档。

以下示例将 OIDC ID 令牌与 Octopus Deploy 实例交换,以接收访问令牌,然后可用于访问 Octopus 部署资源。 请务必根据您的情况,适当地替换serverservice_account_id处的详细信息。

YAML
# 此工作流使用未经 GitHub 认证的操作。
# 它们由第三方提供,并受
# 单独的服务条款、隐私政策和支持
# 文档。

jobs:
  create_release_in_octopus:
    runs-on: ubuntu-latest
    name: Create a release in Octopus
    permissions:
      # You might need to add other permissions here like `contents: read` depending on what else your job needs to do
      id-token: write # This is required to obtain an ID token from GitHub Actions for the job
    steps:
      - name: Login to Octopus
        uses: OctopusDeploy/login@34b6dcc1e86fa373c14e6a28c5507d221e4de629 #v1.0.2
        with:
          server: https://my.octopus.app
          service_account_id: 5be4ac10-2679-4041-a8b0-7b05b445e19e

      - name: Create a release in Octopus
        uses: OctopusDeploy/create-release-action@fe13cc69c1c037cb7bb085981b152f5e35257e1f #v3.2.2
        with:
          space: Default
          project: My Octopus Project

延伸阅读