OpenStackClient 인증

1 개요[ | ]

Authentication
인증

https://docs.openstack.org/python-openstackclient/2024.1/cli/authentication.html


OpenStackClient는 python-keystoneclient 인증 플러그인을 활용하여 다양한 인증 방법을 지원합니다.

2 인증 과정[ | ]

사용자는 여러 인증 자격증명 옵션을 제공합니다. 인증 유형(--os-auth-type)이 제공되지 않은 경우, 인증 옵션을 검사하여 기본 유형 중 하나를 사용할 수 있는지 확인합니다. 일치하는 유형이 없으면 오류가 보고되고 OSC는 종료됩니다.

Identity 서비스에 대한 인증 호출은 아직 발생하지 않았다는 점에 유의하십시오. 불필요한 서버 쿼리 수를 줄이기 위해 마지막 가능한 순간까지 인증 호출이 연기됩니다. 예를 들어, 추가 처리 중에 잘못된 명령어가 감지될 때와 같은 경우입니다.

3 인증 플러그인[ | ]

Keystone 클라이언트 라이브러리는 기본 세트의 플러그인을 구현합니다. 추가 플러그인은 Keystone 프로젝트나 다른 소스에서 제공될 수 있습니다.

항상 사용가능한 인증 유형에는 크게 세 가지가 있습니다:

  • 패스워드: 프로젝트, 사용자명, 패스워드를 사용하여 사용자를 식별합니다. 선택적으로 도메인도 포함될 수 있습니다. 이는 가장 일반적인 유형이며, 사용자명이 제공될 때 기본값으로 설정됩니다. Identity 서비스에 대한 인증 URL도 필요합니다. [필수: --os-auth-url, --os-project-name, --os-username; 선택: --os-password]
  • 토큰: 일반적인 토큰 인증과 약간 다릅니다. 토큰과 인증 URL이 제공되면 플러그인이 새 토큰을 가져옵니다. [필수: --os-auth-url, --os-token]
  • 기타: SAML, Kerberos, OAuth1.0과 같은 기타 인증 플러그인도 개발 중이며 지원됩니다. 이러한 플러그인을 사용하려면 --os-auth-type 옵션을 제공하여 선택해야 합니다.

4 세부 과정[ | ]

OpenStackClient에서 인증 과정은 모두 ClientManager 객체에 의해 처리됩니다.

  • api.auth를 가져올 때:
    • Keystone 인증 플러그인의 목록을 keystoneclient.auth.plugin 엔트리 포인트에서 가져옵니다.
    • 플러그인에서 인증 옵션 목록을 작성합니다.
  • 명령줄 인수가 처리되고 --os-cloud가 제공된 경우 clouds.yaml에서 설정이 로드됩니다.
  • ClientManager가 생성되어 명령줄, 환경변수 및/또는 clouds.yaml에서 제공된 옵션 세트가 공급됩니다:
    • --os-auth-type이 제공되고 유효한 사용가능한 플러그인인 경우, 그것이 사용됩니다.
    • --os-auth-type이 제공되지 않은 경우, 기존 옵션에 따라 인증 플러그인이 선택됩니다. 이는 단축 평가(short-circuit evaluation)로, 첫 번째 매치 항목이 선택됩니다.
      • --os-username이 제공된 경우 password가 선택됩니다.
      • --os-token이 제공된 경우 token이 선택됩니다.
      • 지금까지 선택이 이루어지지 않은 경우 오류로 종료됩니다.
    • 선택된 플러그인 클래스를 로드합니다.
  • 인증이 필요한 작업이 시도될 때 ClientManager는 실제 초기 요청을 Identity 서비스에 보냅니다.
    • --os-auth-url이 Token/Endpoint 유형을 제외한 다른 유형에 대해 제공되지 않은 경우, 오류로 종료됩니다.

5 Identity 서버 API v3를 사용한 인증[ | ]

Identity Server API v3를 사용하여 인증하려면 OS_IDENTITY_API_VERSION 환경변수 또는 --os-identity-api-version 옵션을 기본값 2.0 대신 3으로 변경해야 합니다. 마찬가지로 OS_AUTH_URL 또는 --os-auth-url도 업데이트해야 합니다.

