針對 MySQL 使用 Kerberos 身分驗證 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

針對 MySQL 使用 Kerberos 身分驗證

您可以使用 Kerberos 身分驗證來在使用者連線到您的 MySQL 資料庫執行個體時對其進行身分驗證。資料庫執行個體與 AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) 搭配使用以啟用 Kerberos 驗證。使用者向加入信任網域的 MySQL 資料庫執行個體進行身分驗證時,會轉送身分驗證請求。轉寄的要求會移至您使用建立的網域目錄 AWS Directory Service。

將您的所有登入資料保留在相同目錄可以節省您的時間和精力。透過這種方式,這樣您就有一個集中的位置來存放及管理多個資料庫執行個體的登入資料。使用目錄也可以改善您的整體安全性描述檔。

區域和版本可用性

功能可用性和支援會因每個資料庫引擎的特定版本以及 AWS 區域而有所不同。如需使用 Amazon RDS 搭配 Kerberos 身分驗證的版本和區域可用性的詳細資訊,請參閱 Amazon RDS 中的 Kerberos 身分驗證支援的區域和資料庫引擎

MySQL 資料庫執行個體設定 Kerberos 身分驗證概觀

如要針對 MySQL 資料庫執行個體設定 Kerberos 身分驗證,請完成下列一般步驟,稍後會有這方面的詳細說明:

  1. 用 AWS Managed Microsoft AD 於建立 AWS Managed Microsoft AD 目錄。您可以使用 AWS Management Console AWS CLI、或 AWS Directory Service 來建立目錄。如需這樣做的詳細資訊,請參閱《AWS Directory Service 管理指南》的建立 AWS Managed Microsoft AD 目錄

  2. 建立使用受管 IAM 政策的 AWS Identity and Access Management (IAM) 角色AmazonRDSDirectoryServiceAccess。該角色允許 Amazon RDS 對您的目錄進行呼叫。

    若要讓角色允許存取,必須在您的 AWS 帳戶中啟動 AWS Security Token Service (AWS STS) 端點。 AWS 區域 AWS STS 端點預設在所有端點都處於作用中狀態 AWS 區域,您可以使用它們,而無需任何進一步的動作 如需詳細資訊,請參閱《IAM 使用者指南》AWS STSAWS 區域中的「啟用和停用」。

  3. 使用 Microsoft 活動目錄工具在 AWS Managed Microsoft AD 目錄中創建和配置用戶。如需有關在您的 Active Directory 中建立使用者的詳細資訊,請參閱管理指南中的 AWS 管理 Microsoft AD 中的AWS Directory Service 使用者和群組

  4. 建立或修改 MySQL 資料庫執行個體。如果您在建立請求中使用 CLI 或 RDS API,請使用 Domain 參數指定網域識別符。使用您在建立目錄時產生的 d-* 識別符,以及您建立的角色名稱。

    如果您修改了現有的 MySQL 資料庫執行個體以使用 Kerberos 身分驗證,將設定資料庫執行個體的網域和 IAM 角色參數。在與網域目錄相同的 VPC 中尋找資料庫執行個體。

  5. 使用 Amazon RDS 主要使用者登入資料來連線到 MySQL 資料庫執行個體。使用 CREATE USER 子句 IDENTIFIED WITH 'auth_pam' 在 MySQL 中建立使用者。您透過這種方式建立的使用者可以使用 Kerberos 身分驗證登入 MySQL 資料庫執行個體。

為 MySQL 資料庫執行個體設定 Kerberos 身分驗證

您可 AWS Managed Microsoft AD 以用來設定 MySQL 資料庫執行個體的 Kerberos 驗證。如要設定 Kerberos 身分驗證,您可以採取下列步驟。

第 1 步:使用創建一個目錄 AWS Managed Microsoft AD

AWS Directory Service 在 AWS 雲端中建立完全受管理的作用中目錄。當您建立 AWS Managed Microsoft AD 目錄時, AWS Directory Service 會代表您建立兩個網域控制站和網域名稱系統 (DNS) 伺服器。目錄伺服器是在 VPC 的不同子網路中建立。此備援有助於確保即使發生故障,您仍然可以存取目錄。

當您建立 AWS Managed Microsoft AD 目錄時,請代表您 AWS Directory Service 執行下列工作:

  • 在 VPC 內設定 Active Directory。

  • 建立含有使用者名稱 Admin 與指定密碼的目錄管理員帳戶。您可以使用此帳戶來管理目錄。

    注意

    請務必儲存此密碼。 AWS Directory Service 不存儲它。您可以重設此密碼,但是無法擷取此密碼。

  • 建立目錄控制器的安全群組。

啟動時 AWS Managed Microsoft AD, AWS 會建立包含所有目錄物件的組織單位 (OU)。此 OU 有您在建立目錄時所輸入的 NetBIOS 名稱,且位於根網域中。網域根目錄擁有及管理 AWS。

使用您 AWS Managed Microsoft AD 目錄建立的 Admin 帳戶具有 OU 最常見系統管理活動的權限:

  • 建立、更新或刪除使用者

  • 將資源 (例如檔案或列印伺服器) 新增至您的網域,然後對您 OU 中的使用者指派這些資源的許可

  • 建立額外的 OU 和容器

  • 委派授權

  • 從 Active Directory 資源回收筒還原已刪除的物件

  • 在活動目錄 Web 服務上運行 AD 和 DNS 視窗 PowerShell 模塊

管理員帳戶也有權執行下列全網域活動:

  • 管理 DNS 組態 (新增、移除或更新記錄、區域和轉寄站)

  • 檢視 DNS 事件日誌

  • 檢視安全事件日誌

若要建立目錄 AWS Managed Microsoft AD
  1. 請登入 AWS Management Console 並開啟 AWS Directory Service 主控台,網址為 https://console.aws.amazon.com/directoryservicev2/

  2. 在導覽窗格中,選擇 Directories (目錄),然後選擇 Set up directory (設定目錄)。

  3. 選擇AWS Managed Microsoft AD。 AWS Managed Microsoft AD 是您目前可以與 Amazon RDS 一起使用的唯一選項。

  4. 輸入下列資訊:

    目錄 DNS 名稱

    目錄的完全合格名稱,例如 corp.example.com

    目錄 NetBIOS 名稱

    目錄的簡短名稱,例如:CORP

    目錄描述

    (選用) 目錄的描述。

    管理員密碼

    目錄管理員的密碼。目錄建立程序會建立含有使用者名稱 Admin 與這組密碼的管理員帳戶。

    目錄管理員密碼不得包含 "admin" 字組。密碼區分大小寫,長度須為 8 至 64 個字元。至少須有一位字元屬於以下四種類型中的三類:

    • 小寫字母 (a–z)

    • 大寫字母 (A–Z)

    • 數字 (0–9)

    • 非英數字元 (~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/)

    Confirm password (確認密碼)

    重新輸入的管理員密碼。

  5. 選擇下一步

  6. Networking (聯網) 區段輸入以下資訊,然後選擇 Next (下一步)

    VPC

    目錄的 VPC。在相同的 VPC 中建立 MySQL 資料庫執行個體。

    子網路

    目錄伺服器的子網路。這兩個子網路必須位於不同的可用區域。

  7. 檢閱目錄資訊,並進行必要的變更。若資訊無誤,請選擇 Create directory (建立目錄)

    在 AWS Directory Service 主控台中建立目錄期間,檢閱和建立視窗。

建立目錄需要幾分鐘的時間。成功建立時,Status (狀態) 值會變更為 Active (作用中)

如要查看您目錄的資訊,請在目錄清單中選擇目錄名稱。請記下 Directory ID (目錄 ID),因為您在建立或修改 MySQL 資料庫執行個體時將需要這個值。

AWS Directory Service 主控台中包含「目錄 ID」的「目錄詳細資訊」區段。

步驟 2:建立供 Amazon RDS 使用的 IAM 角色

若要讓 Amazon RDS AWS Directory Service 為您撥打電話,則需要使用受管身分與存取權管理政策AmazonRDSDirectoryServiceAccess的 IAM 角色。此角色允許 Amazon RDS 呼叫 AWS Directory Service。

使用建立資料庫執行個體 AWS Management Console 且主控台使用者具有iam:CreateRole權限時,主控台會自動建立此角色。在此情況下,角色名稱為 rds-directoryservice-kerberos-access-role。否則,您必須手動建立 IAM 角色。建立此 IAM 角色時Directory Service,請選擇 AWS 受管政策並將其附加AmazonRDSDirectoryServiceAccess到該角色。

如需為服務建立 IAM 角色的詳細資訊,請參閱《IAM 使用者指南》中的建立角色以將許可委派給 AWS 服務

注意

用於 Windows Authentication for RDS for SQL Server 的 IAM 角色不可用於 RDS for MySQL。

您可以選擇性地建立具有必要許可的政策,而不是使用受管 IAM 政策 AmazonRDSDirectoryServiceAccess。在此情況下,IAM 角色必須有以下 IAM 信任政策。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "directoryservice.rds.amazonaws.com", "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

此角色也須具有下列 IAM 角色政策:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ds:DescribeDirectories", "ds:AuthorizeApplication", "ds:UnauthorizeApplication", "ds:GetAuthorizedApplicationDetails" ], "Effect": "Allow", "Resource": "*" } ] }

步驟 3:建立和設定使用者

您可以使用 Active Directory 使用者和運算集區來建立使用者。這個工具是 Active Directory Domain Services 和 Active Directory 輕量型目錄服務工具的一部分。使用者代表具有目錄存取權的個人或實體。

若要在 AWS Directory Service 目錄中建立使用者,您必須連線至以 Microsoft 視窗為基礎的 Amazon EC2 執行個體。此執行處理必須是 AWS Directory Service 目錄的成員,並以具有建立使用者權限的使用者身分登入。如需詳細資訊,請參閱《 AWS Managed Microsoft AD Directory Service 管理指南》中的管理AWS 中的使用者和群組

步驟 4:建立或修改 MySQL 資料庫執行個體

建立或修改 MySQL 資料庫執行個體以搭配您的目錄使用。您可以使用主控台、CLI 或 RDS API,將資料庫執行個體與目錄建立關聯。您可採用下列其中一種方式來這麼做:

僅有 VPC 中的 MySQL 資料庫執行個體支援 Kerberos 身分驗證。資料庫執行個體可在與目錄相同的 VPC 中,或在不同 VPC 中。資料庫執行個體必須使用允許目錄 VPC 內傳入的安全群組,如此資料庫執行個體才能與目錄通訊。

使用主控台建立、修改或還原資料庫執行個體時,請在 Database authentication (資料庫身分驗證) 區段中選擇 Password and Kerberos authentication (密碼和 Kerberos 身分驗證)。選擇 Browse Directory (瀏覽目錄) 並選取目錄,或是選擇 Create a new directory (建立新目錄)

在 Amazon RDS 主控台中選取了密碼和 Kerberos 身份驗證的「資料庫身份驗證」區段。

使用 AWS CLI 或 RDS API 時,請將資料庫執行個體與目錄建立關聯。資料庫執行個體需要下列參數,才能使用您建立的網域目錄:

  • 針對 --domain 參數,使用您建立目錄時產生的網域識別符 ("d-*" 識別符)。

  • 針對 --domain-iam-role-name 參數,使用您建立的規則,其會使用受管 IAM 政策 AmazonRDSDirectoryServiceAccess

例如,下列 CLI 命令會修改資料庫執行個體來使用目錄。

對於LinuxmacOS、或Unix:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --domain d-ID \ --domain-iam-role-name role-name

在 Windows 中:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --domain d-ID ^ --domain-iam-role-name role-name
重要

如果您修改資料庫執行個體,以啟用 Kerberos 身分驗證,請在進行變更後重新啟動資料庫執行個體。

步驟 5:建立 Kerberos 身分驗證 MySQL 登入

使用 Amazon RDS 主要使用者登入資料來連線到 MySQL 資料庫執行個體,方法與其他任何的資料庫執行個體相同。資料庫執行個體已加入 AWS Managed Microsoft AD 網域。因此,您可以從您網域中的 Active Directory 使用者佈建 MySQL 登入和使用者。資料庫許可會透過標準 MySQL 許可管理,並從這些登入授予及撤銷。

您可以允許 Active Directory 使用者與 MySQL 進行身分驗證。若要執行此作業,請先使用 Amazon RDS 主要使用者登入資料連線到 MySQL 資料庫執行個體,方法與其他任何的資料庫執行個體相同。登入後,透過執行下列命令,在 MySQL 中使用 PAM (插入式驗證模組) 建立外部驗證的使用者。將 testuser 取代成使用者名稱。

CREATE USER 'testuser'@'%' IDENTIFIED WITH 'auth_pam';

來自您網域的使用者 (人員和應用程式兩者) 現在可以使用 Kerberos 身分驗證從加入網域的用戶端機器連線至資料庫執行個體。

重要

強烈建議用戶端在使用 PAM 身分驗證時使用 SSL/TLS 連線。如果他們未使用 SSL/TLS 連線,在某些情況下,密碼可能會以純文字形式傳送。若要為 AD 使用者需要 SSL/TLS 加密連線,請執行下列命令,並以使用者名稱取代testuser

ALTER USER 'testuser'@'%' REQUIRE SSL;

如需詳細資訊,請參閱 將 SSL/TLS 搭配 MySQL 資料庫執行個體使用

管理網域中的資料庫執行個體

您可以使用 CLI 或 RDS API 來管理資料庫執行個體,以及其與受管 Active Directory 的關係。例如,您可以與適用於 Kerberos 身分驗證的 Active Directory 建立關聯,也可以解除關聯 Active Directory 來停用 Kerberos 身分驗證。您也可以將要由某個 Active Directory 於外部進行身分識別的資料庫執行個體移至另一個 Active Directory。

例如,使用 Amazon RDS API,您可以執行下列動作:

  • 如要重新嘗試為失敗的成員資格啟用 Kerberos 身分驗證,請使用 ModifyDBInstance API 操作並指定目前成員資格的目錄 ID。

  • 如要更新成員資格的 IAM 角色名稱,請使用 ModifyDBInstance API 操作並指定目前成員資格的目錄 ID,以及新的 IAM 角色。

  • 停用資料庫執行個體上的 Kerberos 身分驗證,使用 ModifyDBInstance API 操作並指定 none 做為網域參數。

  • 如要在網域之間移動資料庫執行個體,請使用 ModifyDBInstance API 操作,並指定新網域的網域識別符做為網域參數。

  • 如要列出每個資料庫執行個體的成員資格,請使用 DescribeDBInstances API 操作。

了解網域成員資格

在您建立或修改資料庫執行個體之後,該執行個體會成為網域的成員。您可以執行 describe-db-instancesCLI 命令,檢視資料庫執行個體的網域成員資格狀態。資料庫執行個體的狀態可以是下列其中一個:

  • kerberos-enabled – 資料庫執行個體已啟用 Kerberos 身分驗證。

  • enabling-kerberos— AWS 正在啟用此資料庫執行個體上的 Kerberos 驗證程序。

  • pending-enable-kerberos – 啟用 Kerberos 身分驗證的過程正在此資料庫執行個體上遭到擱置。

  • pending-maintenance-enable-kerberos— AWS 將嘗試在下一個排定的維護時段期間在資料庫執行個體上啟用 Kerberos 驗證。

  • pending-disable-kerberos – 停用 Kerberos 身分驗證的過程正在此資料庫執行個體上遭到擱置。

  • pending-maintenance-disable-kerberos— AWS 將嘗試在下一個排定的維護時段期間停用資料庫執行個體上的 Kerberos 驗證。

  • enable-kerberos-failed – 有一個組態問題已禁止 AWS 在資料庫執行個體上啟用 Kerberos 身分驗證。請在重新發出資料庫執行個體修改命令之前檢查並修正您的組態。

  • disabling-kerberos— AWS 正在停用此資料庫執行個體上的 Kerberos 驗證程序。

