{"meta":{"title":"在 Octopus 部署中配置 OpenID Connect","intro":"在工作流中使用 OpenID Connect 通过 Octopus Deploy 进行身份验证。","product":"GitHub Actions","breadcrumbs":[{"href":"/zh/actions","title":"GitHub Actions"},{"href":"/zh/actions/how-tos","title":"操作方法"},{"href":"/zh/actions/how-tos/secure-your-work","title":"保护工作安全"},{"href":"/zh/actions/how-tos/secure-your-work/security-harden-deployments","title":"安全加固部署"},{"href":"/zh/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-octopus-deploy","title":"Octopus Deploy 中的 OIDC"}],"documentType":"article"},"body":"# 在 Octopus 部署中配置 OpenID Connect\n\n在工作流中使用 OpenID Connect 通过 Octopus Deploy 进行身份验证。\n\n## 概述\n\nOpenID Connect（OIDC）允许您使用 [Octopus Deploy](https://octopus.com/) 对您的GitHub Actions工作流进行身份验证，以便推送包、创建发布或触发部署，而无需将 Octopus Deploy 的密码或 API 密钥作为长期的GitHub机密来存储。\n\n本指南概述了如何配置 Octopus Deploy 以信任 GitHub 的 OIDC 作为联合标识，并包含一个工作流示例，该示例使用 [`octopusdeploy/login`](https://github.com/OctopusDeploy/login) 操作通过令牌向你的 Octopus Deploy 实例进行身份验证。\n\n## 先决条件\n\n* 若要了解使用 OpenID Connect（OIDC）及其体系结构和优势的基本概念 GitHub ，请参阅 [OpenID Connect](/zh/actions/concepts/security/openid-connect)。\n\n* 在继续之前，必须规划安全策略，以确保仅以可预测的方式分配访问令牌。 要控制云提供商颁发访问令牌的方式，必须至少定义一个条件，以便不受信任的存储库无法为云资源请求访问令牌。 有关详细信息，请参阅 [OpenID Connect 参考](/zh/actions/reference/security/oidc#oidc-claims-used-to-define-trust-conditions-on-cloud-roles)。\n\n## 将身份提供者添加到 Octopus Deploy\n\n若要将 OIDC 与 Octopus Deploy 配合使用，请先在 GitHub Actions 与 Octopus Deploy 实例之间建立信任关系。 有关此过程的详细信息，请参阅 [Octopus 部署文档中将 OpenID Connect 与 Octopus API 配合使用](https://octopus.com/docs/octopus-rest-api/openid-connect) 。\n\n1. 登录您的 Octopus Deploy 实例。\n2. 创建或打开将通过令牌请求授予访问权限的服务帐户。\n3. 配置新的 OIDC 标识，定义 GitHub Actions 工作流令牌请求将依据其进行验证的相关主题。\n\n## 更新 GitHub Actions 工作流程\n\n要更新 OIDC 的工作流程，您需要对 YAML 进行两项更改：\n\n1. 为令牌添加权限设置。\n2. 使用 [`OctopusDeploy/login`](https://github.com/OctopusDeploy/login) 操作以交换 OIDC 令牌 (JWT) 以获得云访问令牌。\n\n> \\[!NOTE]\n> 在工作流或 OIDC 策略中使用环境时，建议将保护规则添加到环境中以提高安全性。 例如，可以在环境中配置部署规则，以限制可以部署到环境或访问环境机密的分支和标记。 有关详细信息，请参阅“[管理部署环境](/zh/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments)”。\n\n### 添加权限设置\n\n作业或工作流运行要求将 `permissions` 设置为 [`id-token: write`](/zh/actions/tutorials/authenticate-with-github_token#modifying-the-permissions-for-the-github_token)，以允许 GitHub 的 OIDC 提供程序为每次运行创建 JSON Web 令牌。\n\n> \\[!NOTE] 在工作流权限中设置 `id-token: write` 不会授予工作流修改或写入任何资源的权限。 这只会允许工作流为某个操作或步骤请求（提取）并使用（设置）OIDC 令牌。 然后，此令牌用于通过生存期较短的访问令牌向外部服务进行身份验证。\n\n有关所需权限、配置示例和高级方案的详细信息，请参阅 [OpenID Connect 参考](/zh/actions/reference/security/oidc#workflow-permissions-for-the-requesting-the-oidc-token)。\n\n### 请求访问令牌\n\n[`OctopusDeploy/login`](https://github.com/OctopusDeploy/login)   操作从 GitHub OIDC 提供商接收 JWT，然后向你的 Octopus Server 实例请求访问令牌。 有关详细信息，请参阅 [`OctopusDeploy/login`](https://github.com/OctopusDeploy/login) 文档。\n\n以下示例将 OIDC ID 令牌与 Octopus Deploy 实例交换，以接收访问令牌，然后可用于访问 Octopus 部署资源。 请务必根据您的情况，适当地替换`server`和`service_account_id`处的详细信息。\n\n```yaml copy\n# 此工作流使用未经 GitHub 认证的操作。\n# 它们由第三方提供，并受\n# 单独的服务条款、隐私政策和支持\n# 文档。\n\njobs:\n  create_release_in_octopus:\n    runs-on: ubuntu-latest\n    name: Create a release in Octopus\n    permissions:\n      # You might need to add other permissions here like `contents: read` depending on what else your job needs to do\n      id-token: write # This is required to obtain an ID token from GitHub Actions for the job\n    steps:\n      - name: Login to Octopus\n        uses: OctopusDeploy/login@34b6dcc1e86fa373c14e6a28c5507d221e4de629 #v1.0.2\n        with:\n          server: https://my.octopus.app\n          service_account_id: 5be4ac10-2679-4041-a8b0-7b05b445e19e\n\n      - name: Create a release in Octopus\n        uses: OctopusDeploy/create-release-action@fe13cc69c1c037cb7bb085981b152f5e35257e1f #v3.2.2\n        with:\n          space: Default\n          project: My Octopus Project\n```\n\n## 延伸阅读\n\n* [将 OpenID Connect 与可重用的工作流程结合使用](/zh/actions/how-tos/secure-your-work/security-harden-deployments/oidc-with-reusable-workflows)\n* [自托管运行程序参考](/zh/actions/reference/runners/self-hosted-runners)"}