7.4. 기본 인증 ID 공급자 구성

사용자가 원격 ID 공급자에 대해 검증된 자격 증명을 사용하여 OpenShift Container Platform에 로그인할 수 있도록 기본 인증 ID 공급자를 구성합니다. 기본 인증은 일반적인 백엔드 통합 메커니즘입니다.

7.4.1. OpenShift Container Platform의 ID 공급자 정보

기본적으로는 kubeadmin 사용자만 클러스터에 있습니다. ID 공급자를 지정하려면 해당 ID 공급자를 설명하는 CR(사용자 정의 리소스)을 생성하여 클러스터에 추가해야 합니다.

참고

/, :, %를 포함하는 OpenShift Container Platform 사용자 이름은 지원되지 않습니다.

7.4.2. 기본 인증 정보

기본 인증은 일반 백엔드 통합 메커니즘으로, 사용자가 원격 ID 공급자에 대해 검증된 인증 정보를 사용하여 OpenShift Container Platform에 로그인할 수 있습니다.

기본 인증은 일반적이므로 이 ID 공급자를 고급 인증 구성에 사용할 수 있습니다.

중요

기본 인증은 원격 서버에 대한 HTTPS 연결을 통해 잠재적인 사용자 ID 및 암호 스누핑 및 중간자 공격을 방지해야 합니다.

기본 인증이 구성된 상태에서 사용자가 OpenShift Container Platform에 사용자 이름과 암호를 보내면 서버 간 요청을 통해 원격 서버에 대해 해당 자격 증명의 유효성을 확인하고, 자격 증명을 기본 인증 헤더로 전달합니다. 이를 위해서는 사용자가 로그인하는 동안 사용자의 자격 증명을 OpenShift Container Platform에 보내야 합니다.

참고

이 작업은 사용자 이름/암호 로그인 메커니즘에서만 작동하며, OpenShift Container Platform에서 원격 인증 서버에 네트워크를 요청할 수 있어야 합니다.

사용자 이름 및 암호는 기본 인증으로 보호되고 JSON이 반환되는 원격 URL에 대해 유효성이 확인됩니다.

401 응답은 인증 실패를 나타냅니다.

200 이외의 상태 또는 비어 있지 않은 "error" 키는 오류를 나타냅니다.

{"error":"Error message"}

sub(제목) 키가 200인 태는 실행 성공을 나타냅니다.

{"sub":"userid"} 1
1
제목은 인증된 사용자에게 고유해야 하며 수정할 수 없어야 합니다.

성공적인 응답은 선택적으로 다음과 같은 추가 데이터를 제공할 수 있습니다.

  • name 키를 사용하는 표시 이름. 예를 들면 다음과 같습니다.

    {"sub":"userid", "name": "User Name", ...}
  • email 키를 사용하는 이메일 주소. 예를 들면 다음과 같습니다.

    {"sub":"userid", "email":"user@example.com", ...}
  • preferred_username 키를 사용하는 기본 사용자 이름. 변경 불가능한 고유 주체가 데이터베이스 키 또는 UID이고 더 읽기 쉬운 이름이 존재하는 경우 유용합니다. 인증된 ID에 대해 OpenShift Container Platform 사용자를 프로비저닝할 때 힌트로 사용됩니다. 예를 들면 다음과 같습니다.

    {"sub":"014fbff9a07c", "preferred_username":"bob", ...}

7.4.3. 시크릿 생성

ID 공급자는 openshift-config 네임스페이스에서 OpenShift Container Platform Secret 오브젝트를 사용하여 클라이언트 시크릿, 클라이언트 인증서 및 키를 포함합니다.

절차

  • 다음 명령을 사용하여 키 및 인증서가 포함된 Secret 오브젝트를 생성합니다.

    $ oc create secret tls <secret_name> --key=key.pem --cert=cert.pem -n openshift-config
    작은 정보

    다음 YAML을 적용하여 시크릿을 생성할 수도 있습니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: <secret_name>
      namespace: openshift-config
    type: kubernetes.io/tls
    data:
      tls.crt: <base64_encoded_cert>
      tls.key: <base64_encoded_key>

