OIDC identity 공급자

OIDC identity 공급자

Vault는 OpenID Connect(OIDC) identity 공급자예요. 덕분에 OIDC 프로토콜을 말하는 클라이언트 애플리케이션은 최종 사용자를 인증할 때 Vault의 identity 소스와 다양한 인증 방법을 활용할 수 있어요. 클라이언트 애플리케이션은 자신의 인증 로직을 Vault와 대화하도록 구성할 수 있어요. 일단 활성화되면 Vault는 기존 인증 방법을 통해 다른 identity 공급자로 가는 다리 역할을 해요. 클라이언트 애플리케이션은 Vault identity 정보의 사용자 지정 템플릿을 활용해 최종 사용자의 identity 정보를 얻을 수도 있어요.

참고: 구성 리소스와 OIDC 엔드포인트에 대한 더 자세한 정보는 OIDC provider concepts 페이지를 방문해 주세요.

출처: 문서

본문

설정(Setup)

Vault OIDC 공급자 시스템은 identity 시크릿 엔진 위에 구축돼요. 이 시크릿 엔진은 기본적으로 마운트되며 비활성화하거나 이동할 수 없어요.

각 Vault 네임스페이스에는 기본 OIDC 공급자와 키가 있어요. 이 내장 구성은 클라이언트 애플리케이션이 최소한의 구성으로 Vault를 identity 소스로 사용하기 시작할 수 있게 해요. 내장 구성과 고급 옵션에 대한 자세한 내용은 OIDC provider concepts 페이지를 참고해 주세요.

다음 단계는 클라이언트 애플리케이션이 Vault를 OIDC 공급자로 사용할 수 있게 하는 최소 구성을 보여줘요.

  1. Vault 인증 메서드를 활성화해요.

    $ vault auth enable userpass
    Success! Enabled userpass auth method at: userpass/
    

    OIDC 흐름에서는 어떤 Vault 인증 메서드도 사용할 수 있어요. 단순함을 위해 userpass 인증 메서드를 활성화할게요.

  2. 사용자를 생성해요.

    $ vault write auth/userpass/users/end-user password="securepassword"
    Success! Data written to: auth/userpass/users/end-user
    

    이 사용자는 클라이언트 애플리케이션을 통해 Vault에 인증하게 되며, 이 애플리케이션을 OIDC relying party라고 불러요.

  3. 클라이언트 애플리케이션을 생성해요.

    $ vault write identity/oidc/client/my-webapp \
        redirect_uris="https://localhost:9702/auth/oidc-callback" \
        assignments="allow_all"
    Success! Data written to: identity/oidc/client/my-webapp
    

    이 작업은 OIDC relying party를 구성하는 데 사용할 수 있는 클라이언트 애플리케이션을 만들어요. 기밀(confidential)·공개(public) 클라이언트를 포함한 다양한 클라이언트 유형에 대한 자세한 내용은 클라이언트 애플리케이션 섹션을 참고하세요. assignments 파라미터는 클라이언트 애플리케이션을 통해 인증이 허용되는 Vault 엔티티와 그룹을 제한해요. 기본적으로 어떤 Vault 엔티티도 허용되지 않아요. 모든 Vault 엔티티가 인증하도록 허용하려면 내장된 allow_all 할당(assignment)이 제공돼요.

  4. 클라이언트 자격 증명을 읽어요.

    $ vault read identity/oidc/client/my-webapp
    Key                 Value
    ---                 -----
    access_token_ttl    24h
    assignments         [allow_all]
    client_id           GSDTnn3KaOrLpNlVGlYLS9TVsZgOTweO
    client_secret       hvo_secret_gBKHcTP58C4aq7FqPWsuqKgpiiegd7ahpifGae9WGkHRCwFEJTZA9KGdNVpzE0r8
    client_type         confidential
    id_token_ttl        24h
    key                 default
    redirect_uris       [https://localhost:9702/auth/oidc-callback]
    

    client_idclient_secret는 클라이언트 애플리케이션의 자격 증명이에요. 이 값은 보통 OIDC relying party를 구성할 때 필요해요.

  5. OIDC discovery 구성을 읽어요.

    $ curl -s http://127.0.0.1:8200/v1/identity/oidc/provider/default/.well-known/openid-configuration
    {
      "issuer": "http://127.0.0.1:8200/v1/identity/oidc/provider/default",
      "jwks_uri": "http://127.0.0.1:8200/v1/identity/oidc/provider/default/.well-known/keys",
      "authorization_endpoint": "http://127.0.0.1:8200/ui/vault/identity/oidc/provider/default/authorize",
      "token_endpoint": "http://127.0.0.1:8200/v1/identity/oidc/provider/default/token",
      "userinfo_endpoint": "http://127.0.0.1:8200/v1/identity/oidc/provider/default/userinfo",
      "request_parameter_supported": false,
      "request_uri_parameter_supported": false,
      "id_token_signing_alg_values_supported": [ "RS256", "RS384", "RS512", "ES256", "ES384", "ES512", "EdDSA" ],
      "response_types_supported": [ "code" ],
      "scopes_supported": [ "openid" ],
      "subject_types_supported": [ "public" ],
      "grant_types_supported": [ "authorization_code" ],
      "token_endpoint_auth_methods_supported": [ "none", "client_secret_basic", "client_secret_post" ],
      "code_challenge_methods_supported": [ "plain", "S256" ]
    }
    

    각 Vault OIDC 공급자는 discovery 메타데이터를 게시해요. issuer 값은 보통 OIDC relying party를 구성할 때 필요해요.

사용법(Usage)

Vault 인증 메서드와 클라이언트 애플리케이션을 구성한 뒤에는 다음 세부 정보로 OIDC relying party를 구성해 최종 사용자 인증을 Vault에 위임할 수 있어요.

  • client_id — 클라이언트 애플리케이션의 ID
  • client_secret — 클라이언트 애플리케이션의 시크릿
  • issuer — Vault OIDC 공급자의 발급자

여러 HashiCorp 제품이 OIDC 인증 메서드를 제공해요. 즉 이들은 OIDC 프로토콜을 사용해 Vault를 identity 소스로 활용할 수 있어요. 다른 HashiCorp 제품에 대한 OIDC 인증 구성 세부 사항은 다음 링크를 참고하세요.

  • Boundary
  • Consul
  • Waypoint
  • Nomad

그 외에는 해당 OIDC relying party의 문서를 사용법 세부 사항으로 참고하세요.

지원되는 흐름(Supported flows)

Vault OIDC 공급자 기능은 현재 다음 인증 흐름을 지원해요.

  • Authorization Code Flow

튜토리얼(Tutorial)

HashiCorp Boundary를 구성해 OIDC 프로토콜로 Vault를 identity 소스로 활용하는 방법을 배우려면 Vault as an OIDC Identity Provider 튜토리얼을 참고하세요.

API

Vault OIDC 공급자 기능은 완전한 HTTP API를 갖고 있어요. 자세한 내용은 OIDC identity provider API를 참고해 주세요.

더 알아보기 (Learn more)

  • OIDC provider concepts 페이지에서 구성 리소스와 엔드포인트를 확인해 보세요.
  • Vault as an OIDC Identity Provider 튜토리얼을 따라 해 보세요.
  • OIDC identity provider API 문서를 확인해 보세요.