사용자 및 ID 관리 가이드

Red Hat OpenStack Platform 16.1

사용자 및 keystone 인증 관리

OpenStack Documentation Team

초록

애플리케이션 자격 증명, 사용자, 역할, 프로젝트 및 할당량을 관리합니다.

preface

참고

인스턴스를 생성하는 동안에는 RBAC(역할 기반 액세스 제어)-공유 보안 그룹을 인스턴스에 직접 적용할 수 없습니다. RBAC-shared 보안 그룹을 인스턴스에 적용하려면 먼저 포트를 생성하고, 공유 보안 그룹을 해당 포트에 적용한 다음 해당 포트를 인스턴스에 할당해야 합니다. 포트에 보안 그룹 추가를 참조하십시오.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오. :leveloffset: +0

Red Hat 문서에 관한 피드백 제공

문서 개선을 위한 의견을 보내 주십시오. Red Hat이 어떻게 이를 개선하는지 알려주십시오.

DDF(직접 문서 피드백) 기능 사용

특정 문장, 단락 또는 코드 블록에 대한 직접 주석은 피드백 추가 DDF 기능을 사용하십시오.

  1. 다중 페이지 HTML 형식으로 설명서를 봅니다.
  2. 문서 오른쪽 상단에 Feedback (피드백) 버튼이 표시되는지 확인합니다.
  3. 주석 처리하려는 텍스트 부분을 강조 표시합니다.
  4. 피드백 추가를 클릭합니다.
  5. 주석을 사용하여 Add Feedback (피드백 추가) 필드를 작성합니다.
  6. 선택 사항: 설명서 팀이 문제에 대한 자세한 내용을 문의할 수 있도록 이메일 주소를 추가하십시오.
  7. Submit(제출)을 클릭합니다.

1장. preface

ID 서비스

클라우드 관리자는 프로젝트, 사용자 및 역할을 관리할 수 있습니다.

프로젝트는 리소스 컬렉션을 포함하는 조직 단위입니다. 프로젝트 내 역할에 사용자를 할당할 수 있습니다. 역할은 해당 사용자가 지정된 프로젝트 내의 리소스에 대해 수행할 수 있는 작업을 정의합니다. 사용자에게 여러 프로젝트의 역할을 할당할 수 있습니다.

각 RHOSP(Red Hat OpenStack) 배포에는 프로젝트 내 역할에 할당된 사용자가 하나 이상 포함되어야 합니다. 클라우드 관리자는 다음을 수행할 수 있습니다.

  • 프로젝트와 사용자를 추가, 업데이트 및 삭제합니다.
  • 사용자를 하나 이상의 역할에 할당하고 이러한 할당을 변경하거나 제거합니다.
  • 프로젝트와 사용자를 서로 독립적으로 관리합니다.

또한 ID 서비스(keystone)를 사용하여 서비스 및 엔드포인트에 대한 액세스를 제어하도록 사용자 인증을 구성할 수도 있습니다. ID 서비스는 토큰 기반 인증을 제공하며 LDAP 및 Active Directory와 통합할 수 있으므로 사용자 및 ID를 외부에서 관리하고 사용자 데이터를 ID 서비스와 동기화할 수 있습니다.

2장. 사용자 관리

클라우드 관리자는 대시보드에서 사용자를 추가, 수정, 삭제할 수 있습니다. 사용자는 하나 이상의 프로젝트의 멤버가 될 수 있습니다. 프로젝트와 사용자를 서로 독립적으로 관리할 수 있습니다.

2.1. 대시보드로 사용자 만들기

사용자에게 기본 프로젝트 및 역할을 할당할 수 있습니다. OpenStack 대시보드(horizon)로 생성하는 사용자는 기본적으로 ID 서비스 사용자입니다. ID 서비스에 포함된 LDAP 프로바이더를 구성하여 Active Directory 사용자를 통합할 수 있습니다.

절차

  1. admin 사용자로 대시보드에 로그인합니다.
  2. Identity > Users 를 선택합니다.
  3. Create User(사용자 만들기)를 클릭합니다.
  4. 사용자의 사용자 이름, 이메일 및 사전 암호를 입력합니다.
  5. Primary Project(기본 프로젝트) 목록에서 프로젝트를 선택합니다.
  6. Role(역할) 목록에서 사용자의 역할을 선택합니다. 기본 역할은 member 입니다.
  7. Create User(사용자 만들기)를 클릭합니다.

2.2. 대시보드로 사용자 편집

기본 프로젝트를 포함하여 사용자 세부 정보를 업데이트할 수 있습니다.

절차

  1. 대시보드에 admin 사용자로 로그인합니다.
  2. Identity > Users 를 선택합니다.
  3. Actions(작업) 열에서 Edit(편집 )를 클릭합니다.
  4. Update User(사용자 업데이트) 창에서 User Name(사용자 이름 ),Email (이메일) 및 Primary Project(기본 프로젝트) 를 업데이트할 수 있습니다.
  5. Update User (사용자 업데이트)를 클릭합니다.

2.3. 대시보드를 사용하여 사용자 활성화 또는 비활성화

대시보드를 사용하여 사용자를 비활성화할 수 있습니다. 이 작업은 사용자를 삭제하는 것과 달리 되돌릴 수 있습니다.

제한 사항:

  • 한 번에 둘 이상의 사용자를 비활성화하거나 활성화할 수 없습니다.
  • 사용자의 기본 프로젝트를 active로 설정할 수 없습니다.

이로 인해 비활성화한 사용자는 다음을 수행할 수 없습니다.

  • 대시보드에 로그인합니다.
  • RHOSP 서비스에 액세스하십시오.
  • 대시보드에서 사용자-프로젝트 작업을 수행합니다.

절차

  1. 대시보드에서 admin 사용자로 Identity > Users 를 선택합니다.
  2. Actions(작업) 열에서 화살표를 클릭하고 Enable User(사용자 활성화) 또는 Disable User (사용자 비활성화)를 선택합니다. Enabled 열에서 값이 True 또는 False로 업데이트됩니다.

2.4. 대시보드를 사용하여 사용자 삭제

다른 사용자를 삭제하려면 관리 역할이 있는 사용자여야 합니다. 이 작업은 되돌릴 수 없습니다.

  1. 대시보드에서 admin 사용자로 Identity > Users 를 선택합니다.
  2. 삭제할 사용자를 선택합니다.
  3. Delete Users(사용자 삭제)를 클릭합니다. Confirm Delete Users(사용자 삭제 확인 ) 창이 표시됩니다.
  4. Delete Users (사용자 삭제)를 클릭하여 작업을 확인합니다.

3장. 역할 관리

RHOSP(Red Hat OpenStack Platform)는 역할 기반 액세스 제어(RBAC) 메커니즘을 사용하여 리소스에 대한 액세스를 관리합니다. 역할은 사용자가 수행할 수 있는 작업을 정의합니다. 기본적으로 다음 두 가지 사전 정의된 역할이 있습니다.

  • 프로젝트에 연결할 member 역할입니다.
  • 관리자가 아닌 사용자가 환경을 관리할 수 있도록 하는 관리자 역할입니다.
참고

ID 서비스(keystone)도 역할 목록에 표시될 reader 역할도 추가되었습니다. 다른 OpenStack 프로젝트에 통합되지 않았으므로 reader 역할을 사용하지 마십시오. 서비스 간에 일관되지 않은 권한을 제공합니다.

환경에 고유한 사용자 지정 역할을 생성할 수도 있습니다.

3.1. Red Hat OpenStack Platform admin 역할 이해

admin 의 역할을 사용자에게 할당하면 이 사용자는 모든 프로젝트의 리소스를 확인, 변경, 생성 또는 삭제할 수 있는 권한이 있습니다. 이 사용자는 공개적으로 사용 가능한 Glance 이미지 또는 공급자 네트워크와 같이 프로젝트에서 액세스할 수 있는 공유 리소스를 생성할 수 있습니다. 또한 admin 역할이 있는 사용자는 사용자를 생성하거나 삭제하고 역할을 관리할 수 있습니다.

