Thursday, November 21, 2024

[Openstack] Phần 2: Keystone service

-

1. Keystone là gì?

Keystone là một dịch vụ quản lý danh tính (Identity Service) trong nền tảng đám mây OpenStack. Keystone cho phép quản trị viên xác thực và ủy quyền truy cập đến các dịch vụ khác của OpenStack như Nova, Glance, Cinder, Swift, Neutron, và các dịch vụ khác.

Keystone quản lý danh sách người dùng, vai trò (role), nhóm, và dự án (project), hỗ trợ xác thực dựa trên token, tên người dùng/mật khẩu và OpenID Connect. Nó cũng hỗ trợ các giao thức xác thực khác như OAuth 1.0a và SAML (Security Assertion Markup Language).

Keystone cho phép quản trị viên cấu hình và quản lý các quyền truy cập cho người dùng và vai trò của họ. Nó cung cấp các chức năng quản lý tài khoản người dùng, khôi phục mật khẩu, quản lý token và phiên làm việc.

Với Keystone, người dùng và quản trị viên có thể quản lý và kiểm soát truy cập vào các dịch vụ khác của OpenStack một cách hiệu quả và an toàn. Keystone là một trong những thành phần quan trọng nhất của OpenStack, đóng vai trò quan trọng trong việc cung cấp một môi trường đám mây an toàn và bảo mật

  • Tạo Database keystone.
mysql -u root -pHoanghd164 -e "CREATE DATABASE keystone;"
mysql -u root -pHoanghd164 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';"
mysql -u root -pHoanghd164 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';"
mysql -u root -pHoanghd164 -e "FLUSH PRIVILEGES;"

keystone: Là gói phần mềm cài đặt dịch vụ quản lý danh tính (Identity Service) Keystone trong OpenStack. Sau khi cài đặt Keystone, người dùng có thể quản lý danh sách người dùng, vai trò, nhóm và dự án, cấu hình xác thực và quyền truy cập.

sudo apt install keystone -y

Backup file config.

cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak

Chỉnh sửa /etc/keystone/keystone.conf và hoàn tất các thao tác sau:

[database]
# ...
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
  • [database]: Đây là phần cấu hình kết nối đến cơ sở dữ liệu MySQL sử dụng driver pymysql. Keystone sẽ sử dụng cơ sở dữ liệu này để lưu trữ thông tin về danh tính, quyền truy cập và xác thực trong hệ thống OpenStack.
  • connection: Đây là thông tin kết nối đến cơ sở dữ liệu MySQL. Trong ví dụ này, địa chỉ của MySQL là controller, tên người dùng của cơ sở dữ liệu là keystone, và mật khẩu của tài khoản đó là KEYSTONE_DBPASS. Thông tin này cần được điều chỉnh phù hợp với cấu hình MySQL trên hệ thống của bạn.

Cấu hình sử dụng mã thông báo (token) trong Keystone.

Trong ví dụ này, Keystone sử dụng mã thông báo được mã hóa bởi Fernet để mã hóa và giải mã mã thông báo

[token]
# ...
provider = fernet

Đồng bộ hóa cơ sở dữ liệu Keystone với các bảng và cấu trúc được định nghĩa trong mã nguồn Keystone. Nó sẽ tạo ra các bảng cần thiết trong cơ sở dữ liệu và điền dữ liệu mặc định vào bảng.

su -s /bin/sh -c "keystone-manage db_sync" keystone

Tạo các khóa mã hóa Fernet và lưu chúng vào các file trong hệ thống file của Keystone.

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

Tạo ra các thông tin xác thực và lưu chúng vào cơ sở dữ liệu Keystone.

keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

Đoạn lệnh keystone-manage bootstrap được sử dụng để khởi tạo Identity service (Keystone) trong OpenStack. Nó sẽ tạo ra một dịch vụ, một project, một user và một role có tên là ‘admin’. Nó cũng sẽ tạo ra một endpoint cho dịch vụ Identity.

keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
  --bootstrap-admin-url http://controller:5000/v3/ \
  --bootstrap-internal-url http://controller:5000/v3/ \
  --bootstrap-public-url http://controller:5000/v3/ \
  --bootstrap-region-id RegionOne

