OIDC 인증에 Azure AD 사용하기
OIDC 인증에 Azure AD 사용하기
참고: claims-mapping 기능을 사용한 결과로 사용자 지정 서명 키가 있는 Azure Active Directory 애플리케이션은 현재 OIDC 인증에서 지원되지 않아요.
참고: Azure Active Directory v2.0 and the OpenID Connect protocol
출처: 문서
본문
- Azure 테넌트를 선택합니다.
- Azure Active Directory로 이동해 Vault용 애플리케이션을 등록합니다.
- "Web" 유형으로 Redirect URIs를 추가합니다. CLI 접근용 하나, Vault UI 접근용 하나의 두 개의 redirect URI를 포함할 수 있어요.
http://localhost:8250/oidc/callbackhttps://hostname:port_number/ui/vault/auth/oidc/oidc/callback
- "Application (client) ID"를 기록합니다.
oidc_client_id로 필요해요. - Endpoints 아래에서 OpenID Connect 메타데이터 문서 URL을 복사하고
/well-known...부분은 생략합니다.- 엔드포인트 URL(
oidc_discovery_url)은 https://login.microsoftonline.com/tenant-guid-dead-beef-aaaa-aaaa/v2.0처럼 보일 거예요.
- 엔드포인트 URL(
- (공개 클라이언트의 경우 선택) Certificates & secrets 아래에서 클라이언트 시크릿을 추가하고, 그 시크릿 값을 Vault의
oidc_client_secret으로 필요하므로 기록합니다. 공개 클라이언트(모바일 앱, SPA, 데스크톱 애플리케이션)의 경우 시크릿 조회를 건너뛰고 PKCE를 사용할 수 있어요. - Token configurations 아래에서 groups 클레임을 추가합니다. 클레임에서 "Customize token properties by type"에 대해 선택된 옵션 중 하나는 ID여야 해요.
- API permissions 아래의 권한에 그룹과 사용자를 읽을 권한이 포함되어 있는지 확인합니다.
AD 그룹을 Vault 외부 그룹에 연결하기
참고: Azure Active Directory with OIDC Auth Method and External Groups
AD 그룹을 Vault 외부 그룹과 연결하려면 Azure AD v2.0 엔드포인트가 필요해요. Azure AD 그룹이 사용할 Vault 정책을 설정해야 해요.
- Azure Active Directory로 이동해 Vault 애플리케이션을 선택합니다.
- Token configuration으로 가서 Add groups claim을 클릭합니다. 클레임에서 반환하려는 사용자 그룹에 따라 "All" 또는 "SecurityGroup"을 선택합니다.
- Vault에서 OIDC 인증 방식을 활성화합니다.
- 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"
- 다음으로 OIDC 역할을 구성합니다.
user_claim은 Azure의 권장 사항에 따라"sub"또는"oid"여야 해요.allowed_redirect_uris는 Vault CLI와 UI 접근을 위한 두 개의 redirect URI여야 합니다.groups_claim은"groups"로 설정해야 합니다.oidc_scopes는"https://graph.microsoft.com/.default 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="https://graph.microsoft.com/.default profile" \
policies=default
- Vault에서 외부 그룹을 만듭니다. 그룹 별칭에 필요하므로 그룹 ID를 기록합니다.
- Vault에서 OIDC 인증 방식에서 OIDC accessor ID를 가져옵니다. 그룹 별칭의
mount_accessor에 필요해요. - Vault의 외부 그룹에 연결할 Azure AD 그룹으로 이동합니다. 그룹 별칭 이름으로 필요하므로
objectId를 기록합니다. - 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 앱에 적절한 권한을 설정하려면:
- Azure에서 "App Registrations" 아래 애플리케이션을 찾습니다.
- 애플리케이션의 "API Permissions" 페이지로 이동합니다.
- 권한을 추가합니다.
- "Microsoft Graph"를 선택합니다.
- "Delegated permissions"를 선택합니다.
- User.Read 권한을 추가합니다.
- "Grant admin consent for Default Directory" 체크박스를 선택합니다.
"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
- 사용자의 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"