由於網路連線問題或 IAM 角色不正確,請求啟用 Kerberos 身分驗證可能失敗。例如,假設您建立了資料庫執行個體或修改了現有的資料庫執行個體,並且嘗試啟用 Kerberos 身分驗證失敗。如果發生這種情況,請重新發出修改命令,或修改新建立的資料庫執行個體以加入網域。

使用 Kerberos 身分驗證連線至 MySQL

如要使用 Kerberos 身分驗證連線至 MySQL,您必須使用 Kerberos 身分驗證類型登入。

如要建立您可以使用 Kerberos 身分驗證連線的資料庫使用者,請在 IDENTIFIED WITH 陳述式上使用 CREATE USER 子句。如需說明,請參閱「步驟 5:建立 Kerberos 身分驗證 MySQL 登入」。

為了避免錯誤,請使用 MariaDB mysql 用戶端。您可以在 https://downloads.mariadb.org/ 下載 MariaDB 軟體。

在命令提示字元中,連線至與 MySQL 資料庫執行個體相關聯的其中一個端點。遵循 連接至執行 MySQL 資料庫引擎的資料庫執行個體 中的一般程序。當系統提示您輸入密碼時,請輸入與該使用者名稱相關聯的 Kerberos 密碼。

還原 MySQL 資料庫執行個體並新增至網域

您可以還原資料庫快照或完成 MySQL 資料庫執行個體的 point-in-time 還原,然後將其新增至網域。還原資料庫執行個體後,請使用 步驟 4:建立或修改 MySQL 資料庫執行個體 中說明的程序來修改資料庫執行個體,將資料庫執行個體新增到網域。

Kerberos 身分驗證 MySQL 限制

下列限制適用於 MySQL 的 Kerberos 身分驗證:

  • 僅支援。 AWS Managed Microsoft AD 不過,您可以將 RDS for MySQL 資料庫執行個體加入至相同 AWS 區域中,不同帳戶所擁有的共用受管 Microsoft AD 網域。

  • 啟用功能後,您必須重新啟動資料庫執行個體。

  • 網域名稱長度不能超過 61 個字元。

  • 您無法同時啟用 Kerberos 身分驗證和 IAM 身分驗證。為您的 MySQL 資料庫執行個體選擇一種身分驗證方法或另一種。

  • 啟用功能後,請勿修改資料庫執行個體連接埠。

  • 請勿搭配僅供讀取複本使用 Kerberos 身分驗證。

  • 如果您已針對使用 Kerberos 驗證的 MySQL 資料庫執行個體開啟自動次要版本升級,則必須關閉 Kerberos 驗證,然後在自動升級之後重新開啟該執行個體。如需自動次要版本升級的詳細資訊,請參閱 MySQL 的自動次要版本升級

  • 如要在啟用此功能的情況下刪除資料庫執行個體,請先停用功能。若要執行此作業,請針對資料庫執行個體使用 modify-db-instance CLI 命令,然後為 none 參數指定 --domain

    如果您使用 CLI 或 RDS API 來刪除啟用此功能的資料庫執行個體,則預期會有延遲。

  • 您無法在內部部署或自我託管的 Microsoft Active Directory 與 AWS Managed Microsoft AD之間設定樹系信任關係。