概要
OpenID Connect (OIDC) を使用すると、GitHub Actions ワークフローは Octopus Deploy に対して認証を行い、パッケージのプッシュ、リリースの作成、デプロイのトリガーを、有効期限の長いGitHubのシークレットとして Octopus Deploy のパスワードや API キーを保存せずに行うことができます。
このガイドでは、GitHubの OIDC をフェデレーション ID として信頼するようにタコデプロイを構成する方法の概要を説明し、トークンを使用してタコ配置インスタンスに対する認証を行う octopusdeploy/login アクションのワークフロー例を示します。
[前提条件]
-
GitHub が OpenID Connect (OIDC) を使用する方法の基本的な概念とそのアーキテクチャと利点については、「OpenID Connect」を参照してください。
-
先に進む前に、アクセス トークンが予測可能な方法でのみ割り当てられるようにセキュリティ戦略を計画する必要があります。 クラウド プロバイダーがアクセス トークンを発行する方法を制御するには、少なくとも 1 つの条件を定義し、信頼できないリポジトリがクラウド リソースにアクセス トークンを要求できないようにする必要があります。 詳しくは、「OpenID Connect」をご覧ください。
-
GHE.com に関するこのガイドに従っている場合は、次のドキュメントの特定の値を置き換える必要があることを理解してください。 「OpenID Connect」を参照してください。
Octopus Deploy に Id プロバイダーを追加する
タコデプロイで OIDC を使用するには、まずGitHub Actionsと、お使いのタコデプロイインスタンスとの間に信頼関係を確立します。 このプロセスの詳細については、Octopus Deploy ドキュメントの「Octopus API で OpenID Connect を使用する方法」を参照してください。
- お使いのタコ デプロイ インスタンスにサインインします。
- トークン要求を介してアクセス権が付与されるサービス アカウントを作成または開きます。
- 新しい OIDC ID を構成し、GitHub Actions ワークフロー トークン要求の検証に対して適切な対象を定義します。
GitHub Actions ワークフローを更新する
OIDC 向けにワークフローを更新するには、YAML に 2 つの変更を加える必要があります。
- トークンのアクセス許可設定を追加します。
- OIDC トークン (JWT) をクラウド アクセス トークンと交換するには、
OctopusDeploy/loginアクションを使用します。
メモ
環境がワークフローまたは OIDC ポリシーで使われる場合は、セキュリティを強化するために環境に保護規則を追加することをお勧めします。 たとえば、環境のデプロイ規則を構成して、環境にデプロイできるブランチとタグを制限したり、環境シークレットにアクセスしたりできます。 詳しくは、「デプロイメント用の環境管理」をご覧ください。
アクセス許可設定の追加
GitHub の OIDC プロバイダーが実行ごとに JSON Web Token を生成できるようにするためには、permissions``id-token: write を用いた設定がジョブまたはワークフロー実行に必要です。
メモ
ワークフローのアクセス許可で id-token: write を設定しても、リソースへの変更または書き込みを行うアクセス許可はワークフローに付与されません。 そうではなく、ワークフローは、アクションまたはステップのための OIDC トークンを要求 (フェッチ) して使用 (設定) することのみが許可されます。 その後、このトークンは、有効期間の短いアクセス トークンを使って外部サービスで認証を行うために使われます。
必要なアクセス許可、構成例、高度なシナリオについて詳しくは、「OpenID Connect リファレンス」をご覧ください。
アクセス トークンの要求
この OctopusDeploy/login アクションでは、GitHub OIDC プロバイダーから JWT を受け取り、使用中の Octopus Server インスタンスからアクセス トークンを要求します。 詳細については、OctopusDeploy/login のドキュメントを参照してください。
次の例では、OIDC ID トークンをお使いのタコ デプロイ インスタンスと交換してアクセス トークンを受け取り、そのトークンを使用して、タコ デプロイ リソースにアクセスできます。
serverとservice_account_idの詳細は、実際のシナリオに合わせて適切に置き換えてください。
# このワークフローは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
# このワークフローは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