개요
OpenID Connect(OIDC)를 사용하면 GitHub Actions 워크플로가 장기 GitHub 시크릿에 Octopus Deploy 암호 또는 API 키를 저장하지 않고도 Octopus Deploy에 인증하여 패키지를 푸시하고, 릴리스를 만들고, 배포를 트리거할 수 있습니다.
이 가이드에서는 GitHub의 OIDC를 페더레이션 ID로 신뢰하도록 Octopus Deploy를 구성하는 방법에 대한 개요를 제공하며, 토큰을 사용하여 Octopus Deploy 인스턴스에 인증하는 작업에 대한 octopusdeploy/login 워크플로 예제를 포함합니다.
필수 조건
-
OIDC(OpenID Connect)를 사용하는 방법과 GitHub 아키텍처 및 이점에 대한 기본 개념을 알아보려면 OpenID Connect을 참조하세요.
-
계속하기 전에 액세스 토큰이 예측 가능한 방식으로만 할당되도록 보안 전략을 계획해야 합니다. 클라우드 공급자가 액세스 토큰을 발급하는 방법을 제어하려면 신뢰할 수 없는 리포지토리가 클라우드 리소스에 대한 액세스 토큰을 요청할 수 없도록 하나 이상의 조건을 정의해야 합니다. 자세한 내용은 및 OpenID 연결 참조을 참조하세요.
Octopus 배포에 ID 공급자 추가
OIDC를 Octopus Deploy와 함께 사용하려면, 먼저 GitHub Actions와 Octopus Deploy 인스턴스 간에 신뢰 관계를 설정합니다. 이 프로세스에 대한 자세한 내용은 문어 배포 설명서에서 문어 API와 OpenID Connect 사용을 참조하세요.
- Octopus Deploy 인스턴스에 로그인합니다.
- 토큰 요청을 통해 액세스 권한을 부여할 서비스 계정을 만들거나 엽니다.
- GitHub Actions 워크플로 토큰 요청의 유효성을 검증하기 위해 관련 주체를 정의함으로써 새로운 OIDC ID를 설정합니다.
GitHub Actions 워크플로 업데이트
OIDC에 대한 워크플로를 업데이트하려면 YAML에 두 가지를 변경해야 합니다.
- 토큰에 대한 사용 권한 설정을 추가합니다.
-
OctopusDeploy/login작업을 사용하여 OIDC 토큰(JWT)을 클라우드 액세스 토큰으로 교환합니다.
참고
워크플로 또는 OIDC 정책에서 환경을 사용하는 경우 추가 보안을 위해 환경에 보호 규칙을 추가하는 것이 좋습니다. 예를 들어 환경에 배포할 수 있는 분기 및 태그를 제한하거나 환경 비밀에 액세스하도록 환경에 대한 배포 규칙을 구성할 수 있습니다. 자세한 내용은 배포 환경 관리을(를) 참조하세요.
사용 권한 설정 추가
작업 또는 워크플로 실행에는 'OIDC 공급자가 모든 실행에 대해 JSON 웹 토큰을 만들 수 있도록 허용하는 permissions설정 id-token: write 이 필요합니다GitHub.
참고
워크플로 권한에서 id-token: write을 설정해도 워크플로에 리소스를 수정하거나 쓸 수 있는 권한이 부여되지는 않습니다. 대신 워크플로는 작업이나 단계의 OIDC 토큰을 요청(가져오기)하고 사용(설정)하는 것만 허용합니다. 이 토큰은 수명이 짧은 액세스 토큰을 사용하여 외부 서비스에 인증하는 데 사용됩니다.
필요한 권한, 구성 예, 고급 시나리오에 대한 자세한 내용은 OpenID 연결 참조을(를) 참조하세요.
액세스 토큰 요청
OctopusDeploy/login
작업은 GitHub OIDC 공급자에서 JWT를 받은 다음 Octopus Server 인스턴스에 액세스 토큰을 요청합니다. 자세한 내용은 OctopusDeploy/login 설명서를 참조하세요.
다음 예제에서는 OIDC ID 토큰을 Octopus Deploy 인스턴스와 교환하여 액세스 토큰을 수신한 후, 이를 사용하여 Octopus Deploy 리소스에 접근할 수 있습니다. 시나리오에 맞게 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