Files
llm-wiki/raw/official-docs/google-oauth2-policies-environment-separation-official.md
T

11 KiB

title, source_type, url, archive_url, related_branches, related_projects, tags, status, confidence, created, last_reviewed
title source_type url archive_url related_branches related_projects tags status confidence created last_reviewed
official-doc / Google Identity — OAuth 2.0 Policies (deployment-tier separation & credential security) official-doc https://developers.google.com/identity/protocols/oauth2/policies
feature-keycloak-idp-brokering-google-client
keycloak-patterns
official-doc
keycloak-patterns
auth
oauth2
google-oidc
raw high 2026-07-16 2026-07-16

official-doc / Google Identity — OAuth 2.0 Policies (deployment-tier separation & credential security)

Layer: raw/official-docs/ — 외부 자료 원문 발췌·출처 기록.

Parent / 활용 branch

Branch 이 자료가 정당화하는 결정
raw/branch-notes/feature-keycloak-idp-brokering-google-client D7 — dev/staging/prod 환경별 Google OAuth (client/project) 분리 및 credential 처리 규칙(never-commit)의 공식 근거

출처 / Source

왜 저장했는지 / Why archived

feature-keycloak-idp-brokering-google-client branch의 D7 결정(환경별 OAuth client/project 분리)은 기존에 UNSUPPORTED_DECISION으로 라벨링되어 있었다. 이 페이지는 Google이 공식적으로 요구하는 "배포 단계별 별도 project" 규정과 그 적용 범위(= "production" app 정의), 그리고 credential 보안 취급 규칙의 1차 출처다.

핵심 인용 / Key quotes (verbatim)

[§Use separate projects for testing and production] "Some policies and requirements only apply to production apps. For this reason, you must create separate projects in the Google Cloud Console for each deployment tier, such as development, staging, and production."

[§Use separate projects for testing and production] "It isn't for personal use. An app is considered to be for personal use if it's not shared with anyone else or will be used by fewer than 100 people (all of whom are known personally to you)."

[§Use separate projects for testing and production] "It isn't used for development, testing, or staging. It isn't for internal use; that is, restricted to people in your Google Workspace or Cloud Identity organization."

[§Handle client credentials securely] "Treat your OAuth client credentials with extreme care, as they allow anyone who has them to use your app's identity to gain access to user information. Store your OAuth client information in a secure place and protect it, especially your client secret, just as you would a password." [...] "You must never commit client credentials into publicly available code repositories."

[§Register an appropriate OAuth client] "You must create a separate OAuth client for each platform on which your app will run, such as a web server, an Android app, an iOS app, or a limited-input device."

Claims Extracted / 추출된 주장

Claim ID Claim (이 자료가 직접 말하는 것) Evidence quote Strength Applies to Does not prove
GOOGLE-OAUTHPOLICY-C1 Google 정책상 "production" app 에 한해 배포 단계(development/staging/production)마다 별도 Google Cloud Console project 생성이 요구된다 [§Use separate projects for testing and production] "Some policies and requirements only apply to production apps. For this reason, you must create separate projects in the Google Cloud Console for each deployment tier, such as development, staging, and production." official-vendor-doc 이 페이지의 "production" 정의(GOOGLE-OAUTHPOLICY-C2)를 충족하는 앱 모든 앱(개인/내부용 포함)이 무조건 환경별 project 를 분리해야 한다는 것은 증명하지 않음 — production 여부가 선결 조건이며, 이 요구사항은 그 조건이 충족될 때만 발동
GOOGLE-OAUTHPOLICY-C2 "Production" app 은 (a) personal use 가 아니고 (b) dev/test/staging 용이 아니고 (c) internal(Workspace/Cloud Identity 조직) 용이 아닌 경우로 정의된다. "공유 안 함 또는 100명 미만(모두 개인적으로 아는 사람)" 은 personal use 로 분류되어 production 정의에서 제외된다 [§Use separate projects for testing and production] "It isn't for personal use. An app is considered to be for personal use if it's not shared with anyone else or will be used by fewer than 100 people (all of whom are known personally to you)." + "It isn't used for development, testing, or staging. It isn't for internal use; that is, restricted to people in your Google Workspace or Cloud Identity organization." official-vendor-doc 특정 앱이 GOOGLE-OAUTHPOLICY-C1(project 분리 의무)의 적용 대상인지 판정하는 기준 사용자 수·공유 범위가 향후에도 고정된다는 보장은 아님 — 100명 이상으로 확대되거나 개인 범위를 벗어나 공개되면 production 으로 전환되어 C1 이 발동됨을 암시할 뿐, 전환 시점의 절차는 이 인용에 없음
GOOGLE-OAUTHPOLICY-C3 OAuth client credential(특히 client secret)은 비밀번호와 동일하게 취급해야 하며, public code repository 에 절대 커밋해서는 안 된다 (secret manager 사용 권장) [§Handle client credentials securely] "Treat your OAuth client credentials with extreme care, ... just as you would a password." [...] "You must never commit client credentials into publicly available code repositories." official-vendor-doc 모든 OAuth 사용 앱 — 이 규칙은 "production" 스코프 절 밖(별도 섹션)에 있고, "Register an appropriate OAuth client" 절이 "every app that uses Google's OAuth 2.0 infrastructure" 를 대상으로 명시하므로 production/personal 구분 없이 적용 특정 secret manager 제품(Cloud Secret Manager 등) 사용을 강제하지는 않음 — "where possible" 권고 수준
GOOGLE-OAUTHPOLICY-C4 앱이 실행되는 플랫폼(web server / Android / iOS / limited-input device)마다 별도 OAuth client 를 등록해야 한다 [§Register an appropriate OAuth client] "You must create a separate OAuth client for each platform on which your app will run, such as a web server, an Android app, an iOS app, or a limited-input device." official-vendor-doc 플랫폼 단위 client 분리 원칙 자체 — production/personal 무관하게 "every app" 대상 절에 위치 Keycloak 서버가 Google 쪽에서 정확히 어떤 client type("web application" 등)에 해당하는지는 이 인용만으로 증명 안 됨 — Keycloak 공식 문서 별도 근거 필요