Dưới đây là ý nghĩa của từng tham số:

  • --bootstrap-password ADMIN_PASS: Đặt mật khẩu cho tài khoản admin. Bạn cần thay ADMIN_PASS bằng mật khẩu thực sự mà bạn muốn sử dụng.
  • --bootstrap-admin-url http://controller:5000/v3/: Đặt URL admin cho Identity service. Trong trường hợp này, URL là http://controller:5000/v3/.
  • --bootstrap-internal-url http://controller:5000/v3/: Đặt URL nội bộ cho Identity service. Trong trường hợp này, URL là http://controller:5000/v3/.
  • --bootstrap-public-url http://controller:5000/v3/: Đặt URL công khai cho Identity service. Trong trường hợp này, URL là http://controller:5000/v3/.
  • --bootstrap-region-id RegionOne: Đặt ID khu vực cho Identity service. Trong trường hợp này, ID khu vực là RegionOne.

Khi chạy lệnh keystone-manage bootstrap, Keystone sẽ tạo ra người dùng admin đầu tiên, dự án admin đầu tiên và vai trò admin đầu tiên trong Keystone. Nó cũng sẽ thiết lập các URL cần thiết để truy cập Keystone, bao gồm URL cho giao diện quản trị viên, giao diện Keystone sử dụng cho các thành phần trong hệ thống OpenStack và URL được sử dụng bởi các ứng dụng và dịch vụ bên ngoài để truy cập Keystone. Sau khi hoàn tất các bước cài đặt và khởi tạo Keystone, bạn đã có thể sử dụng Keystone để quản lý người dùng, dự án và vai trò trong OpenStack.

Bạn có thể đăng nhập vào Keystone sử dụng các tài khoản admin hoặc user đã được tạo trong quá trình khởi tạo Keystone.

Các dịch vụ khác trong OpenStack như Nova, Glance, Neutron, Cinder… cũng sẽ sử dụng Keystone để xác thực và quản lý các tài nguyên.

Để sử dụng Keystone trong OpenStack, bạn cần cấu hình các dịch vụ khác để sử dụng Keystone làm Identity service. Sau đó, bạn có thể sử dụng giao diện hoặc các công cụ dòng lệnh để thực hiện các thao tác quản lý tài nguyên.

Thêm dòng "ServerName controller" vào cuối file /etc/apache2/apache2.conf.

echo 'ServerName controller' >> /etc/apache2/apache2.conf

Đây là file cấu hình của Apache HTTP Server, một trong những dịch vụ được sử dụng trong OpenStack để cung cấp các API. Đối với một số phiên bản của Apache, bắt buộc phải cung cấp giá trị cho biến ServerName. Thêm dòng này vào file cấu hình sẽ đảm bảo rằng biến ServerName được cung cấp và đúng giá trị, giúp Apache hoạt động chính xác. Lệnh này thường được sử dụng khi cài đặt các dịch vụ OpenStack như Keystone, Glance, Nova, Neutron… trên một máy chủ có sử dụng Apache HTTP Server.

Khởi động lại và kích hoạt tự khởi động cho Apache2.

systemctl restart apache2
systemctl enable apache2

Xác nhận lại trạng thái dịch vụ.

systemctl status apache2 | grep active

Các lệnh export trong OpenStack là để đặt các biến môi trường để có thể truy cập và sử dụng các dịch vụ của Keystone.

echo '''export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3''' > environment
  • OS_USERNAME: định nghĩa tên người dùng để sử dụng khi xác thực đến Keystone.
  • OS_PASSWORD: định nghĩa mật khẩu của người dùng để sử dụng khi xác thực đến Keystone.
  • OS_PROJECT_NAME: định nghĩa tên dự án sẽ được sử dụng khi xác thực đến Keystone.
  • OS_USER_DOMAIN_NAME: định nghĩa tên miền người dùng trong Keystone. Mặc định là “Default”.
  • OS_PROJECT_DOMAIN_NAME: định nghĩa tên miền dự án trong Keystone. Mặc định là “Default”.
  • OS_AUTH_URL: định nghĩa URL của Keystone để xác thực.
  • OS_IDENTITY_API_VERSION: định nghĩa phiên bản API của Keystone sẽ được sử dụng. Trong trường hợp này, sử dụng phiên bản API 3.

