OIDC 인증에 Google 사용하기

OIDC 인증에 Google 사용하기

주요 참고: Using OAuth 2.0 to Access Google APIs

  1. Google API Console을 방문합니다.
  2. 프로젝트를 만들거나 선택합니다.
  3. Menu > APIs & Services로 이동합니다.
  4. Credentials > Create Credentials > OAuth Client ID로 새 크레덴셜을 만듭니다.
  5. OAuth Consent Screen을 구성합니다. Application Name이 필요합니다. 저장합니다.
  6. 애플리케이션 유형 "Web Application"을 선택합니다.
  7. 승인된 [Redirect URIs]를 구성합니다.
  8. 클라이언트 ID와 시크릿을 저장합니다.

출처: 문서

본문

선택적 Google 전용 구성 (Optional google-specific configuration)

Vault JWT/OIDC 인증 방식에서 Google을 아이덴티티 프로바이더로 사용할 때 Google 전용 구성이 가능해요. 이 구성을 통해 Vault는 JWT/OIDC 인증 흐름 중 Google Workspace 그룹 멤버십과 사용자 정보를 얻을 수 있어요. Google Workspace에서 얻은 그룹 멤버십은 Identity 그룹 별칭 연결에 사용될 수 있어요. Google Workspace에서 얻은 사용자 정보는 claim_mappings을 통해 결과 인증 토큰과 별칭 메타데이터에 클레임 데이터를 복사하는 데 사용될 수 있어요.

설정 (Setup)

Google 전용 처리를 설정하려면 다음이 필요해요.

  • 도메인 전체 위임 API 클라이언트 접근을 부여하기 위한 슈퍼 관리자 역할이 있는 Google Workspace 계정, 또는 필요한 그룹 관리자 역할이 부여된 서비스 계정.
  • Google Cloud Platform에서 서비스 계정을 만들 수 있는 능력.
  • Admin SDK API 활성화.
  • 내부 사용자 유형의 OAuth 2.0 애플리케이션. 외부 사용자 유형을 권장하지 않습니다. Google 계정이 있는 모든 사용자가 Vault에 인증할 수 있게 되기 때문이에요.

Vault에서 Google Workspace 그룹과 사용자 정보를 가져오는 데 사용되는 Google 전용 처리는 인증·인가에 Google Workspace Domain-Wide Delegation of Authority 또는 GCP 서비스 계정에 부여된 그룹 관리자 역할 중 하나를 사용해요.

인증·인가 설정 단계 링크:

Optional: Set up domain-wide delegation for a service account 섹션의 11단계에서 부여할 유일한 OAuth 스코프는 다음과 같아야 해요.

  • https://www.googleapis.com/auth/admin.directory.group.readonly
  • https://www.googleapis.com/auth/admin.directory.user.readonly

이것은 서비스 계정에 기능을 가능하게 하는 최소 권한 집합을 주기 위한 중요한 보안 단계예요.

구성 (Configuration)

  • provider (string: <required>) — 프로바이더 이름. "gsuite"로 설정해야 해요.
  • gsuite_service_account (string: <optional>) — JSON 형식의 Google 서비스 계정 키 파일의 경로 또는 내용. 파일 경로로 주어지면 Vault가 실행 중인 호스트에서 읽을 수 있는 파일을 가리켜야 해요. JSON 내용으로 직접 주어지면 JSON을 올바르게 이스케이프해야 해요. 비워 두면 Application Default Credentials가 사용돼요.
  • gsuite_admin_impersonate (string: <optional>) — 가장(impersonate)할 Google Workspace 관리자의 이메일 주소.
  • fetch_groups (bool: false) — true로 설정하면 Google Workspace에서 그룹을 가져와요.
  • fetch_user_info (bool: false) — true로 설정하면 구성된 user_custom_schemas로 Google Workspace에서 사용자 정보를 가져와요.
  • groups_recurse_max_depth (int: <optional>) — 그룹 멤버십 재귀 최대 깊이. 기본값은 0이며 재귀하지 않음을 의미해요.
  • user_custom_schemas (string: <optional>) — Google Workspace custom schemas의 쉼표로 구분된 목록. custom schema 필드를 사용한 Google Workspace 사용자에 설정된 값은 claim_mappings와 함께 사용할 수 있는 클레임으로 가져와 제공돼요. fetch_user_info가 true일 때 필요해요.
  • impersonate_principal (string: <optional>) — Google Workspace에서 도메인 전체 위임이 부여된 서비스 계정 이메일. 서비스 계정 키를 사용하지 않고 도메인 전체 위임을 통해 Google Workspace Directory API에 접근할 때 필요해요. Vault가 실행 중인 서비스 계정에 이 서비스 계정에 대한 iam.serviceAccounts.signJwt 권한이 부여되어야 해요. gsuite_admin_impersonate가 지정되면 그 Workspace 사용자가 가장돼요.
  • domain (string: <optional>) — 그룹을 가져올 도메인. 워크스페이스가 둘 이상의 도메인으로 구성된 경우 설정하세요.

예시 구성:

vault write auth/oidc/config -<<EOF
{
    "oidc_discovery_url": "https://accounts.google.com",
    "oidc_client_id": "your_client_id",
    "oidc_client_secret": "your_client_secret",
    "default_role": "your_default_role",
    "provider_config": {
        "provider": "gsuite",
        "gsuite_service_account": "/path/to/service-account.json",
        "gsuite_admin_impersonate": "[email protected]",
        "fetch_groups": true,
        "fetch_user_info": true,
        "groups_recurse_max_depth": 5,
        "user_custom_schemas": "Education,Preferences",
        "impersonate_principal": "[email protected]"
    }
}
EOF

역할 (Role)

user_claim 값은 Google Workspace 그룹과 사용자 정보 조회가 성공하도록 sub 또는 email 중 하나로 설정되어야 해요.

예시 역할:

vault write auth/oidc/role/your_default_role \
    allowed_redirect_uris="http://localhost:8200/ui/vault/auth/oidc/oidc/callback,http://localhost:8250/oidc/callback" \
    user_claim="sub" \
    groups_claim="groups" \
    claim_mappings="/Education/graduation_date"="graduation_date" \
    claim_mappings="/Preferences/shirt_size"="shirt_size"

더 알아보기 (Learn more)

  • Vault JWT/OIDC 인증 방식에 대한 자세한 내용은 JWT 인증 방식 문서를 참고하세요.
  • Google OAuth 2.0에 대한 자세한 내용은 Google 문서를 참고하세요.