공부/Open Source
[Airflow/helm] Keycloak OAuth 붙이기
haejang
2024. 8. 4. 17:34
728x90
728x90
# 사용 차트
User Community 버전 / 8.8.0
https://artifacthub.io/packages/helm/airflow-helm/airflow/8.8.0
# 1. Keycloak Client 생성
참고로 난 keycloak 21버전을 사용한다.
>> keycloak 설치 글 : [Keycloak 21] k8s cluster에 helm chart로 설치하기
Client > Create client
Client Secret이 필요하므로 Client authentication을 활성화시킨다.
Valid redirect URIs 에는 `*` 을 추가시켜 주자
# 2. open id Client Scope 생성 (realm 단위)
https://www.inflearn.com/community/questions/735104/keycloack-userinfo-403-forbidden-error
애를 많이 먹은 부분. 키클락 최신 버전에서는 openid scope 를 생성해줘야 한다고 한다
Client scopes > Create client scope
openid 란 이름으로 Default OpenID Connect scope 생성
# 3. Airflow helm value 추가
web:
webserverConfig:
stringOverride: |
from flask_appbuilder.security.manager import AUTH_OAUTH
AUTH_TYPE = AUTH_OAUTH
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = "Admin"
OAUTH_PROVIDERS = [
{
"name": "keycloak",
"icon": "fa-key",
"token_key": "access_token",
"remote_app": {
"client_id": "<KEYCLOAK_CLIENT_ID>",
"client_secret": "<KEYCLOAK_CLIENT_SECRET>",
"api_base_url": "https://<KEYCLOAK_DOMAIN>/realms/<KEYCLOAK_REALM>/protocol/openid-connect",
"client_kwargs": {
"scope": "email profile openid"
},
"access_token_url": "https://<KEYCLOAK_DOMAIN>/realms/<KEYCLOAK_REALM>/protocol/openid-connect/token",
"authorize_url": "https://<KEYCLOAK_DOMAIN>/realms/<KEYCLOAK_REALM>/protocol/openid-connect/auth",
"request_token_url": None,
"jwks_uri": "http://<KEYCLOAK_DOMAIN>/realms/<KEYCLOAK_REALM>/protocol/openid-connect/certs",
},
},
]
AUTH_ROLES_MAPPING = {}
AUTH_ROLES_SYNC_AT_LOGIN = True
PERMANENT_SESSION_LIFETIME = 1800
`AUTH_ROLES_MAPPING` 을 통해 그룹별 권한 관리도 할 수 있을 것 같은데, 이리저리 시도해봤지만 난 실패했다.
-> 그래서 그냥 모두에게 Admin 줌 (`AUTH_USER_REGISTRATION_ROLE`)
끝
728x90
728x90