$ export OS_IDENTITY_API_VERSION=3  # 기본값은 2.0
$ export OS_AUTH_URL=http://localhost:5000/v3

Identity API v3 인증은 조금 더 복잡하기 때문에, 추가적인 옵션을 설정해야 할 수도 있습니다. 이 옵션들은 명령줄 옵션이나 환경변수로 설정할 수 있습니다. 일반적인 경우에는 사용자 이름과 패스워드, 프로젝트 이름을 제공하는 것입니다. 이전 버전인 2.0에서는 이것으로 충분했지만, Identity API v3에는 Domain 컴포넌트가 있기 때문에 사용자와 프로젝트가 존재하는 도메인을 클라이언트에게 알려주어야 합니다.

사용자 이름과 패스워드를 사용하여 인증하는 경우, 소유 도메인 이름 또는 ID를 지정해야 합니다.

  • --os-user-domain-name 또는 OS_USER_DOMAIN_NAME
  • --os-user-domain-id 또는 OS_USER_DOMAIN_ID

프로젝트 이름을 인가 스코프로 사용하는 경우, 소유 도메인 이름 또는 ID를 지정해야 합니다.

  • --os-project-domain-name 또는 OS_PROJECT_DOMAIN_NAME
  • --os-project-domain-id 또는 OS_PROJECT_DOMAIN_ID

도메인을 인증 스코프로 사용하는 경우, 도메인 이름 또는 ID를 설정합니다.

  • --os-domain-name 또는 OS_DOMAIN_NAME
  • --os-domain-id 또는 OS_DOMAIN_ID

사용자와 프로젝트가 동일한 도메인을 공유하는 경우, --os-default-domain 또는 OS_DEFAULT_DOMAIN을 도메인 ID로 설정하는 것으로 충분합니다.

따라서 최소한의 환경변수 설정은 다음과 같습니다:

$ export OS_IDENTITY_API_VERSION=3
$ export OS_AUTH_URL=http://localhost:5000/v3
$ export OS_DEFAULT_DOMAIN=default
$ export OS_USERNAME=admin
$ export OS_PASSWORD=secret
$ export OS_PROJECT_NAME=admin

6 페더레이트 사용자 지원[ | ]

OpenStackClient는 페더레이트 사용자가 로그인하는 것도 허용합니다. 이를 통해 Keystone 자격증명 대신 Google이나 Facebook과 같은 ID 제공자의 자격증명을 사용하여 OpenStackClient에 로그인할 수 있습니다.

이것은 페더레이트 환경에서 유용한데, 하나의 자격증명으로 페더레이션이 지원하는 여러 애플리케이션/서비스에 접근할 수 있기 때문입니다. 페더레이트 사용자가 로그인할 수 있도록 OpenStackClient를 설정하는 방법을 확인하려면 페더레이션을 사용한 인증을 참조하십시오.

7 예시[ | ]

7.1 v3password[ | ]

clouds.yaml 사용:

clouds:
  demo:
    auth:
      auth_url: http://openstack.dev/identity
      project_name: demo
      project_domain_name: default
      user_domain_name: default
      username: demo
      password: password
    auth_type: v3password

또는, 명령줄 옵션 사용:

$ openstack \
  --os-auth-url "http://openstack.dev/identity" \
  --os-project-name demo \
  --os-project-domain-name default \
  --os-user-domain-name default \
  --os-auth-type=v3password \
  --os-username demo \
  --os-password password \
  server list

또는, 환경변수 사용:

$ export OS_AUTH_URL="http://openstack.dev/identity"
$ export OS_PROJECT_NAME=demo
$ export OS_PROJECT_DOMAIN_NAME=default
$ export OS_AUTH_TYPE=v3password
$ export OS_USERNAME=demo
$ export OS_PASSWORD=password
$ openstack server list

Note

패스워드가 제공되지 않은 경우, 입력을 요청받게 됩니다.

7.2 v3applicationcredential[ | ]

clouds.yaml 사용:

clouds:
  demo:
    auth:
      auth_url: http://openstack.dev/identity
      application_credential_id: ${APP_CRED_ID}
      application_credential_secret: ${APP_CRED_SECRET}
    auth_type: v3applicationcredential

