링크세상 링크모음
링크세상 링크모음 링크 애니 웹툰 링크 드라마 영화 링크 세상의모든링크

CDP 4부: Keycloak을 사용한 CDP 퍼블릭 클라우드의 사용자 관리

이 시리즈의 이전 기사에서는 CDP 퍼블릭 클라우드 환경 배포를 다뤘습니다. 모든 구성 요소는 사용할 준비가 되었으며 이제 다른 사용자가 모든 서비스를 탐색하고 실험을 실행할 수 있는 환경을 제공할 차례입니다.

이 기사는 6개 시리즈 중 네 번째입니다.

CDP 환경 및 서비스에서 작업할 사용자 온보딩은 ID 공급자를 구성하거나 사용자를 대량으로 가져오는 두 가지 방법으로 수행됩니다.

이 문서에서는 Keycloak을 CDP용 ID 공급자(IdP)로 구성하는 방법에 중점을 둡니다. Keycloak을 사용하면 SAML 2.0(Security Assertion Markup Language) 프로토콜을 지원하므로 CDP와 ID 페더레이션을 설정할 수 있습니다. ID 페더레이션을 사용하면 사용자는 Cloudera에 등록하거나 Cloudera 계정을 생성하지 않고도 Keycloak 인증을 통해 CDP 콘솔에 로그인할 수 있습니다.

사용자 온보딩 및 Keycloak을 CDP용 ID 공급자로 구성하는 작업은 Keycloak 웹 인터페이스(관리 콘솔) 또는 터미널을 사용합니다. 두 가지 접근 방식 모두 다룹니다.

CDP 측에서는 Account administrator 또는 PowerUser 이 프로세스를 완료하려면 역할이 필요합니다.

AWS EC2 인스턴스를 사용하여 Keycloak 배포

분명히 CDP에서 ID 공급자 구성을 시작하기 전에 Keycloak을 배포해야 합니다.

사용자가 인터넷을 사용하여 로그인할 수 있도록 최소한의 설치로 Keycloak을 배포하기 위해 AWS EC2 인스턴스에 Docker와 함께 Keycloak을 배포합니다.

이렇게 하려면 다음 특성을 가진 EC2 인스턴스가 필요합니다.

  • 인스턴스 유형: t2.micro
  • 아미: ami-05e9058d6cda9ba0d
  • Docker Compose가 설치되었습니다.
  • 공용 IP 주소
  • 인바운드 규칙 8443 포트

인스턴스를 생성한 후에는 다음 정보를 기록해 두십시오.

  • 공용 IPv4 DNS:
  • 공용 IP 주소:
  • EC2 키 쌍:

이러한 요구 사항을 충족하는 AWS EC2 인스턴스를 시작하기 위한 전체 안내서를 보려면 EC2 인스턴스에서 Keycloak 설정 문서를 확인하세요.

EC2 인스턴스가 준비되면 Keycloak 배포를 시작할 준비가 된 것입니다.

로컬 머신:

EC2 인스턴스 필수 변수 설정

export PUBLIC_IPV4_DNS=<PUBLIC_IPV4_DNS>
export AWS_SSH_KEY=<AWS_SSH_KEY>

export EC2_USERNAME=ec2-user

EC2 인스턴스에 연결합니다.

ssh -i "~/.ssh/$AWS_SSH_KEY.pem" $EC2_USERNAME@$PUBLIC_IPV4_DNS

EC2 인스턴스:

생성 docker-compose.yml 파일:

cat <<EOF > docker-compose.yml
version: '3'
services:
  keycloak:
    # The 20.0.0 keycloak image
    image: quay.io/keycloak/keycloak:20.0.0
    container_name: keycloak
    environment:
      # Keycloak admin credentials
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: Password123
    ports:
      # The HTTPS port
      - 8443:8443
      # The HTTP port
      - 8080:8080
    command: start-dev
    volumes:
      # To save the SAML metadata file
      - ./kc_config:/kc_config
volumes:
  kc_config:
    external: true
EOF

외부 볼륨 폴더를 생성합니다:

Docker Compose를 실행합니다.

Docker를 사용하여 Keycloak이 실행 중인지 확인하세요.

Keycloak에 접근하려면 관리 콘솔 (Keycloak 웹 인터페이스) SSL 프로토콜을 비활성화해야 합니다.

  • 컨테이너를 입력하세요:
    docker exec -it keycloak bash 
  • 사용에 필요한 경로를 추가하세요. kcadm.sh 스크립트:
    export PATH=$PATH:/opt/keycloak/bin
  • 서버 및 자격 증명을 제공합니다. master 왕국:
    kcadm.sh config credentials --server http://localhost:8080/ \
    --realm master \
    --user $KEYCLOAK_ADMIN \
    --password $KEYCLOAK_ADMIN_PASSWORD
  • SSL을 비활성화합니다. master 왕국:
    kcadm.sh update realms/master -s enabled=true -s sslRequired=none
  • 이제 Keycloak 웹 인터페이스를 다음 주소에서 사용할 수 있습니다. http://:8080.

Keycloak 웹 인터페이스를 사용한 구성

Keycloak에 익숙하지 않고 CDP를 Keycloak과 연결하는 방법을 더 잘 이해하고 싶다면 Keycloak 웹 인터페이스를 사용하는 것이 좋습니다.

설정을 수행하고 사용자를 더 빠르게 생성할 수 있는 재현하기 쉬운 접근 방식으로 시작하려면 터미널을 사용하여 구성 섹션까지 아래로 스크롤하세요.

영역 생성

Realm은 Keycloak의 핵심 개념 중 하나이며 Realm은 사용자 집합의 보안 메타데이터를 보호하고 관리합니다.

영역을 생성하려면:

  • 로 이동 http://:8080딸깍 하는 소리 관리 콘솔:

     


     

  • 다음을 사용하여 로그인하십시오. KEYCLOAK_ADMIN 그리고 KEYCLOAK_ADMIN_PASSWORD 에 정의되어 있습니다. docker-compose.yml 파일:

     


    keycloak_admin_console02

     

  • 왼쪽 상단에 있는 드롭다운을 클릭하세요. 주인그런 다음 클릭하세요 영역 생성:

     


    keycloak_realm01

     

  • 이름을 입력하고 클릭하세요. 만들다:

     


    keycloak_realm02

     

  • 로 이동 영역 설정 그리고를 클릭하세요 SAML 2.0 ID 공급자 메타데이터:

     


    keycloak_saml01

     

  • 그러면 영역을 CDP의 IdP로 등록하는 데 필요한 SAML 메타데이터가 포함된 다른 탭이 열립니다.

     


    keycloak_saml02

     

  • 이 파일을 다음에서 다운로드하세요. xml 체재. 마우스 오른쪽 버튼으로 클릭 > 페이지를 다른 이름으로 저장… > saml_metada.xml:

     


    keycloak_saml03

     

  • SSL 요구 사항을 비활성화하려면 다음으로 돌아가세요. 영역 설정 선택하다 일반적인 탭, 설정 필수 SSL 에게 없음 그리고를 클릭하세요 구하다:

     


    keycloak_disable_ssl01

     

CDP에 Keycloak 등록

이 단계에서 Keycloak은 CDP에 ID 공급자로 등록됩니다. 이를 위해서는 이전에 다운로드한 SAML 메타데이터 파일이 필요합니다.

참고로 다음이 필요합니다. 계정 관리자 또는 파워유저 이 프로세스를 완료하려면 CDP 계정의 역할을 수행하세요.