7.4.4. 구성 맵 생성

ID 공급자는 openshift-config 네임스페이스에서 OpenShift Container Platform ConfigMap 오브젝트를 사용하여 인증 기관 번들을 포함합니다. 이들은 주로 ID 공급자에 필요한 인증서 번들을 포함하는 데 사용됩니다.

절차

  • 다음 명령을 사용하여 인증 기관을 포함하는 OpenShift Container Platform ConfigMap 오브젝트를 정의합니다. 인증 기관은ConfigMap 오브젝트의 ca.crt 키에 저장해야 합니다.

    $ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config
    작은 정보

    다음 YAML을 적용하여 구성 맵을 만들 수 있습니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ca-config-map
      namespace: openshift-config
    data:
      ca.crt: |
        <CA_certificate_PEM>

7.4.5. 기본 인증 CR 샘플

다음 CR(사용자 정의 리소스)에는 기본 인증 ID 공급자에 대한 매개변수 및 허용 가능한 값이 표시되어 있습니다.

기본 인증 CR

apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: basicidp 1
    mappingMethod: claim 2
    type: BasicAuth
    basicAuth:
      url: https://www.example.com/remote-idp 3
      ca: 4
        name: ca-config-map
      tlsClientCert: 5
        name: client-cert-secret
      tlsClientKey: 6
        name: client-key-secret

1
이 공급자 이름은 반환된 사용자 ID 앞에 접두어로 지정되어 ID 이름을 형성합니다.
2
이 공급자의 ID와 User 오브젝트 간 매핑 설정 방법을 제어합니다.
3
기본 인증 헤더에서 인증 정보를 수락하는 URL.
4
선택 사항: OpenShift Container Platform ConfigMap 오브젝트에 대한 참조로, 구성된 URL에 대한 서버 인증서의 유효성 확인에 사용할 PEM 인코딩 인증 기관 번들이 포함됩니다.
5
선택 사항: OpenShift Container Platform Secret 오브젝트에 대한 참조로, 구성된 URL에 요청할 때 제공할 클라이언트 인증서가 포함됩니다.
6
OpenShift Container Platform Secret 오브젝트에 대한 참조로, 클라이언트 인증서에 대한 키가 포함됩니다. tlsClientCert가 지정된 경우 필수입니다.

추가 리소스

7.4.6. 클러스터에 ID 공급자 추가

클러스터를 설치한 후에는 사용자가 인증할 수 있도록 ID 공급자를 추가하십시오.

사전 요구 사항

  • OpenShift Container Platform 클러스터를 생성합니다.
  • ID 공급자의 CR(사용자 정의 리소스)을 만듭니다.
  • 관리자로 로그인해야 합니다.

절차

  1. 정의된 CR을 적용합니다.

    $ oc apply -f </path/to/CR>
    참고

    CR이 존재하지 않는 경우 oc apply를 통해 새 CR을 생성하고 다음 경고를 트리거할 수 있습니다. Warning: oc apply should be used on resources created by either oc create --save-config or oc apply. 이 경우 이 경고를 무시해도 됩니다.

  2. 암호를 입력하라는 메시지가 표시되면 암호를 입력하여 ID 공급자의 사용자로 클러스터에 로그인합니다.

    $ oc login -u <username>
  3. 사용자가 로그인했는지 확인하고 사용자 이름을 표시합니다.

    $ oc whoami

7.4.7. 기본 ID 공급자에 대한 Apache HTTPD 구성 예

OpenShift Container Platform 4의 기본 ID 공급자(IDP) 구성에서는 IDP 서버에서 JSON을 사용하여 성공 및 실패로 응답해야 합니다. Apache HTTPD에서 CGI 스크립팅을 사용하여 이러한 작업을 수행할 수 있습니다. 이 섹션에서는 예를 제공합니다.