사용자에게 admin 역할을 할당하는 프로젝트는 openstack 명령이 실행되는 기본 프로젝트입니다. 예를 들어 development 라는 프로젝트의 admin 사용자가 다음 명령을 실행하면 development 프로젝트에서 internal-network 라는 네트워크가 생성됩니다.

openstack network create internal-network

admin 사용자는 --project 매개변수를 사용하여 모든 프로젝트에서 internal-network 를 생성할 수 있습니다.

openstack network create internal-network --project testing

3.2. CLI를 사용하여 역할 보기

관리자는 기존 역할의 세부 정보를 볼 수 있습니다.

절차

  1. 사용 가능한 사전 정의된 역할을 나열합니다.

    $ openstack role list
    +----------------------------------+-----------------+
    | ID                               | Name            |
    +----------------------------------+-----------------+
    | 01d92614cd224a589bdf3b171afc5488 | admin           |
    | 034e4620ed3d45969dfe8992af001514 | member          |
    | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin   |
    | 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user |
    | cfea5760d9c948e7b362abc1d06e557f | reader          |
    | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator   |
    | ef3d3f510a474d6c860b4098ad658a29 | service         |
    +----------------------------------+-----------------+
  2. 지정된 역할에 대한 세부 정보를 확인합니다.

    $ openstack role show admin

    예제

    $ openstack role show admin
    +-----------+----------------------------------+
    | Field     | Value                            |
    +-----------+----------------------------------+
    | domain_id | None                             |
    | id        | 01d92614cd224a589bdf3b171afc5488 |
    | name      | admin                            |
    +-----------+----------------------------------+

3.3. CLI를 사용하여 역할 생성 및 할당

관리자는 다음 명령 집합과 함께 ID 서비스(keystone) 클라이언트를 사용하여 역할을 만들고 관리할 수 있습니다. 각 Red Hat OpenStack Platform 배포에는 하나 이상의 프로젝트, 한 명의 사용자 및 하나의 역할이 함께 연결되어 있어야 합니다.

두 개 이상의 프로젝트에 사용자를 할당할 수 있습니다. 사용자를 여러 프로젝트에 할당하려면 역할을 생성하고 사용자-프로젝트 쌍에 해당 역할을 할당합니다.

참고

이름 또는 ID를 사용하여 사용자, 역할 또는 프로젝트를 지정할 수 있습니다.

절차

  1. 새 역할 역할을 생성합니다.

    $ openstack role create <role_name>
  2. 프로젝트에 사용자를 할당하려면 먼저 다음 명령을 사용하여 사용자, 역할 및 프로젝트 이름 또는 ID를 찾습니다.

    • OpenStack 사용자 목록
    • OpenStack 역할 목록
    • OpenStack project list
  3. user-project 쌍에 역할을 할당합니다.

    $ openstack role add <role_name> --user <user_name> --project <project_name>

    다음 예제에서는 demo 프로젝트의 admin 사용자에게 admin 역할을 할당합니다.

    $ openstack role add admin --user admin --project demo
  4. 사용자 admin 의 역할 할당을 확인합니다.

    $ openstack role assignment list --user <user_name> --project <project_name> --names

    다음 예제에서는 admin 이라는 역할이 있는 demo 프로젝트에 admin 사용자가 할당되었는지 확인합니다.

$ openstack role assignment list --user admin --project demo --names
+-------+---------------+-------+--------------+--------+--------+-----------+
| Role  | User          | Group | Project      | Domain | System | Inherited |
+-------+---------------+-------+--------------+--------+--------+-----------+
| admin | admin@Default |       | demo@Default |        |        | False     |
+-------+---------------+-------+--------------+--------+--------+-----------+

3.4. 암시적 역할

ID 서비스(keystone)는 액세스 제어를 시행하여 사용자가 특정 역할에 할당되었는지 확인합니다. ID 서비스는 암시된 역할 할당을 사용합니다. 사용자를 역할에 명시적으로 할당하면 사용자를 암시적으로 추가 역할에 할당할 수도 있습니다. Red Hat OpenStack Platform에서 암시된 기본 역할을 볼 수 있습니다.

$ openstack implied role list
+----------------------------------+-----------------+----------------------------------+-------------------+
| Prior Role ID                    | Prior Role Name | Implied Role ID                  | Implied Role Name |
+----------------------------------+-----------------+----------------------------------+-------------------+
| 54454217f38247e5a2131c8a47138d32 | admin           | b59703369e194123b5c77dad60d11a25 | member            |
| b59703369e194123b5c77dad60d11a25 | member          | 382761de4a9c4414b6f8950f8580897c | reader            |
+----------------------------------+-----------------+----------------------------------+-------------------+
참고

ID 서비스(keystone)도 역할 목록에 표시될 reader 역할도 추가되었습니다. 다른 OpenStack 서비스에 통합되지 않았으므로 reader 역할을 사용하지 마십시오. 서비스 간에 일관되지 않은 권한을 제공합니다.

권한이 더 높은 역할은 권한이 적은 역할과 연관된 권한을 나타냅니다. 위의 기본 암시적 역할에서 admin은 member을 의미하며 멤버는 reader를 의미합니다. 암시적 역할을 사용하면 사용자의 역할 할당이 누적 처리되므로 사용자가 하위 역할을 상속합니다.

3.4.1. 암시적 역할 생성

사용자 지정 역할을 사용하는 경우 암시적 연결을 생성할 수 있습니다.

참고

새 역할을 생성하면 기본적으로 member 역할과 동일한 액세스 정책이 적용됩니다. 사용자 지정 역할에 대한 고유 정책 생성에 대한 자세한 내용은 액세스 제어를 위한 정책 파일 사용을 참조하십시오.

절차

  • 다음 명령을 사용하여 다른 역할을 나타내는 역할을 지정합니다.

    $ openstack implied role create manager --implied-role poweruser
    +------------+----------------------------------+
    | Field      | Value                            |
    +------------+----------------------------------+
    | implies    | ab0b966e0e5e411f8d8b0cc6c26fefd1 |
    | prior_role | 880761f64bff4e4a8923efda73923b7a |
    +------------+----------------------------------+

검증

  • 암시적 역할을 모두 나열합니다.

    $ openstack implied role list
    +----------------------------------+-----------------+----------------------------------+-------------------+
    | Prior Role ID                    | Prior Role Name | Implied Role ID                  | Implied Role Name |
    +----------------------------------+-----------------+----------------------------------+-------------------+
    | 54454217f38247e5a2131c8a47138d32 | admin           | b59703369e194123b5c77dad60d11a25 | member            |
    | 880761f64bff4e4a8923efda73923b7a | manager         | ab0b966e0e5e411f8d8b0cc6c26fefd1 | poweruser         |
    | b59703369e194123b5c77dad60d11a25 | member          | 382761de4a9c4414b6f8950f8580897c | reader            |
    +----------------------------------+-----------------+----------------------------------+-------------------+

암시적 연관이 오류가 발생하면 변경 사항을 취소할 수 있습니다.

openstack implied role delete manager --implied-role poweruser

4장. 그룹 관리

ID 서비스(keystone) 그룹을 사용하여 여러 사용자 계정에 일관된 권한을 할당할 수 있습니다.

4.1. 명령행 사용

그룹을 만들고 그룹에 권한을 할당합니다. 그룹의 멤버는 그룹에 할당한 동일한 권한을 상속받습니다.

  1. group grp-Auditors:

    $ openstack group create grp-Auditors
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description |                                  |
    | domain_id   | default                          |
    | id          | 2a4856fc242142a4aa7c02d28edfdfff |
    | name        | grp-Auditors                     |
    +-------------+----------------------------------+
  2. keystone 그룹 목록을 확인합니다.

    $ openstack group list --long
    +----------------------------------+--------------+-----------+-------------+
    | ID                               | Name         | Domain ID | Description |
    +----------------------------------+--------------+-----------+-------------+
    | 2a4856fc242142a4aa7c02d28edfdfff | grp-Auditors | default   |             |
    +----------------------------------+--------------+-----------+-------------+
  3. member 역할을 사용하는 동안 demo 프로젝트에 액세스할 수 있는 권한을 the grp-Auditors 그룹에 부여합니다.

    $ openstack role add member --group grp-Auditors --project demo
  4. 기존 사용자 user1grp-Auditors 그룹에 추가합니다.

    $ openstack group add user grp-Auditors user1
    user1 added to group grp-Auditors
  5. user1grp-Auditors 의 멤버인지 확인합니다.

    $ openstack group contains user grp-Auditors user1
    user1 in group grp-Auditors
  6. user1 에 할당된 유효한 권한을 검토합니다 :

    $ openstack role assignment list --effective --user user1
    +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
    | Role                             | User                             | Group | Project                          | Domain | Inherited |
    +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
    | 9fe2ff9ee4384b1894a90878d3e92bab | 3fefe5b4f6c948e6959d1feaef4822f2 |       | 0ce36252e2fb4ea8983bed2a568fa832 |        | False     |
    +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+

