"Keystone 토큰"의 두 판 사이의 차이

 
(차이 없음)

2024년 7월 3일 (수) 11:10 기준 최신판

1 개요[ | ]

Keystone tokens
Keystone 토큰

https://docs.openstack.org/keystone/latest/admin/tokens-overview.html


토큰은 OpenStack API와의 상호작용을 인증하고 승인하는 데 사용됩니다. 토큰은 다양한 인증 및 신원 소스를 나타내는 다양한 스코프로 제공됩니다.

2 인가 스코프[ | ]

토큰은 역할 할당에 대한 정보를 전달하는 데 사용됩니다. 사용자가 프로젝트, 도메인 또는 전체 시스템에 걸쳐 여러 역할을 할당하는 것은 드문 일이 아닙니다. 이를 인증 스코프라고 하며 토큰에는 단일 작업 스코프(예: 프로젝트, 도메인, 시스템)가 있습니다. 예를 들어, 프로젝트 스코프 토큰은 다른 프로젝트에서 다른 작업을 수행하는 데 재사용될 수 없습니다.

각 수준의 인증 스코프는 특정 OpenStack 서비스의 특정 작업 유형에 유용하며 상호변경이 불가능합니다.

2.1 언스코프 토큰[ | ]

언스코프 토큰은 서비스 카탈로그, 역할, 인가 스코프(예: 토큰 내의 프로젝트, 도메인 또는 시스템 속성)를 포함하지 않습니다. 이들의 주요 사용사례는 단순히 나중에 Keystone에서 신원을 증명하기 위함이며, 원래 자격증명을 반복적으로 제시하지 않고도 스코프 지정된 토큰을 생성하는 데 사용됩니다.

다음 조건을 충족해야 언스코프 토큰을 받을 수 있습니다:

  • 인증 요청 시 인가 스코프를 지정하지 않아야 합니다(예: 명령줄에서 --os-project-name 또는 --os-domain-id와 같은 인수를 사용하지 않아야 합니다).
  • ID에 "기본 프로젝트"가 연관되어 있지 않아야 하며, 해당 프로젝트에 역할 할당 및 인가가 없어야 합니다.

2.2 프로젝트 스코프 토큰[ | ]

프로젝트는 볼륨이나 인스턴스와 같은 리소스의 묶음(container)입니다. 프로젝트 스코프의 토큰은 특정 클라우드 테넌시에서 작업할 수 있는 권한을 나타내며, 컴퓨팅 리소스를 생성하거나 블록 스토리지를 할당하는 것과 같은 작업에 유용합니다. 이들은 서비스 카탈로그, 역할 세트, 프로젝트에 대한 정보를 포함합니다.

대부분의 최종 사용자는 배포에서 리소스를 소비하기 위해 프로젝트에 대한 역할 할당이 필요합니다.

2.3 도메인 스코프 토큰[ | ]

도메인은 프로젝트, 사용자, 그룹을 위한 네임스페이스입니다. 도메인 스코프 토큰은 도메인의 내용이나 도메인 자체에 대해 작업할 수 있는 권한을 나타냅니다.

일부 OpenStack 서비스는 아직 도메인 개념을 채택하고 있지만, 도메인은 Keystone에서 완전히 지원됩니다. 이는 도메인에 대한 권한이 있는 사용자가 해당 도메인 내의 작업을 관리할 수 있음을 의미합니다. 예를 들어, 도메인 관리자는 해당 도메인 내에서 새로운 사용자와 프로젝트를 생성할 수 있습니다.

도메인 스코프 토큰에는 서비스 카탈로그, 역할, 도메인에 대한 정보가 포함됩니다.

사용자와 프로젝트를 관리해야 하는 사람들은 일반적으로 도메인 수준의 접근 권한이 필요합니다.

2.4 시스템 스코프 토큰[ | ]

일부 OpenStack API는 프로젝트(예: 인스턴스 생성) 또는 도메인(예: 새 사용자 생성)이라는 개념에 잘 맞지만, 전체 배포 시스템에 영향을 미치는 API도 있습니다(예: 엔드포인트 수정, 서비스 관리, 하이퍼바이저 정보 나열). 이러한 작업은 일반적으로 운영자에게 예약되며 전체 배포 시스템에 대해 작업할 수 있는 시스템 스코프 토큰을 필요로 합니다. 시스템이라는 용어는 인프라스트럭처-애즈-서비스를 제공하는 하드웨어(예: 컴퓨트 노드)와 서비스(nova, cinder, neutron, barbican, keystone)의 집합을 의미합니다.

시스템 스코프 토큰에는 서비스 카탈로그, 역할, 시스템에 대한 정보가 포함됩니다. 시스템 역할 할당 및 시스템 범위 토큰은 일반적으로 운영자 및 클라우드 관리자를 위해 예약됩니다.

3 토큰 제공자[ | ]

Keystone에서 발급하는 토큰 유형은 /etc/keystone/keystone.conf 파일을 통해 설정할 수 있습니다. 현재 지원되는 토큰 제공자는 fernetjws 두 가지가 있습니다.

3.1 Fernet 토큰[ | ]

Fernet 토큰 형식은 OpenStack Kilo 릴리스에서 도입되었으며 현재 Keystone의 기본 토큰 제공자입니다. 이 문서에서 언급된 다른 토큰 유형과 달리, fernet 토큰은 백엔드에 저장할 필요가 없습니다. AES256 암호화가 토큰에 저장된 정보를 보호하는 데 사용되며, 무결성은 SHA256 HMAC 서명을 통해 검증됩니다. Fernet 토큰을 암호화하고 해독하는 데 사용되는 키는 오직 Identity 서비스만 접근할 수 있어야 합니다. UUID 토큰과 마찬가지로, fernet 토큰은 검증을 위해 Identity 서비스에 다시 전달되어야 합니다. Fernet 토큰 유형에 대한 자세한 정보는 Fernet - FQA를 참조하십시오.

배포 시, 토큰을 생성하는 데 사용된 페이로드의 공개 노출을 우려하는 경우, JWS 토큰 대신 fernet 제공자를 사용하는 것을 고려할 수 있습니다.

3.2 JWS 토큰[ | ]

JSON Web Signature (JWS) 토큰 형식은 JSON Web Token (JWT)의 일종으로 Stein 릴리스에 구현되었습니다. JWS 토큰은 서명되므로 토큰 ID를 구성하는 정보가 사용자에게 불투명하지 않으며 누구나 이를 디코딩할 수 있습니다. JWS 토큰은 일시적이거나 비영구적이므로 데이터베이스를 부풀리거나 노드 간 복제를 요구하지 않습니다. JWS 토큰 공급자는 비대칭 키를 사용하므로, 토큰은 개인 키로 서명되고 공개 키로 검증됩니다. JWS 토큰 공급자 구현은 ES256 JSON Web Algorithm (JWA)만 지원하는데, 이는 P-256 곡선을 사용하는 타원 곡선 디지털 서명 알고리즘 (ECDSA)과 SHA-256 해시 알고리즘입니다.

배포 환경에서는 호스트 간 대칭 암호화 키를 공유하는 것에 대한 보안 우려가 있을 경우 페르넷(Fernet) 토큰 대신 JWS 토큰을 사용하는 것을 고려할 수 있습니다. 두 제공자 간의 주요 차이점은 JWS 토큰은 불투명하지 않아 누구나 토큰 ID로 디코딩할 수 있는 반면, 페르넷 토큰은 토큰 ID가 암호문인 불투명하다는 점입니다. JWS 토큰의 페이로드는 누구나 읽을 수 있지만, Keystone은 이를 API 계약으로 간주하지 않고 토큰 페이로드 자체에 대해 하위 호환되지 않는 변경을 할 권리를 보유하고 있습니다. 우리는 관련 메타데이터를 검사하기 위해 Keystone의 인증 API를 통해 토큰을 검증할 것을 권장하며, 디코딩된 페이로드에 의존하여 토큰 정보를 사용하는 것을 강력히 권장하지 않습니다.

JWT에 대한 자세한 내용은 사양에서 찾을 수 있습니다.

4[ | ]

요약

기능 상태 Fernet 토큰 JWS 토큰
언스코프 토큰 생성 필수
시스템 스코프 토큰 생성 필수
프로젝트 스코프 토큰 생성 필수
도메인 스코프 토큰 생성 선택
트러스트 스코프 토큰 생성 선택
OAuth 접근 토큰 기반 토큰 생성 선택
토큰 취소 선택

상세

  • 언스코프 토큰 생성
    • CLI 명령어: openstack --os-username=<username> --os-user-domain-name=<domain> --os-password=<password> token issue
    • 참고: 모든 토큰 제공자는 명시적인 인가 스코프 없이도 토큰을 발급할 수 있어야 합니다.
  • 시스템 스코프 토큰 생성
    • CLI 명령어: openstack --os-username=<username> --os-user-domain-name=<domain> --os-system-scope all token issue
    • 참고: 모든 토큰 제공자는 시스템 스코프 토큰을 발행할 수 있어야 합니다.
  • 프로젝트 스코프 토큰 생성
    • CLI 명령어: openstack --os-username=<username> --os-user-domain-name=<domain> --os-password=<password> --os-project-name=<project> --os-project-domain-name=<domain> token issue
    • 참고: 모든 토큰 제공자는 프로젝트 스코프 토큰을 발행할 수 있어야 합니다.
  • 도메인 스코프 토큰 생성
    • CLI 명령어: openstack --os-username=<username> --os-user-domain-name=<domain> --os-password=<password> --os-domain-name=<domain> token issue
    • 참고: 모든 사용사례에 도메인 스코프 토큰이 필요한 것은 아니며, 일부 사용사례의 경우 프로젝트를 대신 사용할 수 있습니다.
  • 트러스트 스코프 토큰 생성
    • CLI 명령어: openstack --os-username=<username> --os-user-domain-name=<domain> --os-password=<password> --os-trust-id=<trust> token issue
    • 참고: 트러스트로 스코프가 지정된 토큰은 위임에 포함된 사용자 가장 및 프로젝트 기반 인증 속성만 전달합니다.
  • OAuth 접근 토큰 기반 토큰 생성
    • 참고: OAuth 액세스 토큰은 Keystone 토큰으로 교환될 수 있습니다.
  • 토큰 취소
    • CLI 명령어: openstack token revoke
    • 참고: 사용자가 Horizon에서 로그아웃할 때와 같이, 토큰은 개별적으로 취소될 수 있습니다. 특정 상황에서는, 이번 작업의 결과로 단일 토큰보다 더 많은 토큰이 취소되는 것이 허용될 수 있습니다 (예: 취소된 토큰이 추가적인 토큰을 생성하는 데 사용된 경우).

참고:

  • 이 문서는 계속 작업이 진행 중입니다.
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}