Sử dụng giao thức xác thực với Amazon Aurora MySQL

Amazon Aurora MySQL-Compatible Edition cung cấp nhiều phương thức xác thực để xác thực quyền truy cập của người dùng cơ sở dữ liệu một cách an toàn và đáp ứng các nhu cầu bảo mật khác nhau. Phương pháp xác thực phổ biến nhất là sử dụng tên người dùng và mật khẩu. Điều này có thể tạo thêm chi phí cho cả người dùng và quản trị viên cơ sở dữ liệu để quản lý và xoay vòng các thông tin xác thực này; nó cũng đòi hỏi đầu tư bổ sung vào kiểm toán và quản trị.

Amazon Aurora MySQL hiện hỗ trợ xác thực Microsoft Active Directory (AD) bằng Kerberos cho Amazon Aurora MySQL phiên bản 3.03 trở lên. Với sự hỗ trợ của  AWS Directory Service tích hợp Microsoft Active Directory, bạn có thể quản lý người dùng cơ sở dữ liệu  tập trung và sử dụng tính năng đăng nhập một lần để xác thực người dùng cơ sở dữ liệu.

Trong bài đăng này, chúng ta thảo luận cách tích hợp Microsoft AD tự quản lý với AWS Managed Microsoft AD, bật xác thực Kerberos trong Amazon Aurora MySQL và xác thực bằng Kerberos từ máy khách Windows và Linux.

Giao thức Kerberos

Kerberos hoạt động như một giao thức xác thực mạng cho phép các tài nguyên xác minh danh tính lẫn nhau trên các mạng không tin cậy. Khả năng này cho phép Amazon Aurora MySQL tích hợp với các dịch vụ xác thực tập trung như Microsoft AD vốn đã hỗ trợ Kerberos.

Quy trình xác thực Kerberos bao gồm các bước sau trong MySQL:

  1. Ứng dụng khách nhận tên chính của dịch vụ (SPN) từ Amazon Aurora MySQL.
  2. Xác thực Kerberos trong MySQL sử dụng Generic Security Application Program Interface (GSSAPI). Với GSSAPI, ứng dụng khách khởi tạo phiên xác thực phía máy khách Kerberos và liên lạc bằng Kerberos messages với Trung tâm phân phối khóa Kerberos (KDC).
  3. Bằng cách sử dụng máy chủ cung cấp vé (ticket granting server – TGS), khách hàng sẽ nhận được vé dịch vụ cho Amazon Aurora MySQL từ dịch vụ cấp vé.
  4. Thông qua GSSAPI, ứng dụng khách sẽ chuyển tiếp phiếu dịch vụ MySQL tới Amazon Aurora MySQL.
  5. Thông qua GSSAPI, Amazon Aurora MySQL khởi tạo phiên xác thực phía dịch vụ Kerberos, xác minh danh tính của người dùng và tính hợp pháp của yêu cầu của người dùng.

Để biết thông tin chi tiết về xác thực Kerberos trong MySQL, hãy xem Kerberos Pluggable Authentication.

Tổng quan giải pháp

Để mô phỏng môi trường Microsoft AD tự quản, bạn có thể tạo Active Directory trên một Amazon EC2 instance chạy trên một VPC, AWS Managed Microsoft AD trên một VPC riêng biệt và nhóm tin cậy một chiều (one-way trust forest) giữa chúng. Để biết thêm thông tin về việc chuẩn bị môi trường, xem Preparing on-premises and AWS environments for external Kerberos authentication for Amazon RDS.

Sơ đồ sau minh họa kiến ​​trúc bậc cao của môi trường tự quản lý và do AWS quản lý.

Điều kiện tiên quyết

Trong bài đăng này, chúng tôi giả sử bạn đã có Active Directory tự quản lý và đã thiết lập tin cậy giữa AD tự quản lý và AD do AWS quản lý. Đối với bài đăng này, chúng ta sử dụng tên miền Microsoft AD được quản lý bởi AWS có tên ad.myaws.com và tên miền AD tự quản lý có tên onprem.local. Để truy cập vào cụm Aurora MySQL nằm trong một VPC riêng biệt, chúng ta kích hoạt VPC peering để thiết lập kết nối mạng và kích hoạt nhóm tin cậy một chiều để hỗ trợ định tuyến bằng hậu tố tên. Điều này sẽ cho phép xác thực Kerberos giữa hai Active Directory forest. Để kích hoạt forest trusts, hãy hoàn thành các bước sau:

  1. Trong AD tự quản, tạo một bộ chuyển tiếp có điều kiện mới để chuyển tiếp yêu cầu DNS tới AD do AWS quản lý.
  2. Tạo nhóm tin cậy gửi đến một chiều cho AD do AWS quản lý.
  3. Tạo nhóm tin cậy gửi đi một chiều cho AD tự quản lý từ AD do AWS quản lý của bạn.

Để biết thông tin chi tiết về các bước này, hãy xem Preparing on-premises and AWS environments for external Kerberos authentication for Amazon RDS.

Ảnh chụp màn hình sau đây hiển thị AD do AWS quản lý.

Tạo cụm Aurora mới

Tạo cụm Aurora MySQL mới với phiên bản 3.03 trở lên và bật xác thực Kerberos, sau đó chọn AD do AWS quản lý mà bạn muốn liên kết với cụm. Nếu cụm Aurora MySQL đã được tạo, bạn có thể sửa đổi cụm đó để cho phép xác thực Kerberos, như minh họa trong ảnh chụp màn hình sau.

Sẽ mất vài phút để thay đổi mới có hiệu lực. Bạn có thể xác nhận sửa đổi được áp dụng thành công bằng AWS Management Console hoặc AWS Command Line Interface (AWS CLI). Lệnh AWS CLI sau đây hiển thị thành viên miền của cụm Aurora MySQL:

aws rds describe-db-clusters —db-cluster-identifier yourcluster-identifier\

–region region-name\

–query ‘DBClusters[*].[DomainMemberships]’

[

    [

        {

            “Domain”: “d-xxyyyzzz1234”,

            “Status”: “kerberos-enabled”,

            “FQDN”: “ad.myaws.com”,

            “IAMRoleName”: “rds-directoryservice-kerberos-access-role”

        }

    ]

]

Khi bật xác thực Kerberos cho cụm DB hiện có, hãy khởi động lại tất cả các instance trong cụm sau khi áp dụng sửa đổi. Xem hướng dẫn Setting up Kerberos authentication for Aurora MySQL clusters.

Tạo người dùng miền AD

Tạo người dùng miền AD dựa trên chính sách bảo mật doanh nghiệp của bạn. Đối với bài đăng này, chúng ta tạo người dùng joedoe@ONPREM.LOCAL, như trong ảnh chụp màn hình sau. Chúng ta sử dụng người dùng này để kết nối với Aurora MySQL bằng xác thực Kerberos.

Tạo người dùng cơ sở dữ liệu

Kết nối với cụm Aurora MySQL bằng người dùng quản trị viên và xác minh xác thực Kerberos đã được bật:

[ec2-user@ip-10-0-3-4 ~]$ mysql -h aurora-kerberos.cluster-xxyzzz.ap-southeast-2.rds.amazonaws.com -u admin -p

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = ‘authentication_kerberos’;

+————————-+—————-+

| PLUGIN_NAME             | PLUGIN_STATUS  |

+————————-+—————-+

| authentication_kerberos | ACTIVE         |

+————————-+—————-+

1 row in set (0.00 sec)

Tạo người dùng để xác thực Kerberos và xác nhận tính hợp lệ của nó. Cung cấp cho người dùng các quyền cần thiết. Lệnh sau minh họa quá trình tạo người dùng cơ sở dữ liệu có tên joedoe để kết nối thông qua xác thực Kerberos từ miền ONPREM.LOCAL:

mysql> CREATE USER joedoe@’%’ IDENTIFIED WITH ‘authentication_kerberos’ BY ‘ONPREM.LOCAL’;

Query OK, 0 rows affected (0.01 sec)

mysql> SELECT USER, HOST, PLUGIN, AUTHENTICATION_STRING FROM mysql.user WHERE USER=’joedoe’;

+——–+——+————————-+———————–+

| USER   | HOST | PLUGIN                  | AUTHENTICATION_STRING |

+——–+——+————————-+———————–+

| joedoe | %    | authentication_kerberos | ONPREM.LOCAL          |

+——–+——+————————-+———————–+

1 row in set (0.00 sec)

Kết nối với Amazon Aurora MySQL từ Windows

Để kết nối từ Windows, RDP vào máy khách Windows bằng cách sử dụng người dùng miền joedoe đã được tạo trong AD tự quản lý. Tạo tệp cấu hình Kerberos có tên krb5.conf trên máy khách Windows. Tệp thiết lập krb5.conf phải bao gồm các chi tiết sau:

[libdefaults]

dns_lookup_realm = false

ticket_lifetime = 24h

renew_lifetime = 7d