4.2. 대시보드 사용

대시보드를 사용하여 keystone 그룹의 멤버십을 관리할 수 있습니다. 그러나 명령줄을 사용하여 그룹에 역할 권한을 할당해야 합니다. 자세한 내용은 명령줄 사용을 참조하십시오.

4.2.1. 그룹 생성

  1. 관리 권한이 있는 사용자로 대시보드에 로그인합니다.
  2. Identity > Groups 를 선택합니다.
  3. +Create Group (+그룹 만들기)을 클릭합니다.
  4. 그룹의 이름 및 설명을 입력합니다.
  5. Create Group (그룹 만들기)을 클릭합니다.

4.2.2. 그룹 멤버십 관리

대시보드를 사용하여 keystone 그룹의 멤버십을 관리할 수 있습니다.

  1. 관리 권한이 있는 사용자로 대시보드에 로그인합니다.
  2. Identity > Groups 를 선택합니다.
  3. 편집할 그룹의 Manage Members (멤버 관리)를 클릭합니다.
  4. Add users(사용자 추가)를 사용하여 그룹에 사용자를 추가합니다. 사용자를 제거하려면 확인란을 선택하고 Remove users(사용자 제거 )를 클릭합니다.

5장. 할당량 관리

클라우드 관리자는 프로젝트 할당량을 설정하고 관리할 수 있습니다. 각 프로젝트에 리소스가 할당되고 프로젝트 사용자에게 이러한 리소스를 사용할 수 있는 액세스 권한이 부여됩니다. 따라서 여러 프로젝트에서 서로 권한과 리소스를 방해하지 않고도 단일 클라우드를 사용할 수 있습니다. 새 프로젝트를 만들면 리소스 할당량 집합이 사전 구성됩니다. 할당량에는 프로젝트에 할당할 수 있는 VCPU 수, 인스턴스, RAM 및 유동 IP가 포함됩니다. 프로젝트 및 프로젝트 사용자 수준에서 할당량을 적용할 수 있습니다. 대시보드를 사용하여 신규 및 기존 프로젝트의 Compute 및 Block Storage 할당량을 설정하거나 수정할 수 있습니다. 자세한 내용은 6장. 프로젝트 관리의 내용을 참조하십시오.

5.1. 사용자의 컴퓨팅 할당량 보기

다음 명령을 실행하여 현재 설정된 사용자의 할당량 값을 나열합니다.

$ nova quota-show --user [USER] --tenant [TENANT]

예제

$ nova quota-show --user demoUser --tenant demo
+-----------------------------+-------+
| Quota                       | Limit |
+-----------------------------+-------+
| instances                   | 10    |
| cores                       | 20    |
| ram                         | 51200 |
| floating_ips                | 5     |
| fixed_ips                   | -1    |
| metadata_items              | 128   |
| injected_files              | 5     |
| injected_file_content_bytes | 10240 |
| injected_file_path_bytes    | 255   |
| key_pairs                   | 100   |
| security_groups             | 10    |
| security_group_rules        | 20    |
| server_groups               | 10    |
| server_group_members        | 10    |
+-----------------------------+-------+

5.2. 사용자의 컴퓨팅 할당량 업데이트

다음 명령을 실행하여 특정 할당량 값을 업데이트합니다.

$ nova quota-update --user [USER] --[QUOTA_NAME] [QUOTA_VALUE] [TENANT]
$ nova quota-show --user [USER] --tenant [TENANT]

예제

$ nova quota-update --user demoUser --floating-ips 10 demo
$ nova quota-show --user demoUser --tenant demo
+-----------------------------+-------+
| Quota                       | Limit |
+-----------------------------+-------+
| instances                   | 10    |
| cores                       | 20    |
| ram                         | 51200 |
| floating_ips                | 10    |
| ...                         |       |
+-----------------------------+-------+

참고

quota-update 명령의 옵션 목록을 보려면 다음을 실행합니다.

$ nova help quota-update

5.3. 사용자의 오브젝트 스토리지 할당량 설정

오브젝트 스토리지 할당량은 다음 카테고리로 분류할 수 있습니다.

  • 컨테이너 할당량 - 총 크기(바이트) 또는 단일 컨테이너에 저장할 수 있는 오브젝트 수를 제한합니다.
  • 계정 할당량 - 오브젝트 스토리지 서비스에서 사용자가 사용할 수 있는 총 크기(바이트)를 제한합니다.

컨테이너 할당량 또는 계정 할당량을 설정하려면 오브젝트 스토리지 프록시 서버에 proxy-server.conf 파일의 [pipeline:main] 섹션에 container _quotas 또는 account_quotas (또는 둘 다) 매개변수가 추가되어야 합니다.

[pipeline:main]
pipeline = catch_errors [...] tempauth container-quotas \
account-quotas slo dlo proxy-logging proxy-server

[filter:account_quotas]
use = egg:swift#account_quotas

[filter:container_quotas]
use = egg:swift#container_quotas

다음 명령을 사용하여 Object Storage 할당량을 보고 업데이트합니다. 프로젝트에 포함된 모든 사용자는 프로젝트에 배치된 할당량을 볼 수 있습니다. 프로젝트에서 Object Storage 할당량을 업데이트하려면 프로젝트에서 ResellerAdmin의 역할이 있어야 합니다.

계정 할당량을 보려면 다음을 수행합니다.

# swift stat

Account: AUTH_b36ed2d326034beba0a9dd1fb19b70f9
Containers: 0
Objects: 0
Bytes: 0
Meta Quota-Bytes: 214748364800
X-Timestamp: 1351050521.29419
Content-Type: text/plain; charset=utf-8
Accept-Ranges: bytes

할당량을 업데이트하려면 다음을 수행합니다.

# swift post -m quota-bytes:<BYTES>

예를 들어 계정에 5GB 할당량을 배치하려면 다음을 수행합니다.

# swift post -m quota-bytes:5368709120

6장. 프로젝트 관리

6.1. 프로젝트 관리

클라우드 관리자는 프로젝트를 만들고 관리할 수 있습니다. 프로젝트는 OpenStack 사용자 및 그룹을 할당할 수 있는 공유 가상 리소스 풀입니다. 각 프로젝트에서 공유 가상 리소스의 할당량을 구성할 수 있습니다. Red Hat OpenStack Platform을 사용하여 서로의 권한 및 리소스를 방해하지 않는 여러 프로젝트를 만들 수 있습니다. 사용자는 둘 이상의 프로젝트와 연결할 수 있습니다. 각 사용자에게는 할당되는 각 프로젝트에 대한 역할이 할당되어야 합니다.

6.1.1. 프로젝트 생성

프로젝트를 생성하고, 프로젝트에 멤버를 추가하고, 프로젝트의 리소스 제한을 설정합니다.

  1. 관리 권한이 있는 사용자로 대시보드에 로그인합니다.
  2. Identity > Projects 를 선택합니다.
  3. 프로젝트 만들기를 클릭합니다.
  4. Project Information(프로젝트 정보 ) 탭에서 프로젝트의 이름 및 설명을 입력합니다. Enabled(활성화) 확인란 은 기본적으로 선택됩니다.
  5. Project Members(프로젝트 멤버 ) 탭의 All Users (모든 사용자) 목록에서 프로젝트에 멤버를 추가합니다.
  6. Quotas(할당량 ) 탭에서 프로젝트의 리소스 제한을 지정합니다.
  7. 프로젝트 만들기를 클릭합니다.

6.1.2. 프로젝트 편집

프로젝트를 편집하여 이름 또는 설명을 변경하거나, 활성화하거나 일시적으로 비활성화하거나, 프로젝트의 멤버를 업데이트할 수 있습니다.

  1. 관리 권한이 있는 사용자로 대시보드에 로그인합니다.
  2. Identity > Projects 를 선택합니다.
  3. 프로젝트 Actions(작업) 열에서 화살표를 클릭하고 Edit Project(프로젝트 편집 )를 클릭합니다.
  4. Edit Project(프로젝트 편집) 창에서 프로젝트를 업데이트하여 이름 또는 설명을 변경하고 프로젝트를 활성화하거나 일시적으로 비활성화할 수 있습니다.
  5. Project Members(프로젝트 멤버 ) 탭에서 프로젝트에 멤버를 추가하거나 필요에 따라 제거합니다.
  6. 저장을 클릭합니다.
참고

Enabled(활성화) 확인란 은 기본적으로 선택됩니다. 프로젝트를 일시적으로 비활성화하려면 Enabled(활성화) 확인란을 지웁니다. 비활성화된 프로젝트를 활성화하려면 Enabled (활성화) 확인란을 선택합니다.

6.1.3. 프로젝트 삭제

  1. 관리 권한이 있는 사용자로 대시보드에 로그인합니다.
  2. Identity > Projects 를 선택합니다.
  3. 삭제할 프로젝트를 선택합니다.
  4. Delete Projects(프로젝트 삭제)를 클릭합니다. Confirm Delete Projects(프로젝트 삭제 확인) 창이 표시됩니다.
  5. Delete Projects (프로젝트 삭제)를 클릭하여 작업을 확인합니다.

프로젝트가 삭제되고 사용자 쌍이 연결 해제됩니다.

6.1.4. 프로젝트 할당량 업데이트

쿼터는 클라우드 리소스를 최적화하기 위해 각 프로젝트에 대해 설정한 운영 제한입니다. 할당량을 설정하여 프로젝트 리소스가 알림 없이 고갈되지 않도록 할 수 있습니다. 프로젝트 및 project-user 수준에서 할당량을 적용할 수 있습니다.

  1. 관리 권한이 있는 사용자로 대시보드에 로그인합니다.
  2. Identity > Projects 를 선택합니다.
  3. 프로젝트 Actions(작업) 열에서 화살표를 클릭하고 Modify Quotas(할당량 수정 )를 클릭합니다.
  4. Quota(할당량 ) 탭에서 필요에 따라 프로젝트 할당량을 수정합니다.
  5. 저장을 클릭합니다.

6.1.5. 활성 프로젝트 변경

대시보드를 사용하여 프로젝트의 오브젝트와 상호 작용할 수 있도록 프로젝트를 활성 프로젝트로 설정합니다. 프로젝트를 활성 프로젝트로 설정하려면 프로젝트의 멤버여야 합니다. 또한 사용자가 둘 이상의 프로젝트의 멤버가 되어야 Active Project 옵션을 활성화하는 것으로 Set (설정)이 있어야 합니다. 재활성화하지 않는 한, 비활성화된 프로젝트를 활성 상태로 설정할 수 없습니다.

  1. 관리 권한이 있는 사용자로 대시보드에 로그인합니다.
  2. Identity > Projects 를 선택합니다.
  3. 프로젝트 Actions(작업) 열에서 화살표를 클릭하고 Set as Active Project(활성 프로젝트로 설정 )를 클릭합니다.
  4. 또는 관리자가 아닌 사용자로 프로젝트 Actions(작업) 열에서 Set as Active Project (활성 프로젝트로 설정)를 클릭하여 열의 기본 작업이 됩니다.

6.2. 프로젝트 계층 구조

6.2.1. ID 서비스의 계층적 멀티 테넌시 (HMT)

ID 서비스(keystone)에서 멀티 테넌시를 사용하여 프로젝트를 중첩할 수 있습니다. 멀티 테넌시를 사용하면 하위 프로젝트에서 상위 프로젝트의 역할 할당을 상속할 수 있습니다.

6.2.1.1. 프로젝트 및 하위 프로젝트 생성

keystone 도메인 및 프로젝트를 사용하여 HMT(Herarchical Multitenancy)를 구현할 수 있습니다. 먼저 새 도메인을 생성한 다음 해당 도메인에 프로젝트를 생성합니다. 그런 다음 해당 프로젝트에 하위 프로젝트를 추가할 수 있습니다. 해당 하위 프로젝트의 admin 역할에 사용자를 추가하여 하위 프로젝트의 관리자로 사용자를 승격할 수도 있습니다.

참고

keystone에서 사용하는 HMT 구조는 현재 대시보드에 표시되지 않습니다.

1. corp 라는 새 keystone 도메인을 생성합니다.

$ openstack domain create corp
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| enabled     | True                             |
| id          | 69436408fdcb44ab9e111691f8e9216d |
| name        | corp                             |
+-------------+----------------------------------+

2. corp 도메인에서 상위 프로젝트(사설-클라우드)를 생성합니다.

$ openstack project create private-cloud --domain corp
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| domain_id   | 69436408fdcb44ab9e111691f8e9216d |
| enabled     | True                             |
| id          | c50d5cf4fe2e4929b98af5abdec3fd64 |
| is_domain   | False                            |
| name        | private-cloud                    |
| parent_id   | 69436408fdcb44ab9e111691f8e9216d |
+-------------+----------------------------------+

3. private-cloud 상위 프로젝트 내에서 하위 프로젝트(dev)를 생성하는 동시에 corp 도메인을 지정합니다.

$ openstack project create dev --parent private-cloud --domain corp
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| domain_id   | 69436408fdcb44ab9e111691f8e9216d |
| enabled     | True                             |
| id          | 11fccd8369824baa9fc87cf01023fd87 |
| is_domain   | False                            |
| name        | dev                              |
| parent_id   | c50d5cf4fe2e4929b98af5abdec3fd64 |
+-------------+----------------------------------+

4. qa:

$ openstack project create qa --parent private-cloud --domain corp
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| domain_id   | 69436408fdcb44ab9e111691f8e9216d |
| enabled     | True                             |
| id          | b4f1d6f59ddf413fa040f062a0234871 |
| is_domain   | False                            |
| name        | qa                               |
| parent_id   | c50d5cf4fe2e4929b98af5abdec3fd64 |
+-------------+----------------------------------+
참고

ID API를 사용하여 프로젝트 계층 구조를 볼 수 있습니다. 자세한 내용은 https://developer.openstack.org/api-ref/identity/v3/index.html?expanded=show-project-details-detail의 내용을 참조하십시오.

6.2.1.2. 사용자에게 액세스 권한 부여

기본적으로 새로 생성된 프로젝트에는 역할이 할당되지 않습니다. 상위 프로젝트에 역할 권한을 할당하면 --inherited 플래그를 포함하여 하위 프로젝트에 상위 프로젝트에서 할당된 권한을 상속하도록 지시할 수 있습니다. 예를 들어 상위 프로젝트에 대한 admin 역할 액세스 권한이 있는 사용자에게도 하위 프로젝트에 대한 admin 액세스 권한이 있습니다.

1. 프로젝트에 할당된 기존 권한을 확인합니다.

$ openstack role assignment list --project private-cloud

2. 기존 역할을 확인합니다.

$ openstack role list
+----------------------------------+-----------------+
| ID                               | Name            |
+----------------------------------+-----------------+
| 01d92614cd224a589bdf3b171afc5488 | admin           |
| 034e4620ed3d45969dfe8992af001514 | member          |
| 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin   |
| 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user |
| cfea5760d9c948e7b362abc1d06e557f | reader          |
| d5cb454559e44b47aaa8821df4e11af1 | swiftoperator   |
| ef3d3f510a474d6c860b4098ad658a29 | service         |
+----------------------------------+-----------------+

3. private-cloud 프로젝트에 대한 사용자 계정 user1 액세스 권한을 부여합니다.

$ openstack role add --user user1 --user-domain corp --project private-cloud member

--inherited 플래그를 사용하여 이 명령을 다시 실행합니다. 결과적으로 user1 은 역할 할당을 상속한 private-cloud 하위 프로젝트에도 액세스할 수 있습니다.

$ openstack role add --user user1 --user-domain corp --project private-cloud member --inherited

4. 권한 업데이트 결과를 검토합니다.

$ openstack role assignment list --effective --user user1 --user-domain corp
+----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
| Role                             | User                             | Group | Project                          | Domain | Inherited |
+----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
| 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be |       | c50d5cf4fe2e4929b98af5abdec3fd64 |        | False     |
| 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be |       | 11fccd8369824baa9fc87cf01023fd87 |        | True      |
| 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be |       | b4f1d6f59ddf413fa040f062a0234871 |        | True      |
+----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+

user1 사용자는 qadev 프로젝트에 대해 상속된 액세스 권한을 갖습니다. 또한 --inherited 플래그가 상위 프로젝트에 적용되었으므로 user1 도 나중에 생성된 모든 하위 프로젝트에 대한 액세스 권한을 받습니다.

6.2.2. 액세스 제거

명시적 및 상속된 권한은 별도로 제거해야 합니다.

1. 명시적으로 할당된 역할에서 사용자를 제거합니다.

$ openstack role remove --user user1 --project private-cloud member

2. 변경 결과를 검토합니다. 상속된 권한이 여전히 있습니다.

$ openstack role assignment list --effective --user user1 --user-domain corp
+----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
| Role                             | User                             | Group | Project                          | Domain | Inherited |
+----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
| 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be |       | 11fccd8369824baa9fc87cf01023fd87 |        | True      |
| 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be |       | b4f1d6f59ddf413fa040f062a0234871 |        | True      |
+----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+

3. 상속된 권한을 제거합니다.

$ openstack role remove --user user1 --project private-cloud member --inherited

4. 변경 결과를 검토합니다. 상속된 권한이 제거되어 결과 출력이 비어 있습니다.

$ openstack role assignment list --effective --user user1 --user-domain corp

6.2.3. 중첩 할당량

현재 중첩 할당량 은 아직 지원되지 않습니다. 따라서 프로젝트 및 하위 프로젝트에 대해 할당량을 개별적으로 관리해야 합니다.

6.2.4. 재판매업체 개요

Reseller 프로젝트를 통해 목표는 도메인 계층 구조를 갖는 것입니다. 이러한 도메인을 통해 클라우드의 일부를 재판매할 수 있으며, 하위 도메인은 완전히 활성화된 클라우드를 나타냅니다. 이 작업은 단계 1 단계로 나뉩니다.

6.2.4.1. 리셀러의 1 단계

리셀러(1단계)는 다음에 설명된 HMT(Hyperarchical Multitenancy)의 확장 버전입니다. 6.2.1절. “ID 서비스의 계층적 멀티 테넌시 (HMT)” 이전에는 keystone 도메인이 원래 데이터베이스 백엔드에 자체 테이블을 사용하여 사용자와 프로젝트를 저장하는 컨테이너로 설계되었습니다. 결과적으로 도메인이 더 이상 자체 테이블에 저장되지 않으며 프로젝트 테이블에 병합되었습니다.

  • 도메인은 이제 is_domain 플래그로 구분되는 프로젝트 유형입니다.
  • 도메인은 프로젝트 계층 구조의 최상위 프로젝트를 나타냅니다. 도메인은 프로젝트 계층 구조의 루트입니다.
  • 프로젝트 하위 경로를 사용하여 도메인을 생성하고 검색하도록 API가 업데이트되었습니다.

    • is_domain 플래그가 true로 설정하여 새 도메인을 생성합니다.
    • 도메인인 프로젝트를 나열합니다. is_domain 쿼리 매개 변수를 포함하여 프로젝트를 가져옵니다.
참고

1단계에서는 도메인 계층 구조를 만들 수 없습니다. 즉, 하위 도메인을 아직 사용할 수 없습니다. 또한 이는 토큰 범위를 변경하지 않으며 keystone 이외의 프로젝트에 필요한 계층 구조 지원을 포함하지 않습니다. ~

6.3. 프로젝트 보안 관리

보안 그룹은 프로젝트 인스턴스에 할당할 수 있는 IP 필터 규칙 집합이며 인스턴스에 대한 네트워킹 액세스를 정의합니다. 보안 그룹은 프로젝트에 따라 다릅니다. 프로젝트 구성원은 해당 보안 그룹에 대한 기본 규칙을 편집하고 새 규칙 세트를 추가할 수 있습니다.

모든 프로젝트에는 정의된 다른 보안 그룹이 없는 인스턴스에 적용되는 기본 보안 그룹이 있습니다. 기본값을 변경하지 않는 한 이 보안 그룹은 들어오는 모든 트래픽을 거부하고 인스턴스에서 나가는 트래픽만 허용합니다.

인스턴스를 생성하는 동안 인스턴스에 직접 보안 그룹을 적용하거나 실행 중인 인스턴스의 포트에 적용할 수 있습니다.

참고

인스턴스를 생성하는 동안에는 RBAC(역할 기반 액세스 제어)-공유 보안 그룹을 인스턴스에 직접 적용할 수 없습니다. RBAC-shared 보안 그룹을 인스턴스에 적용하려면 먼저 포트를 생성하고, 공유 보안 그룹을 해당 포트에 적용한 다음 해당 포트를 인스턴스에 할당해야 합니다. 포트에 보안 그룹 추가를 참조하십시오.

필요한 송신을 허용하는 그룹을 생성하지 않고 기본 보안 그룹을 삭제하지 마십시오. 예를 들어 인스턴스에서 DHCP 및 메타데이터를 사용하는 경우 인스턴스에 DHCP 서버 및 메타데이터 에이전트로 이그레스를 허용하는 보안 그룹 규칙이 필요합니다.

6.3.1. 보안 그룹 생성

  1. 대시보드에서 Project > Compute > Access & Security 를 선택합니다.
  2. Security Groups(보안 그룹 ) 탭에서 Create Security Group (보안 그룹 만들기)을 클릭합니다.
  3. 그룹에 대한 이름 및 설명을 입력하고 Create Security Group (보안 그룹 만들기)을 클릭합니다.

6.3.2. 보안 그룹 규칙 추가

기본적으로 새 그룹의 규칙은 나가는 액세스만 제공합니다. 추가 액세스를 제공하려면 새 규칙을 추가해야 합니다.

  1. 대시보드에서 Project > Compute > Access & Security 를 선택합니다.
  2. Security Groups(보안 그룹 ) 탭에서 편집할 보안 그룹의 Manage Rules (규칙 관리)를 클릭합니다.
  3. Add Rule (규칙 추가)을 클릭하여 새 규칙을 추가합니다.
  4. 규칙 값을 지정하고 Add(추가 )를 클릭합니다.

    다음 규칙 필드가 필요합니다.

    Rule

    규칙 유형. 규칙 템플릿(예: SSH)을 지정하면 해당 필드가 자동으로 채워집니다.

    • TCP: 일반적으로 시스템 간 및 최종 사용자 통신에 데이터를 교환하는 데 사용됩니다.
    • UDP: 일반적으로 시스템, 특히 애플리케이션 수준에서 데이터를 교환하는 데 사용됩니다.
    • ICMP: 일반적으로 라우터와 같은 네트워크 장치에서 오류 또는 모니터링 메시지를 전송하는 데 사용합니다.
    방향
    인그레스(인바운드) 또는 Egress(아웃바운드).
    포트 열기

    TCP 또는 UDP 규칙의 경우 열 포트 또는 포트 범위 (단일 포트 또는 포트 범위)입니다.

    • 범위의 경우 From Port and To Port(포트 및 대상 ) 필드에 포트 값을 입력합니다.
    • 단일 포트의 경우 Port (포트) 필드에 port 값을 입력합니다.
    유형
    ICMP 규칙의 유형입니다. 범위 -1:255 에 있어야 합니다.
    코드
    ICMP 규칙의 코드입니다. 범위 -1:255 에 있어야 합니다.
    원격

    이 규칙의 트래픽 소스는 다음과 같습니다.

    • CIDR(Classless Inter-Domain Routing): IP 주소 블록 - 블록 내의 IP에 대한 액세스를 제한합니다. Source(소스) 필드에 CIDR을 입력합니다.
    • 보안 그룹: 그룹의 모든 인스턴스가 다른 그룹 인스턴스에 액세스할 수 있도록 하는 소스 그룹입니다.

6.3.3. 보안 그룹 규칙 삭제

  1. 대시보드에서 Project > Compute > Access & Security 를 선택합니다.
  2. Security Groups(보안 그룹 ) 탭에서 보안 그룹의 Manage Rules (규칙 관리)를 클릭합니다.
  3. 보안 그룹 규칙을 선택하고 Delete Rule(규칙 삭제 )을 클릭합니다.
  4. Delete Rule (규칙 삭제)을 다시 클릭합니다.
참고

삭제 작업을 취소할 수 없습니다.

6.3.4. 보안 그룹 삭제

  1. 대시보드에서 Project > Compute > Access & Security 를 선택합니다.
  2. Security Groups(보안 그룹 ) 탭에서 그룹을 선택하고 Delete Security Groups(보안 그룹 삭제 )를 클릭합니다.
  3. Delete Security Groups(보안 그룹 삭제)를 클릭합니다.
참고

삭제 작업을 취소할 수 없습니다.

7장. 도메인 관리

ID 서비스(keystone) 도메인은 keystone에서 생성할 수 있는 추가 네임스페이스입니다. keystone 도메인을 사용하여 사용자, 그룹 및 프로젝트를 분할합니다. 서로 다른 LDAP 또는 Active Directory 환경에서 사용자를 인증하도록 이러한 개별 도메인을 구성할 수도 있습니다. 자세한 내용은 ID 서비스와 통합 가이드를 참조하십시오.

참고

ID 서비스에는 Default라는 기본 제공 도메인이 포함되어 있습니다. 이 도메인을 서비스 계정에 대해서만 예약하고 사용자 계정에 대해 별도의 도메인을 생성하는 것이 좋습니다.

7.1. 도메인 목록 보기

openstack domain list를 사용하여 도메인 목록을 볼 수 있습니다.

$ openstack domain list
+----------------------------------+------------------+---------+--------------------+
| ID                               | Name             | Enabled | Description        |
+----------------------------------+------------------+---------+--------------------+
| 3abefa6f32c14db9a9703bf5ce6863e1 | TestDomain       | True    |                    |
| 69436408fdcb44ab9e111691f8e9216d | corp             | True    |                    |
| a4f61a8feb8d4253b260054c6aa41adb | federated_domain | True    |                    |
| default                          | Default          | True    | The default domain |
+----------------------------------+------------------+---------+--------------------+

7.2. 새 도메인 생성

openstack domain create를 사용하여 새 도메인을 생성할 수 있습니다.

$ openstack domain create TestDomain
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| enabled     | True                             |
| id          | 3abefa6f32c14db9a9703bf5ce6863e1 |
| name        | TestDomain                       |
+-------------+----------------------------------+

7.3. 도메인의 세부 정보 보기

openstack domain show 를 사용하여 도메인의 세부 정보를 볼 수 있습니다.

$ openstack domain show TestDomain
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| enabled     | True                             |
| id          | 3abefa6f32c14db9a9703bf5ce6863e1 |
| name        | TestDomain                       |
+-------------+----------------------------------+

7.4. 도메인 비활성화

  1. --disable 을 사용하여 도메인을 비활성화할 수 있습니다.

    $ openstack domain set TestDomain --disable
  2. 도메인이 비활성화되었는지 확인합니다.

    $ openstack domain show TestDomain
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description |                                  |
    | enabled     | False                            |
    | id          | 3abefa6f32c14db9a9703bf5ce6863e1 |
    | name        | TestDomain                       |
    +-------------+----------------------------------+
  3. 그런 다음 필요한 경우 도메인을 다시 활성화할 수 있습니다.

    $ openstack domain set TestDomain --enable

8장. ID 관리

8.1. LDAP 통신 보안

LDAP 서버에서 인증하거나 LDAP 서버에서 ID 정보를 검색하도록 ID 서비스(keystone)를 구성한 경우 CA 인증서를 사용하여 ID 서비스의 LDAP 통신을 보호할 수 있습니다.

Active Directory에서 CA 인증서를 가져오고 CA 인증서 파일을 PEM(개인 정보 보호 강화 메일) 파일 형식으로 변환하고, ID 서비스에 대해 보안 LDAP 통신을 구성해야 합니다. CA 신뢰가 구성되는 위치 및 방법에 따라 세 가지 방법 중 하나로 이 구성을 수행할 수 있습니다.

8.1.1. Active Directory에서 CA 인증서 가져오기

다음 예제 코드를 사용하여 Active Directory를 쿼리하여 CA 인증서를 가져옵니다. CA_NAME은 인증서의 이름이고 구성에 따라 나머지 매개 변수를 변경할 수 있습니다.

CA_NAME="WIN2012DOM-WIN2012-CA"
AD_SUFFIX="dc=win2012dom,dc=com" LDAPURL="ldap://win2012.win2012dom.com"
ADMIN_DN="cn=Administrator,cn=Users,$AD_SUFFIX"
ADMINPASSWORD="MyPassword"

CA_CERT_DN="cn=latexmath:[$CA_NAME,cn=certification authorities,cn=public key services,cn=services,cn=configuration,$]AD_SUFFIX"

TMP_CACERT=/tmp/cacert.`date +'%Y%m%d%H%M%S'`.$$.pem

ldapsearch -xLLL -H
latexmath:[$LDAPURL -D `echo \"$]ADMIN_DN"`-W -s base -b`echo
"$CA_CERT_DN"` objectclass=* cACertificate

8.1.2. CA 인증서를 PEM 파일 형식으로 변환

/path/cacert.pem이라는 파일을 생성하고, 헤더와 바닥글 내에 Active Directory에서 CA 인증서를 가져온 LDAP 쿼리 PID-tty의 내용을 포함합니다.

-----BEGIN CERTIFICATE-----
MIIDbzCCAlegAwIBAgIQQD14hh1Yz7tPFLXCkKUOszANB... -----END
CERTIFICATE-----

문제 해결을 위해 다음 쿼리를 실행하여 LDAP가 작동하는지 확인하고 PEM 인증서 파일이 올바르게 생성되었는지 확인할 수 있습니다.

LDAPTLS_CACERT=/path/cacert.pem ldapsearch -xLLL -ZZ -H $LDAPURL -s base -b "" "objectclass=*" currenttime

쿼리에서 다음과 유사한 결과를 반환해야 합니다.

dn: currentTime:
20141022050611.0Z

다음 명령을 실행하여 웹 서버에서 호스팅하는 경우 CA 인증서를 가져올 수 있습니다.

예제

  • $HOST=redhat.com
  • $PORT=443
# echo Q | openssl s_client -connect $HOST:$PORT | sed -n -e '/BEGIN CERTIFICATE/,/END CERTIFICATE/ p'

8.1.3. ID 서비스에 대한 보안 LDAP 통신을 구성하는 방법

8.1.3.1. 방법 1

PEM 파일을 사용하여 LDAP 수준에서 CA 신뢰가 구성된 경우 이 방법을 사용합니다. CA 인증서 파일의 위치를 수동으로 지정합니다. 다음 절차에서는 ID 서비스뿐만 아니라 OpenLDAP 라이브러리를 사용하는 모든 애플리케이션에 대해 LDAP 통신을 보호합니다.

  1. PEM 형식의 CA 인증서 체인이 포함된 파일을 /etc/openldap/certs 디렉터리에 복사합니다.
  2. /etc/openldap/ldap.conf 를 편집하고 [CA_FILE]을 CA 인증서 파일의 위치 및 이름으로 교체하여 다음 지시문을 추가합니다.

    TLS_CACERT /etc/openldap/certs/[CA_FILE]
  3. Horizon 컨테이너를 다시 시작합니다.

    # systemctl restart tripleo_horizon

8.1.3.2. 방법 2

NSS(Network Security Services) 데이터베이스를 사용하여 LDAP 라이브러리 수준에서 CA 신뢰가 구성된 경우 이 방법을 사용합니다. certutil 명령을 사용하여 OpenLDAP 라이브러리에서 사용하는 NSS 인증서 데이터베이스로 CA 인증서를 가져오고 신뢰합니다. 다음 절차에서는 ID 서비스뿐만 아니라 OpenLDAP 라이브러리를 사용하는 모든 애플리케이션에 대해 LDAP 통신을 보호합니다.

  1. 인증서를 가져오고 신뢰하여 [CA_FILE]을 CA 인증서 파일의 위치 및 이름으로 바꿉니다.

    # certutil -d /etc/openldap/certs -A -n "My CA" -t CT,, -a -i [CA_FILE]
    # certutil -d /etc/openldap/certs -A -n "My CA" -t CT,, -a -i [CA_FILE]
  2. CA 인증서를 올바르게 가져왔는지 확인합니다.

    # certutil -d /etc/openldap/certs -L

    CA 인증서가 나열되고 신뢰 속성이 CT,, 로 설정됩니다.

  3. Horizon 컨테이너를 다시 시작합니다.

    # systemctl restart tripleo_horizon

8.1.3.3. 방법 3

PEM 파일을 사용하여 Keystone 수준에서 CA 신뢰가 구성된 경우 이 방법을 사용합니다. ID 서비스와 LDAP 서버 간의 통신을 보호하는 최종 방법은 ID 서비스에 대해 TLS를 구성하는 것입니다.

그러나 위의 두 가지 방법과 달리 이 방법은 ID 서비스에 대해서만 LDAP 통신을 보호하며 OpenLDAP 라이브러리를 사용하는 다른 애플리케이션에 대해 LDAP 통신을 보호하지 않습니다.

다음 절차에서는 openstack-config 명령을 사용하여 /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf 파일의 값을 편집합니다.

  1. TLS를 활성화합니다.

    # openstack-config --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf ldap use_tls True
  2. 인증서의 위치를 지정하고 [CA_FILE]을 CA 인증서 이름으로 바꿉니다.

    # openstack-config --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf ldap tls_cacertfile [CA_FILE]
  3. [CERT_BEHAVIOR]를 아래에 나열된 동작 중 하나로 교체하여 LDAP 서버에서 수신 TLS 세션에서 수행되는 클라이언트 인증서 검사를 지정합니다.

    수요
    항상 LDAP 서버에서 인증서를 요청합니다. 인증서가 제공되지 않거나 제공된 인증서를 기존 인증 기관 파일에 대해 확인할 수 없는 경우 세션이 종료됩니다.
    allow
    항상 LDAP 서버에서 인증서를 요청합니다. 인증서가 제공되지 않은 경우에도 세션이 정상적으로 진행됩니다. 인증서가 제공되었지만 기존 인증 기관 파일에 대해 확인할 수 없는 경우 인증서는 무시되고 세션이 정상적으로 진행됩니다.
    never
    인증서는 요청되지 않습니다.
    # openstack-config --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf ldap tls_req_cert [CERT_BEHAVIOR]
  4. keystone 및 horizon 컨테이너를 다시 시작합니다.

    # systemctl restart tripleo_keystone
    # systemctl restart tripleo_horizon

9장. 애플리케이션 인증 정보

애플리케이션 자격 증명을 사용하여 구성 파일에 사용자 계정 자격 증명을 포함하지 않도록 합니다. 대신 사용자는 단일 프로젝트에 위임된 액세스를 수신하고 고유한 고유 비밀이 있는 애플리케이션 자격 증명을 생성합니다. 또한 사용자는 위임된 권한을 해당 프로젝트의 단일 역할로 제한할 수 있습니다. 이를 통해 인증된 서비스에서 모든 프로젝트와 역할이 아닌 하나의 프로젝트와 역할에만 액세스할 수 있는 최소 권한의 원칙을 채택할 수 있습니다.

이 방법론을 사용하여 사용자 자격 증명을 노출하지 않고 API를 사용할 수 있으며 애플리케이션은 임베디드 사용자 자격 증명 없이도 Keystone에 인증할 수 있습니다.

애플리케이션 자격 증명을 사용하여 토큰을 생성하고 애플리케이션에 대한 keystone_authtoken 설정을 구성할 수 있습니다. 이러한 사용 사례는 다음 섹션에서 설명합니다.

참고

Application 자격 증명은 생성한 사용자 계정에 따라 다르므로 해당 계정이 삭제되거나 관련 역할에 대한 액세스 권한이 없는 경우 종료됩니다.

9.1. 애플리케이션 자격 증명을 사용하여 토큰 생성

애플리케이션 자격 증명은 사용자가 대시보드에서 셀프 서비스 기능으로 사용할 수 있습니다. 이 예제에서는 사용자가 애플리케이션 자격 증명을 만든 다음 이를 사용하여 토큰을 생성하는 방법을 보여줍니다.

  1. 테스트 프로젝트를 생성하고 사용자 계정을 테스트합니다.

    1. AppCreds 라는 프로젝트를 생성합니다.

      $ openstack project create AppCreds
    2. AppCredsUser 라는 사용자를 생성합니다.

      $ openstack user create --project AppCreds --password-prompt AppCredsUser
    3. AppCredsUserAppCreds 프로젝트의 member 역할에 대한 액세스 권한을 부여합니다.

      $ openstack role add --user AppCredsUser --project AppCreds member
  2. 대시보드에 AppCredsUser 로 로그인하여 애플리케이션 자격 증명을 만듭니다.

    개요ID애플리케이션 자격 증명+애플리케이션 자격 증명 생성.

    참고

    애플리케이션 자격 증명 이라는 팝업 창을 닫은 후 다시 액세스할 수 없으므로 clouds.yaml 파일 내용을 다운로드해야 합니다.

  3. CLI를 사용하여 /home/stack/.config/openstack/clouds.yaml 이라는 파일을 생성하고 clouds.yaml 파일의 내용을 붙여넣습니다.

    # This is a clouds.yaml file, which can be used by OpenStack tools as a source
    # of configuration on how to connect to a cloud. If this is your only cloud,
    # just put this file in ~/.config/openstack/clouds.yaml and tools like
    # python-openstackclient will just work with no further config. (You will need
    # to add your password to the auth section)
    # If you have more than one cloud account, add the cloud entry to the clouds
    # section of your existing file and you can refer to them by name with
    # OS_CLOUD=openstack or --os-cloud=openstack
    clouds:
      openstack:
        auth:
          auth_url: http://10.0.0.10:5000/v3
          application_credential_id: "6d141f23732b498e99db8186136c611b"
          application_credential_secret: "<example secret value>"
        region_name: "regionOne"
        interface: "public"
        identity_api_version: 3
        auth_type: "v3applicationcredential"
    참고

    이러한 값은 배포에 따라 달라집니다.

  4. 애플리케이션 자격 증명을 사용하여 토큰을 생성합니다. 다음 명령을 사용하는 경우 특정 사용자로 소싱해서는 안 되며 clouds.yaml 파일과 동일한 디렉터리에 있어야 합니다.

    [stack@undercloud-0 openstack]$ openstack --os-cloud=openstack token issue
    +------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Field      | Value                                                                                                                                                                                                        |
    +------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | expires    | 2018-08-29T05:37:29+0000                                                                                                                                                                                     |
    | id         | gAAAAABbhiMJ4TxxFlTMdsYJpfStsGotPrns0lnpvJq9ILtdi-NKqisWBeNiJlUXwmnoGQDh2CMyK9OeTsuEXnJNmFfKjxiHWmcQVYzAhMKo6_QMUtu_Qm6mtpzYYHBrUGboa_Ay0LBuFDtsjtgtvJ-r8G3TsJMowbKF-yo--O_XLhERU_QQVl3hl8zmMRdmLh_P9Cbhuolt |
    | project_id | 1a74eabbf05c41baadd716179bb9e1da                                                                                                                                                                             |
    | user_id    | ef679eeddfd14f8b86becfd7e1dc84f2                                                                                                                                                                             |
    +------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
참고

__init__()와 유사한 오류가 발생하면 예기치 않은 키워드 인수 'application_credential_secret'이 있는 경우 이전 자격 증명으로 계속 가져올 수 있습니다. 새 환경의 경우 sudo su - stack 을 실행합니다.

9.2. 애플리케이션 자격 증명과 애플리케이션 통합

애플리케이션 자격 증명을 사용하여 keystone에 애플리케이션을 인증할 수 있습니다. 애플리케이션 자격 증명을 사용하는 경우 keystone_authtoken 설정은 v3applicationcredential 을 인증 유형으로 사용하며 자격 증명 생성 프로세스 중에 수신하는 자격 증명을 포함합니다. 다음 값을 입력합니다.

  • application_credential_secret: 애플리케이션 자격 증명 시크릿.
  • application_credential_id: 애플리케이션 자격 증명 ID.
  • (선택 사항) application_credential_name: ID가 아닌 이름이 지정된 애플리케이션 자격 증명을 사용하는 경우 이 매개변수를 사용할 수 있습니다.

예를 들면 다음과 같습니다.

[keystone_authtoken]
auth_url = http://10.0.0.10:5000/v3
auth_type = v3applicationcredential
application_credential_id = "6cb5fa6a13184e6fab65ba2108adf50c"
application_credential_secret = "<example password>"

9.3. 명령줄을 사용하여 애플리케이션 자격 증명 관리

명령줄을 사용하여 애플리케이션 자격 증명을 생성하고 삭제할 수 있습니다.

create 하위 명령은 현재 소싱된 계정을 기반으로 애플리케이션 자격 증명을 생성합니다. 예를 들어 admin 사용자로 소싱할 때 자격 증명을 생성하면 애플리케이션 자격 증명에 동일한 역할이 부여됩니다.

$ openstack application credential create --description "App Creds - All roles" AppCredsUser
+--------------+----------------------------------------------------------------------------------------+
| Field        | Value                                                                                  |
+--------------+----------------------------------------------------------------------------------------+
| description  | App Creds - All roles                                                                  |
| expires_at   | None                                                                                   |
| id           | fc17651c2c114fd6813f86fdbb430053                                                       |
| name         | AppCredsUser                                                                           |
| project_id   | 507663d0cfe244f8bc0694e6ed54d886                                                       |
| roles        | member reader admin                                                                    |
| secret       | fVnqa6I_XeRDDkmQnB5lx361W1jHtOtw3ci_mf_tOID-09MrPAzkU7mv-by8ykEhEa1QLPFJLNV4cS2Roo9lOg |
| unrestricted | False                                                                                  |
+--------------+----------------------------------------------------------------------------------------+
주의

--unrestricted 매개변수를 사용하면 애플리케이션 인증 정보가 다른 애플리케이션 자격 증명과 신뢰를 생성하고 삭제할 수 있습니다. 이는 잠재적으로 위험한 동작이며 기본적으로 비활성화되어 있습니다. 다른 액세스 규칙과 함께 --unrestricted 매개변수를 사용할 수 없습니다.

기본적으로 결과 역할 멤버십에는 자격 증명을 생성한 계정에 할당된 모든 역할이 포함됩니다. 특정 역할에만 액세스를 위임하여 역할 멤버십을 제한할 수 있습니다.

$ openstack application credential create --description "App Creds - Member" --role member AppCredsUser
+--------------+----------------------------------------------------------------------------------------+
| Field        | Value                                                                                  |
+--------------+----------------------------------------------------------------------------------------+
| description  | App Creds - Member                                                                     |
| expires_at   | None                                                                                   |
| id           | e21e7f4b578240f79814085a169c9a44                                                       |
| name         | AppCredsUser                                                                           |
| project_id   | 507663d0cfe244f8bc0694e6ed54d886                                                       |
| roles        | member                                                                                 |
| secret       | XCLVUTYIreFhpMqLVB5XXovs_z9JdoZWpdwrkaG1qi5GQcmBMUFG7cN2htzMlFe5T5mdPsnf5JMNbu0Ih-4aCg |
| unrestricted | False                                                                                  |
+--------------+----------------------------------------------------------------------------------------+

애플리케이션 자격 증명을 삭제하려면 다음을 수행합니다.

$ openstack application credential delete AppCredsUser

9.4. 운영 작업

9.4.1. 기존 애플리케이션 자격 증명 교체

애플리케이션 자격 증명은 생성한 사용자 계정에 바인딩되며 사용자 계정이 삭제되거나 사용자가 위임된 역할에 대한 액세스 권한이 없는 경우 유효하지 않습니다. 따라서 필요에 따라 새 애플리케이션 자격 증명을 생성할 준비를 해야 합니다.

9.4.2. 설정 파일의 경우

애플리케이션에 할당된 애플리케이션 자격 증명을 업데이트합니다(구성 파일 사용).

  1. 새 애플리케이션 자격 증명 세트를 만듭니다.
  2. 새 자격 증명을 애플리케이션 구성 파일에 추가하여 기존 자격 증명을 대체합니다. 자세한 내용은 9.2절. “애플리케이션 자격 증명과 애플리케이션 통합”의 내용을 참조하십시오.
  3. 애플리케이션 서비스를 다시 시작하여 변경 사항을 적용합니다.
  4. 해당하는 경우 이전 Application 자격 증명을 삭제합니다. 명령줄 옵션에 대한 자세한 내용은 9.3절. “명령줄을 사용하여 애플리케이션 자격 증명 관리” 을 참조하십시오.

9.4.3. clouds.yaml 파일의 경우

clouds.yaml 에서 사용하는 기존 Application Credential 교체 :

예를 들어 clouds.yaml 에 만료된 AppCred1 이라는 Application 자격 증명이 있는 경우 다음을 실행합니다.

  1. AppCred2 라는 애플리케이션 자격 증명을 생성합니다.
  2. AppCred 1 구성을 제거하는 동안 새 AppCred 2clouds.yaml 파일에 추가합니다.
  3. clouds.yaml 로 토큰을 생성하여 인증 정보가 예상대로 작동하는지 확인합니다. 자세한 내용은 9.1절. “애플리케이션 자격 증명을 사용하여 토큰 생성” 단계를 참조하십시오.

법적 공지

Copyright © 2019 Red Hat, Inc.
이 문서의 텍스트와 그림은 Creative Commons Attribution-Share Alike 3.0 Unported 라이센스("CC-BY-SA")에 따라 Red Hat에서 라이센스를 부여합니다. CC-BY-SA에 대한 설명은 http://creativecommons.org/licenses/by-sa/3.0/ 에서 확인할 수 있습니다. CC-BY-SA에 따라 이 문서 또는 문서의 수정본을 배포할 경우 원본의 URL을 제공해야 합니다.
Red Hat은 이 문서의 라이센스 제공자로서 관련 법률이 허용하는 한도 내에서 CC-BY-SA의 섹션 4d를 시행할 권리를 포기하며 이를 주장하지 않을 것에 동의합니다.
Red Hat, Red Hat Enterprise Linux, Shadowman 로고, JBoss, Fedora, Infinity Logo 및 RHCE는 미국 및 기타 국가에 등록된 Red Hat, Inc.의 상표입니다.
Linux® 는 미국 및 기타 국가에서 Linus Torvalds의 등록 상표입니다.
Java® 는 Oracle 및/또는 그 계열사의 등록 상표입니다.
XFS® 는 미국 및/또는 기타 국가에 등록된 Silicon Graphics International Corp. 또는 그 자회사의 상표입니다.
MySQL® 은 미국, 유럽 연합 및 기타 국가에 있는 MySQL AB의 등록 상표입니다.
Node.js® 는 Joyent의 공식 상표입니다. Red Hat Software Collections는 공식 Joyent Node.js 오픈 소스 또는 상용 프로젝트의 보증 대상이 아니며 공식적인 관계도 없습니다.
OpenStack® Word Mark 및 OpenStack Logo는 미국 및 기타 국가에서 OpenStack Foundation의 등록 상표/서비스 마크 또는 상표/서비스표이며 OpenStack Foundation의 허가를 받아 사용됩니다. 당사는 OpenStack Foundation 또는 OpenStack 커뮤니티와 제휴 관계가 아니며 보증 또는 후원을 받지 않습니다.
기타 모든 상표는 각각 해당 소유자의 자산입니다.