OIDC(OpenID Connect) 개요
GitHub Actions 워크플로는 종종 소프트웨어를 배포하거나 클라우드의 서비스를 사용하기 위해 클라우드 공급자(예: AWS, Azure, GCP, HashiCorp Vault 등)에 액세스하도록 설계되었습니다. 워크플로가 이러한 리소스에 액세스하기 전에 클라우드 공급자에게 암호 또는 토큰과 같은 자격 증명을 제공합니다. 이러한 자격 증명은 일반적으로 GitHub에 비밀로 저장되며 워크플로는 실행될 때마다 클라우드 공급자에게 이 비밀을 제공합니다.
그러나 하드 코딩된 비밀을 사용하려면 클라우드 공급자에서 자격 증명을 만든 다음, GitHub에서 비밀로 복제해야 합니다.
OIDC를 지원하는 클라우드 공급자와의 신뢰 연결을 설정한 후에는 클라우드 공급자로부터 직접 수명이 짧은 액세스 토큰을 요청하도록 워크플로를 구성할 수 있습니다.
OIDC 사용의 장점
OIDC 토큰을 사용하도록 워크플로를 업데이트하면 다음과 같은 적절한 보안 사례를 채택할 수 있습니다.
- 클라우드 비밀 없음: 수명이 긴 GitHub 비밀로 클라우드 자격 증명을 복제할 필요가 없습니다. 대신 클라우드 공급자에서 OIDC 트러스트를 구성한 다음, 워크플로를 업데이트하여 OIDC를 통해 클라우드 공급자로부터 단기 액세스 토큰을 요청할 수 있습니다.
- 인증 및 권한 부여 관리: 워크플로가 자격 증명을 사용하고 클라우드 공급자의 인증(authN) 및 권한 부여(authZ) 도구를 사용하여 클라우드 리소스에 대한 액세스를 제어하는 방법을 보다 세부적으로 제어할 수 있습니다.
- 자격 증명 순환: OIDC를 사용하면 클라우드 공급자가 단일 작업에만 유효한 수명이 짧은 액세스 토큰을 발급한 다음, 자동으로 만료됩니다.
OIDC가 GitHub Actions와 통합되는 방법
다음 다이어그램에서는 GitHub의 OIDC 공급자가 워크플로 및 클라우드 공급자와 통합되는 방법에 대한 개요를 제공합니다.
- 클라우드 공급자에서 OIDC 신뢰 관계를 설정하여 특정 GitHub 워크플로가 정의된 클라우드 역할을 대신하여 클라우드 액세스 토큰을 요청할 수 있도록 합니다.
- 작업이 실행될 때마다 GitHub의 OIDC 공급자는 OIDC 토큰을 자동으로 생성합니다. 이 토큰에는 인증하려는 특정 워크플로에 대해 보안이 강화되고 확인 가능한 ID를 설정하는 여러 클레임이 포함되어 있습니다.
- 워크플로 작업의 단계 또는 작업은 GitHub의 OIDC 공급자로부터 토큰을 요청할 수 있으며, 이 토큰은 워크플로의 ID 증명으로서 클라우드 공급자에게 표시될 수 있습니다.
- 클라우드 공급자가 토큰에 제공된 클레임의 유효성을 성공적으로 검사하면 작업 기간 동안에만 사용할 수 있는 수명이 짧은 클라우드 액세스 토큰을 제공합니다.
OIDC 토큰 이해
각 작업은 GitHub의 OIDC 공급자로부터 OIDC 토큰을 요청합니다. 이 공급자는 생성된 각 워크플로 작업에 대해 고유한 자동으로 생성된 JWT(JSON Web Token)로 응답합니다. 작업이 실행되면 클라우드 공급자에게 OIDC 토큰이 표시됩니다. 토큰의 유효성을 검사하기 위해 클라우드 공급자는 OIDC 토큰의 주체 및 기타 클레임이 클라우드 역할의 OIDC 트러스트 정의에 미리 구성된 조건과 일치하는지 확인합니다.
다음 예시 OIDC 토큰은 octo-org/octo-repo
리포지토리에 sub
라는 작업 환경을 참조하는 주체(prod
)를 사용합니다.
{
"typ": "JWT",
"alg": "RS256",
"x5t": "example-thumbprint",
"kid": "example-key-id"
}
{
"jti": "example-id",
"sub": "repo:octo-org/octo-repo:environment:prod",
"environment": "prod",
"aud": "https://github.com/octo-org",
"ref": "refs/heads/main",
"sha": "example-sha",
"repository": "octo-org/octo-repo",
"repository_owner": "octo-org",
"actor_id": "12",
"repository_visibility": "private",
"repository_id": "74",
"repository_owner_id": "65",
"run_id": "example-run-id",
"run_number": "10",
"run_attempt": "2",
"runner_environment": "github-hosted",
"actor": "octocat",
"workflow": "example-workflow",
"head_ref": "",
"base_ref": "",
"event_name": "workflow_dispatch",
"ref_type": "branch",
"job_workflow_ref": "octo-org/octo-automation/.github/workflows/oidc.yml@refs/heads/main",
"iss": "https://token.actions.githubusercontent.com",
"nbf": 1632492967,
"exp": 1632493867,
"iat": 1632493567
}
OIDC를 사용하여 사용자 지정 작업 인증
사용자 지정 작업은 Actions 도구 키트 또는 curl
명령의 getIDToken()
메서드를 사용하여 OIDC를 통해 인증합니다.
자세한 내용은 OpenID Connect 참조을(를) 참조하세요.
OIDC에 대한 워크플로 업데이트
GitHub Actions 워크플로는 비밀 대신 OIDC 토큰을 사용하여 클라우드 공급자에서 인증을 받을 수 있습니다. 많은 인기 있는 클라우드 공급자는 워크플로에서 OIDC를 사용하는 프로세스를 간소화하는 공식 로그인 작업을 제공합니다. 특정 클라우드 공급자를 사용하여 워크플로를 업데이트하는 방법에 대한 자세한 내용은 배포 보안 강화을(를) 참조하세요.
다음 단계
OIDC 구성에 대한 자세한 내용은 배포 보안 강화을(를) 참조하세요.
OIDC에 대한 참조 정보는 OpenID Connect 참조을(를) 참조하세요.