CDP에서 ID 공급자를 생성하려면 다음 단계가 필요합니다.

  1. CDP 콘솔에 액세스하여 다음을 선택하세요. 관리 콘솔:

     


    관리_콘솔

     

  2. 로 이동 사용자 관리 > ID 제공자 > ID 제공자 생성:

     


    create_idp

     

  3. ID 제공자 생성:
    • CDP ID 공급자에 사용하려는 이름을 입력합니다.
    • 을 체크 해봐 로그인 시 그룹 동기화 옵션: CDP의 사용자 그룹 멤버십을 Keycloak의 사용자 그룹 멤버십과 동기화합니다.
    • ~ 안에 공급자 메타데이터선택하다 파일 업로드 그리고 업로드 saml_provider.xml 이전 단계에서 다운로드했습니다.
    • 딸깍 하는 소리 만들다.

     


    Keycloak을 IdP로 등록

     

  4. 복사 생성 과정 이후에 생성됨

     


    출력 IdP 등록

     

이것 다음 단계에서 Keycloak 구성에 추가됩니다.

Keycloak에서 CDP 클라이언트 생성

이 단계에서는 Keycloak 배포에 CDP Control Plane 클라이언트가 생성됩니다.

Keycloak에서 클라이언트를 생성하는 방법에는 두 가지가 있습니다.

  • 엔터티 설명자 사용: 표준 SAML 엔터티 설명자 json 파일을 사용하여 클라이언트를 가져옵니다.
  • CDP를 사용하여 Keycloak UI를 통해 수동으로 SAML 서비스 제공업체 메타데이터 이전 단계에서 생성된 ID 공급자에서 사용할 수 있습니다. (자세한 내용은 OpenID Connect 및 SAML 클라이언트 관리를 확인하세요.)

이 경우 SAML 엔터티 설명자 파일인 cdp-client를 사용합니다.

주목: cdp-client는 Keycloak을 사용하여 오픈 소스 방식으로 CDP Public Cloud에 대한 SSO(Single Sign-On)를 구성하는 방법 문서에서 찾을 수 있습니다.

작성자는 이 파일이 공식 파일도 아니고 Cloudera에서 제공한 파일도 아니지만 CDP에 필요한 필수 설정, SAML 어설션 및 서명 인증서를 포함하고 있음을 명시합니다.

구성 파일을 가져와 Keycloak에서 SAML 2.0 클라이언트를 생성하려면 다음 단계를 따르세요.

  1. 열쇠망토 속에 관리 콘솔 로 이동 클라이언트 그리고 클릭 만들다

     


    keycloak_create_client01

     

  2. 딸깍 하는 소리 검색 cdp-client 파일을 로드합니다. 이렇게 하면 자동으로 업데이트됩니다. 클라이언트 ID 그리고 유형 매개변수. 딸깍 하는 소리 구하다

     


    keycloak_create_client02

     

  3. 얻으려면 로그인 페이지 URL으로 이동 설정 탭을 누르고 아래로 스크롤하여 IDP 시작 SSO URL 이름 변하기 쉬운.

    다음과 같이 보일 수 있습니다: http://:8080/realms/adaltas-cdp-lab/protocol/saml/clients/cdp-sso.

     


    keycloak_client01

     

     


    keycloak_client02

     

  4. 로 이동 고급의 탭, 바꾸기 $CDP_IdP_ID 이전 단계에서 CDP가 생성한 ID 공급자 ID를 사용합니다. 아래로 스크롤하여 클릭하세요. 구하다

     


    keycloak_client03

     

  5. 테스트 로그인 페이지 URL:

     


    keycloak_login_page

     

그룹 및 사용자 관리

이제 Realm과 클라이언트가 준비되었으므로 다음을 통해 사용자와 그룹을 생성/관리합니다. 관리 콘솔.

그룹 만들기:

  1. 로 이동 여러 떼 왼쪽 메뉴에서 그룹 만들기:

     


    keycloak_create_group01

     

  2. 이름을 입력하고 클릭하세요. 구하다:

     


    keycloak_create_group02

     

    메모: 선택할 때 주의하세요 GROUP_NAME 예약된 그룹 이름 목록이 있어 CDP와 동기화할 수 없기 때문입니다.