Usage Boundaries / 적용 경계

  • 이 자료가 직접 증명하는 것:
    • GOOGLE-OAUTHPOLICY-C1: Google 정책은 "production" app 요건을 충족하는 경우에만 배포 단계별 별도 project 생성을 의무화한다.
    • GOOGLE-OAUTHPOLICY-C2: "production" 여부의 판정 기준(공유 범위 100명 미만 + 개인적으로 아는 사람 전원 / dev·test·staging 용도 아님 / Workspace·Cloud Identity 내부용 아님).
    • GOOGLE-OAUTHPOLICY-C3, GOOGLE-OAUTHPOLICY-C4: credential 보안 취급과 플랫폼별 client 분리는 production 여부와 무관하게 "every app" 에 적용되는 별도 조항.
  • 핵심 긴장(CRITICAL) — D7 에 대한 조건부 근거:
    • branch feature-keycloak-idp-brokering-google-client 는 현재 documented-only / planned 단계의 개인 학습 프로젝트다. GOOGLE-OAUTHPOLICY-C2 의 "personal use" 예외 기준(공유 안 함 또는 100명 미만의 개인적으로 아는 사람) 을 문자 그대로 적용하면, 이 프로젝트는 현재 Google 이 정의하는 "production" app 이 아닐 가능성이 높다.
    • 따라서 GOOGLE-OAUTHPOLICY-C1(환경별 project 분리 의무)은 이 프로젝트에 현재 시점에서 "공식 의무"로 적용되지 않는다 — 이는 무조건적 mandate 가 아니라, 실사용자·실배포 단계가 생겨 "production" 기준을 충족하는 시점부터 조건부로 발동하는 요구사항이다. D7 을 이 자료로 정당화할 때는 "지금 당장 지켜야 하는 규정"이 아니라 "실 배포/실사용자 확대 시 반드시 준수해야 할 규정을 미리 설계에 반영한다"는 선제적 근거로 표현해야 한다.
    • 반면 GOOGLE-OAUTHPOLICY-C3(credential never-commit) 는 production 스코프 절 밖에 위치하므로, 개인 학습 프로젝트 단계에서도 지금 바로 적용되는 무조건적 규칙으로 취급 가능하다. D7 의 "credential 보안" 절반은 조건 없이 적용, "환경별 project 분리" 절반은 production 전환 시점부터 적용— 이 둘을 같은 강도로 서술하지 않는다.
  • 이 자료가 증명하지 않는 것:
    • Keycloak 이 Google IdP broker 로 등록될 때 Google 이 정의하는 정확히 어떤 client type 에 해당하는지 (GOOGLE-OAUTHPOLICY-C4 의 한계).
    • "production" 전환 판정을 Google 이 어떻게 감지·집행하는지의 절차(예: 자동 심사, 수동 신고 등) — 이 페이지에는 정의만 있고 집행 메커니즘은 없음.
  • 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
    • 현재 사용자 수·공개 범위가 실제로 "personal use" 예외 기준(100명 미만, 개인적으로 아는 사람) 을 충족하는지 재확인.
    • Keycloak Server Admin Guide 의 client type 권고(별도 raw 발췌 필요, keycloak-google-idp-setup 참조)와 대조.

메모 / Notes

  • Google 문서 구조상 "Use separate projects for testing and production" 절은 "production app" 정의 절 바로 뒤에 이어지며, 정의 절이 없으면 분리 요구사항의 스코프를 오독하기 쉽다 — 두 절을 항상 같이 인용해야 함(이번 발췌에서 반영).
  • "Handle client credentials securely" 와 "Register an appropriate OAuth client" 절은 문서 구조상 production-스코프 절 앞(또는 별도)에 위치 — production 조건과 무관한 general policy 로 판단(위 Usage Boundaries 근거).
  • WebFetch 1차 결과는 요약/재구성된 텍스트였음(아래 검증 절차 참고) — curl 로 원본 HTML 을 재획득해 실제 페이지 바이트와 대조 후 인용을 확정함.