이 페이지는 플랫폼 관리자용으로 작성되었습니다.
데모 또는 테스트 목적으로만 Keycloak 또는 Google 싱글 사인온(SSO)으로 인증을 시도할 수 있습니다.
Keycloak로 인증
Keycloak은 오픈소스 소프트웨어 Identity and Access Management 제품이며 빠른 데모를 위해 OIDC 제공업체로 설정할 수 있습니다.
시작하기 전에
Keycloak을 설치하고 사용 설정하려면 연결 해제 모드에서 실행되는 Anthos 배포에서 액세스할 수 있는 인그레스 주소가 있는 Kubernetes 클러스터가 필요합니다. 이 페이지에서는 연결 해제 모드 실행되는 Anthos 관리자 클러스터가 예시로 사용됩니다.
또한 연결 해제 모드에서 실행되는 Anthos 관리 센터의 커스텀 도메인 이름을 만들어야 합니다. 관리 센터에 액세스할 도메인 이름 구성을 참조하세요.
다음과 같이 관리 센터 도메인 이름을 변수로 내보냅니다.
export ANTHOS_MANAGEMENT_CENTER=anthos.example.com
다음과 같이 비공개 레지스트리를 변수로 내보냅니다.
export PRIVATE_REGISTRY=10.200.0.2/library
Keycloak 이미지 다운로드 및 비공개 레지스트리에 푸시
dockerhub에서 Keycloak 이미지를 다운로드합니다.
actl images save \ --output keycloak-image \ jboss/keycloak:12.0.2
Keycloak 이미지를 비공개 레지스트리에 푸시합니다.
actl images push \ --images keycloak-image \ --private-registry=${PRIVATE_REGISTRY}
Keycloak 배포
DNS 구성을 업데이트하고 Keycloak을 배포하기 위해 인증서를 생성합니다.
Keycloak에 대해 IP를 노출하기 위해 Keycloak 서비스를 만듭니다.
kubectl create -f - <<EOF apiVersion: v1 kind: Namespace metadata: name: keycloak --- apiVersion: v1 kind: Service metadata: name: keycloak-svc namespace: keycloak labels: app: keycloak spec: ports: - name: http port: 80 targetPort: 8080 - name: https port: 443 targetPort: 8443 selector: app: keycloak type: LoadBalancer EOF
LoadBalancer에서 IP가 할당된 후, 다음과 같이 IP를 변수로 내보냅니다.
export KEYCLOAK_SVC_IP=$(kubectl get services -n keycloak \ -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
DNS 도메인 구성에 "A 레코드"를 추가하고 이를
${KEYCLOAK_SVC_IP}
로 설정합니다.export KEYCLOAK_SVC=keycloak.example.com
Keycloak이 TLS에 사용할 자체 서명 인증서를 생성합니다.
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -subj \ "/CN=${KEYCLOAK_SVC}" \ -addext "subjectAltName = DNS:localhost,DNS:${KEYCLOAK_SVC},IP:${KEYCLOAK_SVC_IP}" \ -out "tls.crt" -keyout "tls.key"
인증서 및 비공개 키를 클러스터에 업로드합니다.
kubectl create secret tls tls-config -n keycloak --cert=tls.crt \ --key=tls.key
다음 명령어를 실행하여 Keycloak을 배포합니다.
kubectl create -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: keycloak namespace: keycloak labels: app: keycloak spec: replicas: 1 selector: matchLabels: app: keycloak template: metadata: labels: app: keycloak spec: volumes: - name: tls-config-volume secret: secretName: tls-config items: - key: tls.crt path: tls.crt - key: tls.key path: tls.key containers: - name: keycloak # Set the image as original path but the actual image will be pulled from the registry mirror, # which was configured by 'actl push' command. image: jboss/keycloak:12.0.2 # Keycloak uses certificates stored in /etc/x509/https to set up TLS. # https://github.com/keycloak/keycloak-containers/blob/master/server/README.md#setting-up-tlsssl volumeMounts: - name: tls-config-volume mountPath: "/etc/x509/https" env: - name: KEYCLOAK_USER value: "admin" - name: KEYCLOAK_PASSWORD value: "admin" - name: PROXY_ADDRESS_FORWARDING value: "true" ports: - name: http containerPort: 8080 - name: https containerPort: 8443 readinessProbe: httpGet: path: /auth/realms/master port: 8080 EOF
Keycloak 사용자 및 클라이언트 설정
관리자 워크스테이션에서 Keycloak 콘솔을 열고 keycloak.yaml
파일에서 KEYCLOAK_USER
및 KEYCLOAK_PASSWORD
으로 로그인합니다. 기본적으로 이러한 값은 KEYCLOAK_USER=admin
및 KEYCLOAK_PASSWORD=admin
입니다. 필요한 경우 브라우저에서 자체 서명된 인증서를 수락합니다. Chrome에서 신뢰할 수 없는 인증서에 대한 경고가 표시되면 대화상자에 thisisunsafe
를 입력합니다.
echo "Keycloak console: https://${KEYCLOAK_SVC}"
렐름 만들기
- 왼쪽 위에서 마스터 위로 마우스를 가져가고 렐름 추가를 클릭합니다.
- 새 렐름의 이름으로
anthos
를 입력하고 만들기를 클릭합니다. - 토큰이 너무 일찍 만료되지 않도록 방지하기 위해 렐름 설정 > 토큰에서 액세스 토큰 수명을
1 Hour
로 변경하고 저장을 클릭합니다.
사용자 생성하기
- 왼쪽 탐색 메뉴에서 사용자를 클릭한 후 사용자 추가를 클릭합니다.
- 사용자에 대한 다음 설정을 구성한 후 저장을 클릭합니다.
- 사용자 이름:
anthos-platform-admin
- 이메일:
anthos-platform-admin@example.com
- 사용자 사용 설정: ON
- 이메일 확인: ON
- 사용자 이름:
- 사용자 인증 정보 탭에서 비밀번호 및 비밀번호 확인 필드를 입력합니다. 비밀번호 설정을 클릭하고 프롬프트에 따라 확인합니다.
클라이언트 만들기
- 왼쪽 탐색 메뉴에서 클라이언트를 클릭한 후 만들기를 클릭합니다.
- 클라이언트에 대한 다음 설정을 구성한 후 저장을 클릭합니다.
ANTHOS_MANAGEMENT_CENTER
는 관리 센터에 사용하는 커스텀 도메인 이름입니다.- 클라이언트 ID: anthos
- 클라이언트 프로토콜: openid-connect
- 루트 URL: https://
ANTHOS_MANAGEMENT_CENTER
- 새로 생성된 클라이언트의 관리 페이지로 이동합니다.
- 클라이언트 관리 페이지의 설정 탭에서 다음 단계를 수행합니다.
- 액세스 유형을
confidential
로 설정합니다. - 다음 URI를 유효한 리디렉션 URI에 추가합니다.
- http://localhost:9879/callback
- https://
ANTHOS_MANAGEMENT_CENTER
/_gcp_anthos_oidc_callback
- 저장을 클릭합니다.
- 액세스 유형을
- 클라이언트 관리 페이지의 사용자 인증 정보 탭에서 클라이언트 ID 및 보안 비밀을 클라이언트 인증자로 선택합니다.
- 보안 비밀을 기록해 둡니다.
(권장) Keycloak에서 그룹 멤버십 설정
- 왼쪽 탐색 메뉴에서 그룹을 클릭한 다음 신규를 클릭합니다.
- 그룹 이름
anthos-platform-admin-group
을 입력합니다. - 왼쪽에 있는 사용자 탭으로 돌아가고 모든 사용자 보기를 클릭합니다.
- 바로 전에 만든 사용자(anthos-platform-admin)를 클릭하고 그룹 탭을 클릭합니다.
- 사용 가능한 그룹에서 만든 그룹인
anthos-platform-admin-group
을 선택하고 가입을 클릭합니다. - anthos 클라이언트 관리 페이지로 돌아갑니다.
- 매퍼 탭을 클릭한 다음 만들기를 클릭합니다.
- 이 매퍼의 이름
anthos-platform-admin-group-mapper
를 입력합니다. - 매퍼 유형 드롭다운 목록에서 그룹 멤버십을 선택합니다.
Token Claim Name
은 인증 토큰에 표시되는 속성 값입니다. 연결 해제된 모드에서 실행되는 Anthos의 기본값은 '그룹'이므로 이 필드에groups
를 사용할 수 있습니다.Token Claim Name
이름이groups
이 아니면 OIDC 구성의GroupsClaim
필드를 이 값으로 수정해야 합니다.- 전체 그룹 경로가 사용 중지되었는지 확인합니다.
- ID 토큰에 추가, 액세스 토큰에 추가, userinfo에 추가가 모두 사용 설정되었는지 확인합니다.
- 저장을 클릭합니다.
- 이 매퍼의 이름
OIDC 인증 사용 설정
다음 단계에서 사용할 OIDC 제공업체 URL을 가져옵니다.
다음 명령어를 실행합니다.
export ISSUER_URL=https://${KEYCLOAK_SVC}/auth/realms/anthos echo "Issuer URL: ${ISSUER_URL}"
이전의
tls.crt
를 사용하여 Base64로 인코딩된 인증서를 생성합니다.export BASE64_CERT=$(openssl base64 -A -in tls.crt) echo "Use the following string as the base64-encoded certificate for the OIDC provider: ${BASE64_CERT}"
관리 센터 콘솔을 사용한 권장 방식
- 관리 센터 Console에서 ID 및 액세스 메뉴를 엽니다.
- ID 탭에서 Anthos Identity Service(OIDC) 설정을 클릭합니다.
다음 필드를 완료하여 Keycloak의 프로필을 만든 후 제출을 클릭합니다.
- 프로필 이름:
keycloak
- OIDC 제공업체 URL: OIDC 인증 사용 설정 섹션의 발급기관 URL입니다.
- OIDC 클라이언트 ID:
anthos
- OIDC 클라이언트 보안 비밀번호: 클라이언트 만들기 섹션의 클라이언트 보안 비밀번호입니다.
- 사용자 이름 클레임:
email
- 사용자 이름 프리픽스:
keycloak-
- 그룹 클레임: 그룹 멤버십 설정 섹션의 그룹 클레임입니다. 이 필드를 비워 둘 경우 값은
groups
입니다. - 그룹 프리픽스:
keycloak-
- 범위:
email openid
- 추가 매개변수:
access_type=offline
- 인증 기관 데이터: OIDC 인증 사용 설정 섹션의 base64 인코딩 인증서 사용
- 프로필 이름:
클러스터에 프로필 적용을 클릭하고 관리자 클러스터 탭을 클릭합니다.
프로필에 대해 바로 전에 만든 'keycloak' 프로필을 선택합니다.
도메인 이름에
ANTHOS_MANAGEMENT_CENTER
를 입력합니다.초기 플랫폼 관리자의 경우 항상 사용자 이름 앞에 사용자 프리픽스를 추가합니다. 예를 들어
anthos-platform-admin@example.com
을 추가하는 경우keycloak-anthos-platform-admin@example.com
을 입력합니다.제출을 클릭하고 여러 시스템 구성요소가 다시 구성되도록 1분 정도 기다립니다.
시크릿 창에서 https://
ANTHOS_MANAGEMENT_CENTER
로 이동합니다.anthos-platform-admin
으로 로그인할 수 있는 Keycloak 로그인 페이지로 리디렉션됩니다(영구 비밀번호를 설정한 후).
YAML 파일을 적용하는 대안적인 접근 방법
도메인의 IDP 제공업체를 설정합니다.
DomainConfig
가 이미 도메인에 대해 생성된 경우 객체를 패치하여 이 명령어로 도메인에 사용할 인증 메서드 이름을 설정합니다.kubectl patch domainconfig anthos.example.com --type=json -p='[{"op": "replace", "path": "/spec/authMethodName", "value":"keycloak"}]'
도메인에
DomainConfig
가 생성되지 않았으면 다음 명령어를 사용하여 만듭니다.kubectl create -f - <<EOF apiVersion: managementcenter.anthos.cloud.google.com/v1 kind: DomainConfig metadata: name: anthos.example.com spec: authMethodName: keycloak EOF
다음 콘텐츠로
clientconfig-patch.yaml
을 만듭니다.# Use this to set the OIDC configuration of Keycloak: # kubectl patch ClientConfig default -n kube-public --type=merge --patch $(cat clientconfig-patch.yaml) spec: authentication: # The name of the OIDC configuration to create. - name: keycloak oidc: # ID for the client application that makes authentication requests to the OpenID provider. clientID: anthos # ID for the client application that makes authentication requests to the OpenID provider. clientSecret: YOUR_CLIENT_SECRET # The URI to redirect users going through the OAuth flow using cloud console. # This is not supported by Anthos running in disconnected mode. cloudConsoleRedirectURI: http://cloud.console.not.enabled # Additional key-value parameters (comma-separated) to send to the OpenID provider. extraParams: access_type=offline # URL where authorization requests are sent to your OpenID. issuerURI: YOUR_ISSUER_URI # The redirect URL that kubectl uses for authorization. kubectlRedirectURI: http://localhost:9879/callback # Additional scopes to send to the OpenID provider. scopes: openid email # JWT claim to use as the username. You can choose other claims, such as email or name, # depending on the OpenID provider. However, claims other than email are prefixed # with the issuer URL to prevent naming clashes. userClaim: email # A base64-encoded PEM-encoded certificate for the OIDC provider. To create the string, # encode the certificate, including headers, into base64. Include the resulting string # in certificateAuthorityData as a single line. certificateAuthorityData: YOUR_CERTIFICATE
Keycloak 설정을 사용하여
clientconfig-patch.yaml
을 수정합니다.sed -i "s|YOUR_ISSUER_URI|${ISSUER_URL}|g" clientconfig-patch.yaml sed -i "s|YOUR_CERTIFICATE|${BASE64_CERT}|g" clientconfig-patch.yaml
YOUR_CLIENT_SECRET
을 Keycloak의 사용자 인증 정보 탭에서 가져온 클라이언트 보안 비밀번호로 바꿉니다.다음 명령어를 실행하여 OIDC를 구성합니다.
kubectl patch ClientConfig default -n kube-public --type=merge \ --patch "$(cat clientconfig-patch.yaml)"
여러 시스템 구성요소가 다시 구성되도록 1분 정도 기다립니다.
승인 역할 구성의 안내에 따라 초기 플랫폼 관리자 계정을 설정합니다.
시크릿 창에서 https://
ANTHOS_MANAGEMENT_CENTER
로 이동합니다.anthos-platform-admin
으로 로그인할 수 있는 Keycloak 로그인 페이지로 리디렉션됩니다(영구 비밀번호를 설정한 후).
Keycloak 삭제
Keycloak 데모 사용을 완료했으면 Keycloak 설치를 삭제합니다.
kubectl delete ns keycloak
Google SSO로 인증
Google SSO는 Anthos 비공개 모드에서 사용할 수 없습니다. Google SSO를 사용하려면 클러스터와 브라우저가 Google의 SSO 서버에 연결할 수 있어야 합니다. Google의 SSO 서버는 사용자 클러스터에 연결할 필요가 없습니다.
- Google Cloud 콘솔에 로그인하고 적합한 프로젝트를 선택합니다.
- 'API 및 서비스 > OAuth 동의 화면' 섹션에 액세스합니다.
- 새 OAuth 동의 화면을 만듭니다. 이 정보가 사용자에게 표시됩니다.
- 애플리케이션 홈페이지를 관리 URL로 설정합니다.
- API 및 서비스 > 사용자 인증 정보 섹션에서 다음을 수행합니다.
- 사용자 인증 정보 만들기를 클릭합니다.
- 새 OAuth 클라이언트 ID를 만듭니다.
- 애플리케이션 유형을 웹 애플리케이션으로 설정합니다.
- 관련 이름을 선택합니다.
- 자바스크립트 원본의 경우
https://anthos.example.com
을 설정합니다. 여기서https://anthos.example.com
은 관리 센터의 도메인 이름입니다. - 승인된 리디렉션 URI의 경우 다음을 설정합니다.
https://anthos.example.com/_gcp_anthos_oidc_callback
http://localhost:9879/callback
- 클라이언트 ID 및 클라이언트 보안 비밀을 AdminUI 구성에 복사합니다.
- OIDC 공급자 URL을
https://accounts.google.com
으로 설정합니다. Username Claim
을email
로,Scopes
를openid email
로 설정합니다.- 추가 매개변수를
prompt=consent,access_type=offline
으로 설정합니다. 그렇지 않으면 Kubernetes API 서버로 로그인할 수 없습니다. - 플랫폼 관리자 권한을 부여할 사용자 이메일의 초기 목록(쉼표로 구분)을 추가합니다.
Save
를 클릭합니다.