사용자를 생성합니다:

  1. 로 이동 사용자 왼쪽 메뉴에서 새 사용자 만들기:

     


    keycloak_create_user01

     

  2. 다음 매개변수를 설정하고 만들다:
    • 사용자 이름
    • 이메일
    • 이름
    • 위에서 생성한 그룹을 선택하세요.

     


    keycloak_create_user02

     

  3. 비밀번호를 설정하려면 다음으로 이동하세요. 신임장클릭 한 번으로 값을 입력하세요 암호를 설정하세요:

     


    keycloak_create_user03

     

  4. 로그인하여 사용자를 테스트합니다.

     


    keycloak_test_user01

     

     


    keycloak_test_user02

     

터미널을 사용한 구성

이 접근 방식은 Keycloak에 더 익숙한 사용자나 자동화된 프로세스를 원하는 사용자를 위한 것입니다.

이미 알고 계시겠지만, 웹 인터페이스를 사용하여 Keycloak을 구성하는 것은 지루하고 시간이 다소 길어질 수 있습니다. 특히 대규모 그룹을 다루거나 테스트 목적으로만 사용자 생성 작업을 수행하는 경우 웹 인터페이스는 최선의 아이디어가 아닙니다.

터미널을 통한 구성에는 다음 단계가 필요합니다.

  1. 로그인 및 EC2 요구 사항 확인
  2. 자격 증명 생성 및 영역 마스터에 로그인
  3. 영역 생성 및 SAML 메타데이터 다운로드
  4. CDP에 Keycloak 등록
  5. CDP 클라이언트 생성
  6. 사용자 생성
  7. 그룹 생성 및 사용자 추가

로그인 및 EC2 요구 사항 확인

앞서 언급했듯이 Keycloak이 EC2 인스턴스에서 Docker Compose를 사용하여 실행되고 있다고 가정합니다.

따라서 여기서는 이 EC2 인스턴스에 연결하고 Docker 컨테이너 내부로 이동하여 모든 명령을 실행하겠습니다.

로컬 머신:

  1. EC2 인스턴스 필수 변수를 설정합니다.
    export PUBLIC_IPV4_DNS=<PUBLIC_IPV4_DNS>
    export AWS_SSH_KEY=<AWS_SSH_KEY>
    
    export EC2_USERNAME=ec2-user
  2. EC2 인스턴스에 연결하고 파일이 있는지 확인합니다.
    ssh -i "~/.ssh/$AWS_SSH_KEY.pem" $EC2_USERNAME@$PUBLIC_IPV4_DNS

Docker 컨테이너가 실행 중이며 다음과 같은 레이아웃이 있어야 합니다.

./ubuntu
├── docker-compose.yml
└── kc_config
1 directories, 1 file

이제 구성 프로세스를 시작할 준비가 되었습니다.

EC2 인스턴스:

  1. 컨테이너 내부로 이동합니다.
    docker exec -it keycloak bash
  2. 외부 볼륨 디렉터리로 이동합니다.

자격 증명 생성 및 영역 마스터에 로그인

이 단계에서는 터미널을 통해 Realm 마스터에 로그인하는 데 필요한 신뢰 저장소 자격 증명을 생성합니다.


export PATH=$PATH:/opt/keycloak/bin

kcadm.sh config credentials --server http://localhost:8080/ \
   --realm master \
   --user $KEYCLOAK_ADMIN \
   --password $KEYCLOAK_ADMIN_PASSWORD

영역 생성 및 SAML 메타데이터 다운로드

이제 Realm을 등록하고 CDP에서 Keycloak을 IdP로 등록하는 데 필요한 SAML 메타데이터를 가져올 차례입니다.


export REALM="adaltas-cdp-lab"

export SAML_FILE=saml_provider.xml

kcadm.sh create realms \
   --set realm=$REALM \
   --set enabled=true \
   --set sslRequired=none

curl \
  -k http://localhost:8080/realms/adaltas-cdp-lab/protocol/saml/descriptor \
  > $SAML_FILE

다음 단계에서 이 파일이 필요하므로 다음 명령을 사용하여 SAML 메타데이터를 로컬 머신에:

scp -i "~/.ssh/$AWS_SSH_KEY.pem" $EC2_USERNAME@$PUBLIC_IPV4_DNS:/home/$EC2_USERNAME/kc_config/saml_provider.xml ./