또는, 명령줄 옵션 사용:

$ openstack \
  --os-auth-url "http://openstack.dev/identity" \
  --os-auth-type=v3applicationcredential \
  --os-application-credential-id=${APP_CRED_ID} \
  --os-application-credential-secret=${APP_CRED_SECRET}
  server list

또는, 환경변수 사용:

$ export OS_AUTH_URL="http://openstack.dev/identity"
$ export OS_AUTH_TYPE=v3applicationcredential
$ export OS_APPLICATION_CREDENTIAL_ID=${APP_CRED_ID}
$ export OS_APPLICATION_CREDENTIAL_SECRET=${APP_CRED_SECRET}
$ openstack server list

Note

openstack application credential create 명령어를 사용하여 애플리케이션 자격증명을 생성할 수 있습니다:

$ readarray -t lines <<< $(openstack application credential create test -f value -c id -c secret)
$ APP_CRED_ID=${lines[0]}
$ APP_CRED_SECRET=${lines[1]}

7.3 v3token[ | ]

clouds.yaml 사용:

clouds:
  demo:
    auth:
      auth_url: http://openstack.dev/identity
      project_name: demo
      project_domain_name: default
      token: ${TOKEN}
    auth_type: v3token

또는, 명령줄 옵션 사용:

$ openstack \
  --os-auth-url "http://openstack.dev/identity" \
  --os-project-name demo \
  --os-project-domain-name default \
  --os-auth-type=v3token \
  --os-token ${TOKEN} \
  server list

또는, 환경변수 사용:

$ export OS_AUTH_URL="http://openstack.dev/identity"
$ export OS_PROJECT_NAME=demo
$ export OS_PROJECT_DOMAIN_NAME=default
$ export OS_AUTH_TYPE=v3token
$ export OS_TOKEN=${TOKEN}
$ openstack server list

Note

openstack token issue 명령어를 사용하여 토큰을 생성할 수 있습니다:

$ TOKEN=$(openstack token issue -f value -c id)

7.4 v3totp[ | ]

Note

TOTP 메커니즘은 명령줄 기반의 API 상호작용에 적합하지 않습니다. TOTP 메커니즘이 클라우드에 설정된 경우, 초기 인증 및 토큰 또는 애플리케이션 자격증명을 생성하기 위해 사용되는 것이 기대되며, 이는 이후 상호작용에 사용될 수 있습니다.

Note

TOTP 메커니즘은 종종 다른 메커니즘과 결합되어 다중 인증(MFA)을 활성화합니다. 이 경우 인증 유형 v3multifactor가 사용되며, v3totp 인증 유형은 auth_methods 내의 다른 메커니즘과 함께 지정됩니다.

clouds.yaml 사용:

clouds:
  demo:
    auth:
      auth_url: http://openstack.dev/identity
      project_name: demo
      project_domain_name: default
      user_domain_name: default
      username: demo
      passcode: ${PASSCODE}
    auth_type: v3totp

또는, 명령줄 옵션 사용:

$ openstack \
  --os-auth-url "http://openstack.dev/identity" \
  --os-project-name demo \
  --os-project-domain-name default \
  --os-user-domain-name default \
  --os-auth-type=v3totp \
  --os-username demo \
  --os-passcode ${PASSCODE} \
  server list

또는, 환경변수 사용:

$ export OS_AUTH_URL="http://openstack.dev/identity"
$ export OS_PROJECT_NAME=demo
$ export OS_PROJECT_DOMAIN_NAME=default
$ export OS_AUTH_TYPE=v3totp
$ export OS_USERNAME=demo
$ export OS_PASSCODE=${PASSCODE}
$ openstack server list

Note

패스코드는 FreeOTP 또는 Google Authenticator와 같은 인증 애플리케이션에서 생성됩니다. 인증 애플리케이션 설정에 대한 정보는 클라우드 제공자의 문서를 참조하거나 자체 클라우드를 설정하는 경우 Keystone 문서를 참조하십시오.

Note

패스코드가 제공되지 않은 경우, 패스코드 입력을 요청받게 됩니다.

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}