From cd4854754a1d06d9d05670596d4d4f43b6565dc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=BC=ED=98=81?= Date: Mon, 5 Oct 2026 13:17:04 +0000 Subject: [PATCH] =?UTF-8?q?docs(release):=20WIF=20provider=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EB=AA=A9=EB=A1=9D=EC=9D=84=20gcloud=20=EC=8B=A4?= =?UTF-8?q?=EC=B8=A1=EA=B0=92=EC=9C=BC=EB=A1=9C=20=EA=B3=A0=EC=B9=9C?= =?UTF-8?q?=EB=8B=A4=20(#850)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/release/firebase-wif-canary.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/release/firebase-wif-canary.md b/docs/release/firebase-wif-canary.md index 0450f1cfe..ad1feafc2 100644 --- a/docs/release/firebase-wif-canary.md +++ b/docs/release/firebase-wif-canary.md @@ -23,16 +23,17 @@ WIF로 인증하고, `FIREBASE_SERVICE_ACCOUNT_JSON` 롤백 경로는 #1566에 1. GitHub OIDC용 workload identity pool/provider와 Firebase App Distribution 전용 최소 권한 service account를 준비한다. -2. provider attribute mapping에 `repository`, `repository_owner`, `ref`, `workflow_ref`, - `environment` claim을 포함한다. -3. attribute condition은 처음에 다음을 동시에 제한하도록 설계했다. 지금 condition은 `workflow_ref` - 허용 목록에 `release-distribution.yml`과 `release-play-internal.yml`도 들어 있다. 현재 값의 정본은 - Play release runbook 사전 준비 3번이다. +2. provider attribute mapping은 `google.subject`(`sub`), `repository`, `repository_owner`, `ref`, + `workflow_ref`를 싣는다. `environment` claim은 매핑하지 않는다. +3. attribute condition은 다음을 동시에 제한한다(2026-10-05 gcloud 조회). - repository: `Afternote/Afternote-FE` - - owner: `Afternote` - ref: `refs/heads/develop` 또는 `refs/heads/main` - - workflow: `.github/workflows/firebase-wif-canary.yml` - - environment: `release-distribution` + - workflow_ref: `firebase-wif-canary.yml`, `release-distribution.yml`, `release-play-internal.yml` + 중 하나로 시작 + + owner와 environment는 조건에 없다. owner는 repository 전체 이름 일치가 대신하고, environment + 승인은 provider가 아니라 각 워크플로의 GitHub Environment 보호 규칙이 건다. 워크플로별 자격 분리는 + 아래 5번의 서비스 계정 바인딩이 맡는다. 4. 보호된 Environment에 `GCP_WORKLOAD_IDENTITY_PROVIDER`와 `GCP_FIREBASE_SERVICE_ACCOUNT`를 masked secret으로 등록한다. 5. Firebase 서비스 계정 `afternote-ci`의 `roles/iam.workloadIdentityUser`는 저장소 전체가 아니라