예: /etc/httpd/conf.d/login.conf

<VirtualHost *:443>
  # CGI Scripts in here
  DocumentRoot /var/www/cgi-bin

  # SSL Directives
  SSLEngine on
  SSLCipherSuite PROFILE=SYSTEM
  SSLProxyCipherSuite PROFILE=SYSTEM
  SSLCertificateFile /etc/pki/tls/certs/localhost.crt
  SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

  # Configure HTTPD to execute scripts
  ScriptAlias /basic /var/www/cgi-bin

  # Handles a failed login attempt
  ErrorDocument 401 /basic/fail.cgi

  # Handles authentication
  <Location /basic/login.cgi>
    AuthType Basic
    AuthName "Please Log In"
    AuthBasicProvider file
    AuthUserFile /etc/httpd/conf/passwords
    Require valid-user
  </Location>
</VirtualHost>

예: /var/www/cgi-bin/login.cgi

#!/bin/bash
echo "Content-Type: application/json"
echo ""
echo '{"sub":"userid", "name":"'$REMOTE_USER'"}'
exit 0

예: /var/www/cgi-bin/fail.cgi

#!/bin/bash
echo "Content-Type: application/json"
echo ""
echo '{"error": "Login failure"}'
exit 0

7.4.7.1. 파일 요구 사항

다음은 Apache HTTPD 웹 서버에서 생성하는 파일에 대한 요구 사항입니다.

  • login.cgifail.cgi를 실행할 수 있어야 합니다(chmod +x).
  • SELinux가 활성화되어 있는 경우 login.cgifail.cgi에 적절한 SELinux 컨텍스트 restorecon -RFv /var/www/cgi-bin가 있어야 합니다. 그러지 않으면 ls -laZ를 사용하여 컨텍스트가 httpd_sys_script_exec_t인지 확인합니다.
  • login.cgi는 사용자가 Require and Auth 지시문에 따라 성공적으로 로그인한 경우에만 실행됩니다.
  • 사용자가 로그인하지 못하면 fail.cgi가 실행되어 HTTP 401 응답이 표시됩니다.

7.4.8. 기본 인증 문제 해결

가장 일반적인 문제는 백엔드 서버에 대한 네트워크 연결과 관련이 있습니다. 간단한 디버깅을 위해 마스터에서 curl 명령을 실행합니다. 성공적인 로그인을 테스트하려면 다음 예제 명령에서 <user><password>를 유효한 자격 증명으로 교체하십시오. 잘못된 로그인을 테스트하려면 잘못된 인증 정보로 대체합니다.

$ curl --cacert /path/to/ca.crt --cert /path/to/client.crt --key /path/to/client.key -u <user>:<password> -v https://www.example.com/remote-idp

성공적인 응답

sub(제목) 키가 200인 태는 실행 성공을 나타냅니다.

{"sub":"userid"}

제목은 인증된 사용자에게 고유해야 하며 수정할 수 없어야 합니다.

성공적인 응답은 선택적으로 다음과 같은 추가 데이터를 제공할 수 있습니다.

  • name 키를 사용하는 표시 이름:

    {"sub":"userid", "name": "User Name", ...}
  • email 키를 사용하는 이메일 주소:

    {"sub":"userid", "email":"user@example.com", ...}
  • preferred_username 키를 사용하는 기본 사용자 이름:

    {"sub":"014fbff9a07c", "preferred_username":"bob", ...}

    preferred_username은 변경 불가능한 고유한 제목이 데이터베이스 키 또는 UID이고 더 읽기 쉬운 이름이 존재하는 경우 유용합니다. 인증된 ID에 대해 OpenShift Container Platform 사용자를 프로비저닝할 때 힌트로 사용됩니다.

실패한 응답

  • 401 응답은 인증 실패를 나타냅니다.
  • 200 이외의 상태 또는 비어 있지 않은 "error" 키는 오류({"error":"Error message"})를 나타냅니다.