CDP에 Keycloak 등록

웹 인터페이스 접근 방식에 설명된 대로 Cloudera 웹 인터페이스를 사용하여 Keycloak을 IdP로 등록합니다.

메모: 기사가 작성될 당시에는 cdp iam create-saml-provider 명령이 작동하지 않았기 때문에 CDP CLI를 통해 이 프로세스를 수행할 수 없었습니다.

CDP 클라이언트 생성

이 단계에서는 cdp_client 파일의 내용과 이전 단계에서 CDP에 의해 생성되었습니다.


kcadm.sh create clients --target-realm $REALM -f - << EOF

   "clientId": "cdp-client",
   "surrogateAuthRequired": false,
   "enabled": true,
   "clientAuthenticatorType": "client-secret",
   "redirectUris": [
       "https://consoleauth.altus.cloudera.com/saml"
   ],
   "webOrigins": [
       "https://consoleauth.altus.cloudera.com"
   ],
   "notBefore": 0,
   "bearerOnly": false,
   "consentRequired": false,
   "standardFlowEnabled": true,
   "implicitFlowEnabled": false,
   "directAccessGrantsEnabled": false,
   "serviceAccountsEnabled": false,
   "publicClient": false,
   "frontchannelLogout": true,
   "protocol": "saml",
   "attributes": 
       "saml.assertion.signature": "true",
       "saml.force.post.binding": "true",
       "saml.multivalued.roles": "false",
       "saml.encrypt": "false",
       "saml_assertion_consumer_url_post": "https://consoleauth.altus.cloudera.com/saml?samlProviderId=$CDP_IdP_ID",
       "saml.server.signature": "true",
       "saml_idp_initiated_sso_url_name": "cdp-sso",
       "saml.server.signature.keyinfo.ext": "false",
       "exclude.session.state.from.auth.response": "false",
       "saml.signature.algorithm": "RSA_SHA256",
       "saml_force_name_id_format": "false",
       "saml.client.signature": "true",
       "tls.client.certificate.bound.access.tokens": "false",
       "saml.authnstatement": "true",
       "display.on.consent.screen": "false",
       "saml_name_id_format": "username",
       "saml.onetimeuse.condition": "false",
       "saml_signature_canonicalization_method": "http://www.w3.org/2001/10/xml-exc-c14n#"
   ,
   "authenticationFlowBindingOverrides": ,
   "fullScopeAllowed": true,
   "nodeReRegistrationTimeout": -1,
   "protocolMappers": [
       
           "name": "my-email-id-mapper",
           "protocol": "saml",
           "protocolMapper": "saml-user-property-mapper",
           "consentRequired": false,
           "config": 
               "attribute.nameformat": "URI Reference",
               "user.attribute": "email",
               "friendly.name": "my-email-friendly-name",
               "attribute.name": "urn:oid:0.9.2342.19200300.100.1.3"
           
       ,
       
           "name": "my-groups-mapper",
           "protocol": "saml",
           "protocolMapper": "saml-group-membership-mapper",
           "consentRequired": false,
           "config": 
               "single": "true",
               "attribute.nameformat": "URI Reference",
               "full.path": "false",
               "friendly.name": "my-groups-friendly-name",
               "attribute.name": "https://altus.cloudera.com/SAML/Attributes/groups"
           
       ,
       
           "name": "my-firstname-mapper",
           "protocol": "saml",
           "protocolMapper": "saml-user-property-mapper",
           "consentRequired": false,
           "config": 
               "attribute.nameformat": "URI Reference",
               "user.attribute": "firstName",
               "friendly.name": "my-firstname-friendly-name",
               "attribute.name": "https://altus.cloudera.com/SAML/Attributes/firstName"
           
       ,
       
           "name": "my-lastname-mapper",
           "protocol": "saml",
           "protocolMapper": "saml-user-property-mapper",
           "consentRequired": false,
           "config": 
               "attribute.nameformat": "URI Reference",
               "user.attribute": "lastName",
               "friendly.name": "my-lastname-friendly-name",
               "attribute.name": "https://altus.cloudera.com/SAML/Attributes/lastName"
           
       
   ],
   "defaultClientScopes": [
       "web-origins",
       "role_list",
       "profile",
       "roles",
       "email"
   ],
   "optionalClientScopes": [
       "address",
       "phone",
       "offline_access",
       "microprofile-jwt"
   ],
   "access": 
       "view": true,
       "configure": true,
       "manage": true
   

EOF

사용자 생성

우리는 csv 다음 형식의 파일:

Name, LastName, username, email

그러므로 당신의 내부에는 kc_config 디렉터리(EC2 또는 Docker 컨테이너)를 생성합니다. csv 각 사용자의 정보를 담은 파일입니다.

메모: 사용자 및 그룹 제한을 검토하고 이러한 제한을 초과하지 않는지 확인하십시오.

예는 다음과 같습니다.

cat <<EOF > users_list.csv
Tobias, CHAVARRIA, user01, user01@example.com
Albert, KONRAD, user02, user02@example.com
Stephan, BAUM, user03, user03@example.com
EOF

이 작업이 완료되면 다음 스크립트를 사용하여 사용자를 생성합니다.


export USERS_CSV_FILE=users_list.csv

export USERS_INITIAL_PASS="Pa55w0rd"

kc_create_user() 
  firstname=$1
  lastname=$2
  username=$3
  email=$4

  kcadm.sh create users -r $REALM \
   -s username=$username \
   -s email=$email \
   -s firstName=$firstname \
   -s lastName=$lastname \
   -s enabled=true

  kc_set_password $username $USERS_INITIAL_PASS

kc_set_password() 
  username="$1"
  initial_pass="$2"
  kcadm.sh set-password \
    -r $REALM \
    --username $username --new-password $initial_pass



import_users() 
  while read -r line; do
   IFS=',' read -ra arr <<< "$line"
   kc_create_user $arr[0] $arr[1] $arr[2] $arr[3]
  done < "$USERS_CSV_FILE"

import_users $USERS_CSV_FILE

그룹 생성 및 사용자 추가

이 단계에서는 그룹을 만들고 추가하겠습니다. 모두 해당 Realm의 기존 사용자를 이 그룹에 추가합니다.


export GROUP_NAME="adaltas-students"

export USERS_ID_LIST=users_list

kcadm.sh create groups -r $REALM -s name=$GROUP_NAME

export GROUP_ID=$(kcadm.sh get groups -r $REALM | grep -o '"id" : "[^"]*' | grep -o '[^"]*$')

kcadm.sh get users -r $REALM | grep -o '"id" : "[^"]*' | grep -o '[^"]*$' >> $USERS_ID_LIST

kc_add_group() 
  userid="$1"
  groupid="$2"

  kcadm.sh update users/$userid/groups/$groupid \
    -r $REALM \
    -s realm=$REALM \
    -s userId=$userid \
    -s groupId=$groupid \
    -n



add_users_group() 
  n=1
  while read -r userid; do
  
  read -ra arr <<< "$userid"
  echo "Updating user: $userid"
  n=$((n+1))
  kc_add_group $userid $GROUP_ID
  done < $USERS_ID_LIST

add_users_group $USERS_ID_LIST

구성이 완료되면 사용자는 다음 로그인 페이지를 사용하여 Cloudera 콘솔에 액세스할 수 있습니다.

  • http://:8080/realms//protocol/saml/clients/cdp-sso

추가 구성이나 검토를 위해 여기에서 Keycloak 웹 인터페이스에 액세스할 수도 있습니다.

  • http://:8080

다음 단계: 권한 및 Ranger 정책 구성

이 시점에서 Keycloak은 CDP의 ID 공급자로 설정되었으며 사용자 그룹이 생성되었습니다.

사용자 온보딩 프로세스에는 여전히 구성 계층이 하나 더 필요합니다. 다음 장에서는 사용자가 엔드투엔드 아키텍처를 활용할 수 있도록 필요한 권한과 정책을 구성하는 방법을 보여 드리겠습니다.