forwardable = true

rdns = false

doNotPrompt = false

default_realm = AD.MYAWS.COM

[realms]

AD.MYAWS.COM = {

kdc = ad.myaws.com

admin_server = ad.myaws.com

}

  ONPREM.LOCAL = {

  kdc = onprem.local

  admin_server = onprem.local

  }

[domain_realm]

.ad.myaws.com = AD.MYAWS.COM

ad.myaws.com = AD.MYAWS.COM

.onprem.local = ONPREM.LOCAL

onprem.local = ONPREM.LOCAL

.rds.amazonaws.com = AD.MYAWS.COM

.amazonaws.com.cn = AD.MYAWS.COM

.amazon.com = AD.MYAWS.COM

Ngoài ra, hãy đặt biến môi trường KRB5_CONFIG trỏ đến vị trí của tệp krb5.conf. Ví dụ: đặt biến trong máy khách Windows như sau:

SET KRB5_CONFIG=C:\Program Files\MySQL\MySQL Server 8.0\krb5.conf

Để lưu biến này vĩnh viễn, hãy tạo biến môi trường hệ thống Windows. Để tạo vé cấp vé và lưu vào bộ đệm thông tin xác thực Kerberos, hãy cài đặt trình quản lý vé MIT Kerberos từ MIT Kerberos Distribution Page . Sau khi cài đặt, tạo vé cho người dùng tên miền, trong trường hợp này là joedoe@ONPREM.LOCAL.

Chúng ta đã cấu hình tất cả các điều kiện tiên quyết để kết nối với Amazon Aurora MySQL từ máy khách Windows. Bây giờ chúng ta hãy kết nối với cụm Aurora MySQL bằng lệnh:

mysql -h aurora-kerberos.cluster-xxyzzz.ap-southeast-2.rds.amazonaws.com -u joedoe –plugin-authentication-kerberos-client-mode=GSSAPI \ 

–plugin-dir=”C:\Program Files\MySQL Server 8.0\lib\plugin”

Tham sốMiêu tả
-hEnd-point của cụm Aurora
-uTên người dùng AD
-plugin-authentication-kerberos-client-modeChỉ định chế độ plugin xác thực ứng dụng client. Chế độ GSSAPI kích hoạt xác thực thông qua thư viện MIT Kerberos.
-plugin-dirChỉ định vị trí của authentication_kerberos_client plugin cho ứng dụng client.

Để kết nối từ MySQL Workbench bằng xác thực Kerberos, hãy hoàn thành các bước sau:

  1. Đối với Connection Method , chọn NativeKerberos .
  2. Trên tab Parameters , cung cấp thông tin sau:
    1. Đối với Hostname , hãy nhập điểm cuối của cụm Aurora MySQL.
    2. Đối với Username, hãy nhập tên người dùng Aurora MySQL đã được tạo để xác thực Kerberos.
    3. Đối với Kerberos Mode, chọn GSS API Authentication .
  3. Trên tab Advanced, cấu hình các biến sau:
    1. Đối với Path to plugin directory, nhập đường dẫn đến thư mục plugin máy khách MySQL Server.
    2. Đối với Kerberos configuration path, nhập đường dẫn đến file cấu hình Kerberos.
  4. Chọn Test Connection để kiểm tra kết nối với MySQL Workbench.
  5. Khi quá trình kiểm tra thành công, hãy chọn OK , sau đó chọn OK để hoàn tất kết nối của bạn.

Kết nối với Amazon Aurora MySQL từ Linux

Để kết nối từ Linux, hãy SSH vào máy Linux của bạn bằng người dùng tên miền joedoe. Xác minh máy Linux đã tham gia vào miền bằng lệnh sau:

[joedoe@ip-10-10-0-123 ~]$ realm list

ONPREM.LOCAL

type: kerberos

realm-name: ONPREM.LOCAL

domain-name: onprem.local

configured: kerberos-member

server-software: active-directory

client-software: sssd

required-package: oddjob

required-package: oddjob-mkhomedir

required-package: sssd

required-package: adcli

required-package: samba-common-tools

login-formats: %U

login-policy: allow-realm-logins

Theo mặc định, máy khách Kerberos có thể không được cài đặt trên tất cả các máy Linux. Để cài đặt máy khách Kerberos trên Amazon Linux 2, hãy sử dụng lệnh sau:

yum install krb5-workstation krb5-libs krb5-auth-dialog

Định cấu hình các vùng và domain_realm trong tệp krb5.conf dựa trên miền Active Directory của bạn trong máy khách. Ví dụ: sau đây là tệp krb5.conf đã sửa đổi cho môi trường thử nghiệm của chúng tôi:

[joedoe@ip-10-10-0-123 ~]$ cat /etc/krb5.conf

# Configuration snippets may be placed in this directory as well

includedir /etc/krb5.conf.d/

includedir /var/lib/sss/pubconf/krb5.include.d/

[logging]

default = FILE:/var/log/krb5libs.log

kdc = FILE:/var/log/krb5kdc.log

admin_server = FILE:/var/log/kadmind.log

[libdefaults]

dns_lookup_realm = false

ticket_lifetime = 24h

renew_lifetime = 7d

forwardable = true

rdns = false

pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt

default_realm = AD.MYAWS.COM

default_ccache_name = KEYRING:persistent:%{uid}

[realms]

AD.MYAWS.COM = {

kdc = ad.myaws.com

admin_server = ad.myaws.com

}

ONPREM.LOCAL = {

kdc = onprem.local

admin_server = onprem.local

}

[domain_realm]

.ad.myaws.com = AD.MYAWS.COM

ad.myaws.com = AD.MYAWS.COM

.onprem.local = ONPREM.LOCAL

.onprem.local = ONPREM.LOCAL

.rds.amazonaws.com = AD.MYAWS.COM

Phương thức xác thực Kerberos được hỗ trợ từ MySQL phiên bản 8.0.26 trở lên, vì vậy hãy cài đặt mysql-client phiên bản 8.0.26 trở lên. Sau khi cài đặt, hãy kiểm tra phiên bản máy khách MySQL:

[joedoe@ip-10-10-0-123 ~]$ mysql –version

mysql Ver 8.0.36 for Linux on x86_64 (MySQL Community Server – GPL)

Trước khi kết nối với máy chủ Aurora MySQL, chúng ta cần lấy vé cấp vé từ Microsoft Active Directory (KDC) bằng lệnh kinit bằng cách cung cấp tên chính của người dùng Kerberos và mật khẩu chính:

[joedoe@ip-10-10-0-123 ~]$ kinit

Password for joedoe@ONPREM.LOCAL: 

[joedoe@ip-10-10-0-123 ~]$ klist

Ticket cache: KEYRING:persistent:1708001111:krb_ccache_bJBnbkx

Default principal: joedoe@ONPREM.LOCAL

Valid starting Expires Service principal

31/01/24 03:01:22 31/01/24 13:01:22 krbtgt/ONPREM.LOCAL@ONPREM.LOCAL

renew until 07/02/24 03:01:18

Kết nối với máy chủ Aurora MySQL bằng xác thực Kerberos mà không chỉ định mật khẩu:

[joedoe@ip-10-10-0-123 ~]$ mysql -h aurora-mysql-kerberos.cluster-xxyyzzz.rds.amazonaws.com -u joedoe

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 53533

Server version: 8.0.28 Source distribution

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> \s

————–

mysql  Ver 8.0.36 for Linux on x86_64 (MySQL Community Server – GPL)

Connection id: 202560

Current database:

Current user: joedoe@10.10.0.123

SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256

Current pager: stdout

Using outfile: ”

Using delimiter: ;

Server version: 8.0.28 Source distribution

Protocol version: 10

Connection: aurora-mysql-kerberos.cluster-c52zvlhqtpjr.ap-southeast-2.rds.amazonaws.com via TCP/IP

Server characterset: utf8mb4

Db     characterset: utf8mb4

Client characterset: utf8mb4

Conn.  characterset: utf8mb4

Dọn dẹp

Khi bạn thực hiện xong bài lab, hãy xóa các tài nguyên bạn đã tạo để tránh bị tính phí.

  1. Xóa các phiên bản EC2.
  2. Xóa Microsoft AD được quản lý bởi AWS
  3. Xóa cụm Aurora DB
  4. Xóa VPC

Phần kết luận

Trong bài đăng này, chúng tôi đã minh họa quy trình xác thực cho người dùng DB trong Amazon Aurora MySQL bằng Kerberos bên ngoài và Microsoft AD. Thiết lập này dựa trên ủy thác nhóm một chiều được thiết lập giữa miền AD tự quản lý và miền AWS Managed Microsoft AD. Việc triển khai cấu hình này giúp tăng cường tính linh hoạt và đơn giản hóa độ phức tạp cho người dùng chọn Kerberos để xác thực cơ sở dữ liệu của họ.

Để biết thêm thông tin, hãy xem Using Kerberos authentication for Aurora MySQL.