Sau khi đặt các biến môi trường này, bạn có thể sử dụng các công cụ dòng lệnh của OpenStack để thực hiện các thao tác quản lý tài nguyên trên OpenStack. Ví dụ: sử dụng lệnh openstack user list để liệt kê danh sách các người dùng được tạo trong Keystone.

Bạn hãy xác minh lại để đảm bảo các port dưới đã listen nhé.

shell> netstat -tlnp 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      5130/sshd: /usr/sbi 
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      3992/systemd-resolv 
tcp        0      0 192.168.13.201:3306     0.0.0.0:*               LISTEN      25923/mariadbd      
tcp        0      0 192.168.13.201:11211    0.0.0.0:*               LISTEN      28176/memcached     
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      27401/beam.smp      
tcp        0      0 127.0.0.1:34533         0.0.0.0:*               LISTEN      3440/node           
tcp        0      0 192.168.13.201:2379     0.0.0.0:*               LISTEN      28946/etcd          
tcp        0      0 127.0.0.1:40211         0.0.0.0:*               LISTEN      3810/code-0ee08df0c 
tcp6       0      0 :::22                   :::*                    LISTEN      5130/sshd: /usr/sbi 
tcp6       0      0 :::80                   :::*                    LISTEN      35906/apache2       
tcp6       0      0 :::4369                 :::*                    LISTEN      1/systemd           
tcp6       0      0 :::2380                 :::*                    LISTEN      28946/etcd          
tcp6       0      0 :::5000                 :::*                    LISTEN      35906/apache2       
tcp6       0      0 :::5672                 :::*                    LISTEN      27401/beam.smp

3. Create a domain, projects, users, and roles

Chạy file environment để cài đặt các biến môi trường.

. environment

Các lệnh dưới đây là các lệnh để tạo và quản lý các tài nguyên trong Keystone của OpenStack.

Tạo một domain mới trong Keystone, trong trường hợp này, lệnh sẽ tạo một domain có tên là “example” và mô tả là “An Example Domain”.

shell> openstack domain create --description "An Example Domain" example
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | An Example Domain                |
| enabled     | True                             |
| id          | 2f4f80574fd84fe6ba9067228ae0a50c |
| name        | example                          |
| tags        | []                               |
+-------------+----------------------------------+

Tạo một project mới trong Keystone, trong trường hợp này, lệnh sẽ tạo hai project:

  • “service” với mô tả là “Service Project” và thuộc domain mặc định.
  • “myproject” với mô tả là “Demo Project” và cũng thuộc domain mặc định.
shell> openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 24ac7f19cd944f4cba1d77469b2a73ed |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+

$ openstack project create --domain default --description "Demo Project" myproject
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 231ad6e7ebba47d6a1e57e1cc07ae446 |
| is_domain   | False                            |
| name        | myproject                        |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+

Tạo một user mới trong Keystone, trong trường hợp này, lệnh sẽ tạo một user có tên là “myuser”, mật khẩu là “MYUSER_PASS” và thuộc domain mặc định.

shell> openstack user create --domain default --password MYUSER_PASS myuser
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | aeda23aa78f44e859900e22c24817832 |
| name                | myuser                           |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

Tạo một role mới trong Keystone, trong trường hợp này, lệnh sẽ tạo một role có tên là “myrole”.

shell> openstack role create myrole
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | 997ce8d05fc143ac97d83fdfb5998552 |
| name      | myrole                           |
+-----------+----------------------------------+

Gán một role cho một user hoặc một group trong một project, trong trường hợp này, lệnh sẽ gán role “myrole” cho user “myuser” trong project “myproject”. Lưu ý là lệnh openstack role add sẽ không cho ra output nhé.

openstack role add --project myproject --user myuser myrole

Các lệnh trên là các lệnh cơ bản trong việc quản lý người dùng, project, domain và role trong Keystone của OpenStack. Sau khi tạo xong các tài nguyên này, bạn có thể sử dụng chúng để quản lý và phân quyền truy cập trên các dịch vụ của OpenStack.

