OpenStackClient 인증 편집하기

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
3번째 줄: 3번째 줄:
;Authentication
;Authentication
;인증
;인증
https://docs.openstack.org/python-openstackclient/2024.1/cli/authentication.html
https://docs.openstack.org/python-openstackclient/latest/cli/authentication.html
----
 
OpenStackClient는 [[python-keystoneclient]] 인증 플러그인을 활용하여 다양한 인증 방법을 지원합니다.
OpenStackClient는 [[python-keystoneclient]] 인증 플러그인을 활용하여 다양한 인증 방법을 지원합니다.


13번째 줄: 13번째 줄:


==인증 플러그인==
==인증 플러그인==
Keystone 클라이언트 라이브러리는 기본 세트의 플러그인을 구현합니다. 추가 플러그인은 Keystone 프로젝트나 다른 소스에서 제공될 수 있습니다.
항상 사용가능한 인증 유형에는 크게 세 가지가 있습니다:
* '''패스워드''': 프로젝트, 사용자명, 패스워드를 사용하여 사용자를 식별합니다. 선택적으로 도메인도 포함될 수 있습니다. 이는 가장 일반적인 유형이며, 사용자명이 제공될 때 기본값으로 설정됩니다. Identity 서비스에 대한 인증 URL도 필요합니다. [필수: <code>--os-auth-url</code>, <code>--os-project-name</code>, <code>--os-username</code>; 선택: <code>--os-password</code>]
* '''토큰''': 일반적인 토큰 인증과 약간 다릅니다. 토큰과 인증 URL이 제공되면 플러그인이 새 토큰을 가져옵니다. [필수: <code>--os-auth-url</code>, <code>--os-token</code>]
* '''기타''': SAML, Kerberos, OAuth1.0과 같은 기타 인증 플러그인도 개발 중이며 지원됩니다. 이러한 플러그인을 사용하려면 <code>--os-auth-type</code> 옵션을 제공하여 선택해야 합니다.
==세부 과정==
==세부 과정==
OpenStackClient에서 인증 과정은 모두 <code>ClientManager</code> 객체에 의해 처리됩니다.
* <code>api.auth</code>를 가져올 때:
** Keystone 인증 플러그인의 목록을 <code>keystoneclient.auth.plugin</code> 엔트리 포인트에서 가져옵니다.
** 플러그인에서 인증 옵션 목록을 작성합니다.
* 명령줄 인수가 처리되고 <code>--os-cloud</code>가 제공된 경우 <code>clouds.yaml</code>에서 설정이 로드됩니다.
* 새 <code>ClientManager</code>가 생성되어 명령줄, 환경변수 및/또는 <code>clouds.yaml</code>에서 제공된 옵션 세트가 공급됩니다:
** '''<code>--os-auth-type</code>이 제공되고 유효한 사용가능한 플러그인인 경우, 그것이 사용됩니다.'''
** <code>--os-auth-type</code>이 제공되지 않은 경우, 기존 옵션에 따라 인증 플러그인이 선택됩니다. 이는 단축 평가(short-circuit evaluation)로, 첫 번째 매치 항목이 선택됩니다.
*** <code>--os-username</code>이 제공된 경우 <code>password</code>가 선택됩니다.
*** <code>--os-token</code>이 제공된 경우 <code>token</code>이 선택됩니다.
*** 지금까지 선택이 이루어지지 않은 경우 오류로 종료됩니다.
** 선택된 플러그인 클래스를 로드합니다.
* 인증이 필요한 작업이 시도될 때 <code>ClientManager</code>는 실제 초기 요청을 Identity 서비스에 보냅니다.
** <code>--os-auth-url</code>이 Token/Endpoint 유형을 제외한 다른 유형에 대해 제공되지 않은 경우, 오류로 종료됩니다.
==Identity 서버 API v3를 사용한 인증==
==Identity 서버 API v3를 사용한 인증==
Identity Server API v3를 사용하여 인증하려면 <code>OS_IDENTITY_API_VERSION</code> 환경변수 또는 <code>--os-identity-api-version</code> 옵션을 기본값 <code>2.0</code> 대신 <code>3</code>으로 변경해야 합니다. 마찬가지로 <code>OS_AUTH_URL</code> 또는 <code>--os-auth-url</code>도 업데이트해야 합니다.
==연합 사용자 지원==
 
<syntaxhighlight lang='console'>
$ export OS_IDENTITY_API_VERSION=3  # 기본값은 2.0
$ export OS_AUTH_URL=http://localhost:5000/v3
</syntaxhighlight>
 
Identity API v3 인증은 조금 더 복잡하기 때문에, 추가적인 옵션을 설정해야 할 수도 있습니다. 이 옵션들은 명령줄 옵션이나 환경변수로 설정할 수 있습니다. 일반적인 경우에는 사용자 이름과 패스워드, 프로젝트 이름을 제공하는 것입니다. 이전 버전인 2.0에서는 이것으로 충분했지만, Identity API v3에는 Domain 컴포넌트가 있기 때문에 사용자와 프로젝트가 존재하는 도메인을 클라이언트에게 알려주어야 합니다.
 
사용자 이름과 패스워드를 사용하여 인증하는 경우, 소유 도메인 이름 또는 ID를 지정해야 합니다.
* <code>--os-user-domain-name</code> 또는 <code>OS_USER_DOMAIN_NAME</code>
* <code>--os-user-domain-id</code> 또는 <code>OS_USER_DOMAIN_ID</code>
 
프로젝트 이름을 인가 스코프로 사용하는 경우, 소유 도메인 이름 또는 ID를 지정해야 합니다.
* <code>--os-project-domain-name</code> 또는 <code>OS_PROJECT_DOMAIN_NAME</code>
* <code>--os-project-domain-id</code> 또는 <code>OS_PROJECT_DOMAIN_ID</code>
 
도메인을 인증 스코프로 사용하는 경우, 도메인 이름 또는 ID를 설정합니다.
* <code>--os-domain-name</code> 또는 <code>OS_DOMAIN_NAME</code>
* <code>--os-domain-id</code> 또는 <code>OS_DOMAIN_ID</code>
 
사용자와 프로젝트가 동일한 도메인을 공유하는 경우, <code>--os-default-domain</code> 또는 <code>OS_DEFAULT_DOMAIN</code>을 도메인 ID로 설정하는 것으로 충분합니다.
 
따라서 최소한의 환경변수 설정은 다음과 같습니다:
 
<syntaxhighlight lang='console'>
$ 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
</syntaxhighlight>
 
==페더레이트 사용자 지원==
OpenStackClient는 페더레이트 사용자가 로그인하는 것도 허용합니다. 이를 통해 Keystone 자격증명 대신 Google이나 Facebook과 같은 ID 제공자의 자격증명을 사용하여 OpenStackClient에 로그인할 수 있습니다.
 
이것은 페더레이트 환경에서 유용한데, 하나의 자격증명으로 페더레이션이 지원하는 여러 애플리케이션/서비스에 접근할 수 있기 때문입니다. 페더레이트 사용자가 로그인할 수 있도록 OpenStackClient를 설정하는 방법을 확인하려면 [[OpenStackClient 매뉴얼 페이지#페더레이션을 사용한 인증|페더레이션을 사용한 인증]]을 참조하십시오.
 
==예시==
==예시==
===v3password===
===v3password===
<code>[[clouds.yaml]]</code> 사용:
<syntaxhighlight lang='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
</syntaxhighlight>
또는, 명령줄 옵션 사용:
<syntaxhighlight lang='console'>
$ 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
</syntaxhighlight>
또는, 환경변수 사용:
<syntaxhighlight lang='console'>
$ 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
</syntaxhighlight>
{{NOTE}}
패스워드가 제공되지 않은 경우, 입력을 요청받게 됩니다.
{{/NOTE}}
===v3applicationcredential===
===v3applicationcredential===
<code>clouds.yaml</code> 사용:
<syntaxhighlight lang='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
</syntaxhighlight>
또는, 명령줄 옵션 사용:
<syntaxhighlight lang='console'>
$ 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
</syntaxhighlight>
또는, 환경변수 사용:
<syntaxhighlight lang='console'>
$ 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
</syntaxhighlight>
{{NOTE}}
'''[[openstack application credential create]]''' 명령어를 사용하여 애플리케이션 자격증명을 생성할 수 있습니다:
<syntaxhighlight lang='console'>
$ readarray -t lines <<< $(openstack application credential create test -f value -c id -c secret)
$ APP_CRED_ID=${lines[0]}
$ APP_CRED_SECRET=${lines[1]}
</syntaxhighlight>
{{/NOTE}}
===v3token===
===v3token===
<code>clouds.yaml</code> 사용:
<syntaxhighlight lang='yaml'>
clouds:
  demo:
    auth:
      auth_url: http://openstack.dev/identity
      project_name: demo
      project_domain_name: default
      token: ${TOKEN}
    auth_type: v3token
</syntaxhighlight>
또는, 명령줄 옵션 사용:
<syntaxhighlight lang='console'>
$ 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
</syntaxhighlight>
또는, 환경변수 사용:
<syntaxhighlight lang='console'>
$ 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
</syntaxhighlight>
{{NOTE}}
'''[[openstack token issue]]''' 명령어를 사용하여 토큰을 생성할 수 있습니다:
<syntaxhighlight lang='console'>
$ TOKEN=$(openstack token issue -f value -c id)
</syntaxhighlight>
{{/NOTE}}
===v3totp===
===v3totp===
{{NOTE}}
{{NOTE}}

제타위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 제타위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 편집 도움말 (새 창에서 열림)

이 문서에서 사용한 틀: