OIDC 인증에 Azure AD 사용하기

OIDC 인증에 Azure AD 사용하기

참고: claims-mapping 기능을 사용한 결과로 사용자 지정 서명 키가 있는 Azure Active Directory 애플리케이션은 현재 OIDC 인증에서 지원되지 않아요.

참고: Azure Active Directory v2.0 and the OpenID Connect protocol

출처: 문서

본문

  1. Azure 테넌트를 선택합니다.
  2. Azure Active Directory로 이동해 Vault용 애플리케이션을 등록합니다.
  3. "Web" 유형으로 Redirect URIs를 추가합니다. CLI 접근용 하나, Vault UI 접근용 하나의 두 개의 redirect URI를 포함할 수 있어요.
    • http://localhost:8250/oidc/callback
    • https://hostname:port_number/ui/vault/auth/oidc/oidc/callback
  4. "Application (client) ID"를 기록합니다. oidc_client_id로 필요해요.
  5. Endpoints 아래에서 OpenID Connect 메타데이터 문서 URL을 복사하고 /well-known... 부분은 생략합니다.
  6. (공개 클라이언트의 경우 선택) Certificates & secrets 아래에서 클라이언트 시크릿을 추가하고, 그 시크릿 값을 Vault의 oidc_client_secret으로 필요하므로 기록합니다. 공개 클라이언트(모바일 앱, SPA, 데스크톱 애플리케이션)의 경우 시크릿 조회를 건너뛰고 PKCE를 사용할 수 있어요.
  7. Token configurations 아래에서 groups 클레임을 추가합니다. 클레임에서 "Customize token properties by type"에 대해 선택된 옵션 중 하나는 ID여야 해요.
  8. API permissions 아래의 권한에 그룹과 사용자를 읽을 권한이 포함되어 있는지 확인합니다.

AD 그룹을 Vault 외부 그룹에 연결하기

참고: Azure Active Directory with OIDC Auth Method and External Groups

AD 그룹을 Vault 외부 그룹과 연결하려면 Azure AD v2.0 엔드포인트가 필요해요. Azure AD 그룹이 사용할 Vault 정책을 설정해야 해요.

  1. Azure Active Directory로 이동해 Vault 애플리케이션을 선택합니다.
  2. Token configuration으로 가서 Add groups claim을 클릭합니다. 클레임에서 반환하려는 사용자 그룹에 따라 "All" 또는 "SecurityGroup"을 선택합니다.
  3. Vault에서 OIDC 인증 방식을 활성화합니다.
  4. Azure에서 기록한 oidc_client_id(애플리케이션 ID)와 oidc_discovery_url(엔드포인트 URL)로 OIDC 인증 방식을 구성합니다. 기밀 클라이언트에는 oidc_client_secret(클라이언트 시크릿)을 포함하고, PKCE를 사용하는 공개 클라이언트에는 생략합니다.
vault write auth/oidc/config \
   oidc_client_id="your_client_id" \
   oidc_client_secret="your_client_secret" \
   default_role="your_default_role" \
   oidc_discovery_url="https://login.microsoftonline.com/tenant_id/v2.0"
  1. 다음으로 OIDC 역할을 구성합니다.
vault write auth/oidc/role/your_default_role \
   user_claim="sub" \
   allowed_redirect_uris="http://localhost:8250/oidc/callback,https://online_version_hostname:port_number/ui/vault/auth/oidc/oidc/callback"  \
   groups_claim="groups" \
   oidc_scopes="https://graph.microsoft.com/.default profile" \
   policies=default
  1. Vault에서 외부 그룹을 만듭니다. 그룹 별칭에 필요하므로 그룹 ID를 기록합니다.
  2. Vault에서 OIDC 인증 방식에서 OIDC accessor ID를 가져옵니다. 그룹 별칭의 mount_accessor에 필요해요.
  3. Vault의 외부 그룹에 연결할 Azure AD 그룹으로 이동합니다. 그룹 별칭 이름으로 필요하므로 objectId를 기록합니다.
  4. Vault에서 외부 그룹에 대한 그룹 별칭을 만들고 objectId를 그룹 별칭 이름으로 설정합니다.
vault write identity/group-alias \
   name="your_ad_group_object_id" \
   mount_accessor="vault_oidc_accessor_id" \
   canonical_id="vault_external_group_id"

선택적 Azure 전용 구성 (Optional azure-specific configuration)

사용자가 200개 이상의 그룹(직접 또는 간접)의 구성원이라면 Azure는 _claim_names_claim_sources를 보내요. 예를 들어 반환된 클레임은 다음과 같을 수 있어요.

{
  "_claim_names": {
    "groups": "src1"
  },
  "_claim_sources": {
    "src1": {
      "endpoint": "https://graph.windows.net...."
    }
  }
}

OIDC 인증 방식 역할은 엔드포인트 URL에 사용자 ID를 포함하도록 구성될 수 있으며, Vault가 사용자의 그룹을 검색하는 데 사용해요. Microsoft Graph API에서 추가 그룹을 요청하려면 Azure 앱에 추가 API 권한을 추가해야 해요.

Azure 앱에 적절한 권한을 설정하려면:

  1. Azure에서 "App Registrations" 아래 애플리케이션을 찾습니다.
  2. 애플리케이션의 "API Permissions" 페이지로 이동합니다.
  3. 권한을 추가합니다.
  4. "Microsoft Graph"를 선택합니다.
  5. "Delegated permissions"를 선택합니다.
  6. User.Read 권한을 추가합니다.
  7. "Grant admin consent for Default Directory" 체크박스를 선택합니다.
  8. "provider_config"를 Azure로 설정해 Vault에서 OIDC 인증 방식을 구성합니다.
vault write auth/oidc/config -<<"EOH"
{
  "oidc_client_id": "your_client_id",
  "oidc_client_secret": "your_client_secret",
  "default_role": "your_default_role",
  "oidc_discovery_url": "https://login.microsoftonline.com/tenant_id/v2.0",
  "provider_config": {
     "provider": "azure"
  }
}
EOH
  1. 사용자의 ID가 JWT로 돌아오도록 oidc_scopes"profile"을 추가합니다.
vault write auth/oidc/role/your_default_role \
 user_claim="sub" \
 allowed_redirect_uris="http://localhost:8250/oidc/callback,https://online_version_hostname:port_number/ui/vault/auth/oidc/oidc/callback"  \
 groups_claim="groups" \
 oidc_scopes="profile" \
 policies="default"

더 알아보기 (Learn more)

  • Vault JWT/OIDC 인증 방식에 대한 자세한 내용은 JWT 인증 방식 문서를 참고하세요.
  • Azure AD OIDC 프로토콜에 대한 자세한 내용은 Azure 문서를 참고하세요.