4. Verify operation

Các lệnh tiếp theo được sử dụng để lấy token truy cập cho tài khoản trong OpenStack.

Đầu tiên hãy bỏ 2 biến OS_AUTH_URL và OS_PASSWORD bằng lệnh dưới.

unset OS_AUTH_URL OS_PASSWORD

Sử dụng tài khoản admin để lấy token truy cập. Các thông tin đăng nhập được cung cấp thông qua các tham số command line, bao gồm địa chỉ URL xác thực (OS_AUTH_URL), tên dự án (OS_PROJECT_NAME), tên người dùng (OS_USERNAME) và mật khẩu người dùng (OS_PASSWORD). Token được trả về bao gồm các thông tin về người dùng, dự án, thời gian hết hạn và các quyền truy cập.

shell> openstack --os-auth-url http://controller:5000/v3 \
  --os-project-domain-name Default --os-user-domain-name Default \
  --os-project-name admin --os-username admin --os-password ADMIN_PASS token issue
+------------+-----------------------------------------------------------------+
| Field      | Value                                                           |
+------------+-----------------------------------------------------------------+
| expires    | 2016-02-12T20:14:07.056119Z                                     |
| id         | gAAAAABWvi7_B8kKQD9wdXac8MoZiQldmjEO643d-e_j-XXq9AmIegIbA7UHGPv |
|            | atnN21qtOMjCFWX7BReJEQnVOAj3nclRQgAYRsfSU_MrsuWb4EDtnjU7HEpoBb4 |
|            | o6ozsA_NmFWEpLeKy0uNn_WeKbAhYygrsmQGA49dclHVnz-OMVLiyM9ws       |
| project_id | 343d245e850143a096806dfaefa9afdc                                |
| user_id    | ac3377633149401296f6c0d92d79dc16                                |
+------------+-----------------------------------------------------------------+

Lệnh thứ hai sử dụng tài khoản myuser trong dự án myproject để lấy token truy cập. Các thông tin đăng nhập tương tự được cung cấp thông qua các tham số command line. Kết quả trả về cũng bao gồm các thông tin tương tự như lệnh đầu tiên.

shell> openstack --os-auth-url http://controller:5000/v3 \
  --os-project-domain-name Default --os-user-domain-name Default \
  --os-project-name myproject --os-username myuser --os-password MYUSER_PASS token issue
+------------+-----------------------------------------------------------------+
| Field      | Value                                                           |
+------------+-----------------------------------------------------------------+
| expires    | 2016-02-12T20:15:39.014479Z                                     |
| id         | gAAAAABWvi9bsh7vkiby5BpCCnc-JkbGhm9wH3fabS_cY7uabOubesi-Me6IGWW |
|            | yQqNegDDZ5jw7grI26vvgy1J5nCVwZ_zFRqPiz_qhbq29mgbQLglbkq6FQvzBRQ |
|            | JcOzq3uwhzNxszJWmzGC7rJE_H0A_a3UFhqv8M4zMRYSbS2YF0MyFmp_U       |
| project_id | ed0b60bf607743088218b0a533d5943f                                |
| user_id    | 58126687cbcc4888bfa9ab73a2256f27                                |
+------------+-----------------------------------------------------------------+

5. Create OpenStack client environment scripts

Ở phần trên, chúng ta đã sử dụng một kết hợp giữa các biến môi trường và các tùy chọn lệnh để tương tác với dịch vụ Identity thông qua client OpenStack. Tuy nhiên, để tăng hiệu suất các hoạt động của client, OpenStack hỗ trợ các tập tin môi trường đơn giản cho client còn được gọi là file OpenRC. Những tập tin này thường chứa các tùy chọn chung cho tất cả các client, nhưng cũng hỗ trợ các tùy chọn độc quyền. Bằng cách sử dụng file OpenRC, người dùng có thể tự động thiết lập các biến môi trường thay vì phải nhập lại chúng cho mỗi phiên làm việc với OpenStack. Điều này làm giảm khả năng nhập sai và tăng hiệu suất sử dụng OpenStack. Tệp OpenRC có thể được tải xuống từ trang web dashboard hoặc được cung cấp bởi người quản trị hệ thống.

Sử dụng lệnh echo để ghi đoạn văn bản vào file admin-openrc với nội dung là một số biến môi trường (environment variables) được sử dụng để cấu hình xác thực (authentication) khi truy cập các dịch vụ trong hệ thống OpenStack.

Cụ thể, các biến môi trường được định nghĩa như sau:

  • OS_PROJECT_DOMAIN_NAME=Default: tên miền của project mặc định, ở đây được đặt là Default.
  • OS_USER_DOMAIN_NAME=Default: tên miền của user mặc định, ở đây được đặt là Default.
  • OS_PROJECT_NAME=admin: tên của project quản trị, ở đây được đặt là admin.
  • OS_USERNAME=admin: tên người dùng quản trị hệ thống OpenStack, ở đây được đặt là admin.
  • OS_PASSWORD=ADMIN_PASS: mật khẩu của người dùng quản trị hệ thống OpenStack, ở đây được đặt là ADMIN_PASS.
  • OS_AUTH_URL=http://controller:5000/v3: URL của dịch vụ xác thực Identity API, ở đây được đặt là http://controller:5000/v3.
  • OS_IDENTITY_API_VERSION=3: phiên bản của API Identity được sử dụng, ở đây là phiên bản 3.
  • OS_IMAGE_API_VERSION=2: phiên bản của API Image được sử dụng, ở đây là phiên bản 2.

Sau khi thực thi lệnh này, file admin-openrc sẽ được tạo ra trong thư mục hiện tại với nội dung như trên và các biến môi trường này sẽ có sẵn trong phiên làm việc (session) hiện tại để sử dụng cho các lệnh tiếp theo của openstack client.

echo '''export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2''' > admin-openrc

Tương tự tạo một file script demo-openrc chứa các biến môi trường để sử dụng với lệnh OpenStack client. Tương tự với file admin-openrc, file demo-openrc chứa các thông tin xác thực để OpenStack client có thể kết nối và thực hiện các thao tác với các dịch vụ trong OpenStack. Điều này giúp người quản trị có thể dễ dàng và nhanh chóng sử dụng các lệnh OpenStack client mà không cần phải nhập các thông tin xác thực mỗi lần thực hiện một thao tác.

echo '''export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=MYUSER_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2''' > demo-openrc

Chạy file admin-openrc

. admin-openrc

Sử dụng lệnh “openstack token issue” để tạo và xác thực một mã thông báo (token) OpenStack. Mã thông báo này được sử dụng để xác thực việc truy cập vào các dịch vụ khác trong hệ thống OpenStack.

shell> openstack token issue

+------------+-----------------------------------------------------------------+
| Field      | Value                                                           |
+------------+-----------------------------------------------------------------+
| expires    | 2016-02-12T20:44:35.659723Z                                     |
| id         | gAAAAABWvjYj-Zjfg8WXFaQnUd1DMYTBVrKw4h3fIagi5NoEmh21U72SrRv2trl |
|            | JWFYhLi2_uPR31Igf6A8mH2Rw9kv_bxNo1jbLNPLGzW_u5FC7InFqx0yYtTwa1e |
|            | eq2b0f6-18KZyQhs7F3teAta143kJEWuNEYET-y7u29y0be1_64KYkM7E       |
| project_id | 343d245e850143a096806dfaefa9afdc                                |
| user_id    | ac3377633149401296f6c0d92d79dc16                                |
+------------+-----------------------------------------------------------------+

Khi thực thi lệnh openstack token issue, hệ thống sẽ yêu cầu người dùng xác thực với các thông tin xác thực đã được cấu hình, bao gồm tên người dùng, mật khẩu và URL xác thực. Sau khi xác thực thành công, lệnh sẽ tạo ra một mã thông báo và trả về cho người dùng, bao gồm các thông tin như thời gian hết hạn và các thông tin liên quan khác.

Mã thông báo này có thể được sử dụng để xác thực các yêu cầu truy cập đến các dịch vụ OpenStack khác như Nova, Glance, Cinder, Neutron và Keystone.

Phần tiếp theo, chúng ta sẽ cài đặt và cấu hình Image service.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories