本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為 PostgreSQL 資料庫叢集設定 Kerberos 身分驗證
您可以使用 AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) 來設定 PostgreSQL 資料庫叢集的 Kerberos 身分驗證。若要設定 Kerberos 身分驗證,請遵循下列步驟。
主題
步驟 1:使用 建立目錄 AWS Managed Microsoft AD
AWS Directory Service 在 AWS 雲端中建立全受管 Active Directory。當您建立 AWS Managed Microsoft AD 目錄時, 會為您 AWS Directory Service 建立兩個網域控制站和 DNS 伺服器。目錄伺服器是在 VPC 的不同子網路中建立。此備援有助於確保即使發生故障,您仍然可以存取目錄。
當您建立 AWS Managed Microsoft AD 目錄時, AWS Directory Service 會代表您執行下列任務:
-
在 VPC 內設定 Active Directory。
-
建立含有使用者名稱
Admin
與指定密碼的目錄管理員帳戶。您可以使用此帳戶來管理目錄。重要
請務必儲存此密碼。 AWS Directory Service 不會儲存此密碼,而且無法擷取或重設。
-
建立目錄控制器的安全群組。安全群組必須允許與 PostgreSQL 資料庫叢集進行通訊。
啟動時 AWS Directory Service for Microsoft Active Directory, 會 AWS 建立組織單位 (OU),其中包含目錄的所有物件。此 OU 有您在建立目錄時所輸入的 NetBIOS 名稱,位於根網域中。網域根由 擁有和管理 AWS。
使用 AWS Managed Microsoft AD 目錄建立Admin
的帳戶具有 OU 最常見管理活動的許可:
-
建立、更新或刪除使用者
-
將資源 (例如檔案或列印伺服器) 新增至您的網域,然後對您 OU 中的使用者指派這些資源的許可
-
建立額外的 OU 和容器
-
委派授權
-
從 Active Directory 資源回收筒還原已刪除的物件
-
在 Active Directory Web 服務上執行適用於 Windows PowerShell 的 Active Directory 和網域名稱服務 (DNS) 模組
Admin
帳戶也有權執行下列全網域活動:
-
管理 DNS 組態 (新增、移除或更新記錄、區域和轉寄站)
-
檢視 DNS 事件日誌
-
檢視安全事件日誌
使用 建立目錄 AWS Managed Microsoft AD
-
在 AWS Directory Service 主控台
中,選擇 Directories (目錄),然後選擇 Set up directory (設定目錄)。 -
選擇 AWS Managed Microsoft AD. AWS Managed Microsoft AD 是目前支援與 Amazon Aurora 搭配使用的唯一選項。
-
選擇下一步。
-
在 Enter directory information (輸入目錄資訊) 頁面上,提供下列資訊:
- 版本
-
選擇滿足您需求的版本。
- 目錄 DNS 名稱
-
目錄的完全合格名稱,例如
corp.example.com
。 - 目錄 NetBIOS 名稱
-
目錄的簡短名稱,例如:
CORP
。 - 目錄描述
-
選擇填寫其他目錄說明。
- 管理員密碼
-
目錄管理員的密碼。目錄建立程序會建立含有使用者名稱
Admin
與這組密碼的管理者帳戶。目錄管理員密碼不得包含 "admin" 字組。密碼區分大小寫,長度須為 8 至 64 個字元。至少須有一位字元屬於以下四種類型中的三類:
-
小寫字母 (a–z)
-
大寫字母 (A–Z)
-
數字 (0–9)
-
非英數字元 (~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/)
-
- Confirm password (確認密碼)
-
重新輸入管理員密碼。
重要
請確定您儲存此密碼。 AWS Directory Service 不會儲存此密碼,而且無法擷取或重設。
-
選擇下一步。
-
在 Choose VPC and subnets (選擇 VPC 和子網路) 頁面上,提供下列資訊:
- VPC
-
選擇目錄的 VPC。您可在此相同 VPC 或不同 VPC 中建立 PostgreSQL 資料庫叢集。
- 子網路
-
選擇目錄伺服器的子網路。這兩個子網路必須位於不同的可用區域。
-
選擇 Next (下一步)。
-
檢閱目錄資訊。如果需要變更,請選擇 Previous (上一步),然後進行變更。若資訊無誤,請選擇 Create directory (建立目錄)。
建立目錄需要幾分鐘的時間。成功建立時,Status (狀態) 值會變更為 Active (作用中)。
若要查看目錄的資訊,請選擇目錄清單中的目錄 ID。請記下 Directory ID (目錄 ID) 值,建立或修改 PostgreSQL 資料庫執行個體時需要此值。

步驟 2:(選用) 在您的內部部署 Active Directory 與 AWS Directory Service之間建立信任關係
如果您不打算使用自己的內部部署 Microsoft Active Directory,請跳至步驟 3:為 Amazon Aurora 建立 IAM 角色以存取 AWS Directory Service.
若要使用現場部署 Active Directory 取得 Kerberos 身分驗證,您需要使用現場部署 Microsoft Active Directory 與 AWS Managed Microsoft AD 目錄 (在 中建立) 之間的樹系信任來建立信任網域關係步驟 1:使用 建立目錄 AWS Managed Microsoft AD。信任可以是單向,其中 AWS Managed Microsoft AD 目錄信任內部部署 Microsoft Active Directory。信任也可以是雙向,其中兩個 Active Directory 互相信任。如需使用 設定信任的詳細資訊 AWS Directory Service,請參閱《 AWS Directory Service 管理指南》中的何時建立信任關係。
注意
如果您使用內部部署 Microsoft Active Directory:
-
Windows 用戶端必須使用端點 AWS Directory Service 中 的網域名稱來連線,而不是 rds.amazonaws.com。如需詳細資訊,請參閱使用 Kerberos 身分驗證連線至 PostgreSQL。
-
Windows 用戶端無法使用 Aurora 自訂端點進行連線。如需詳細資訊,請參閱 Amazon Aurora 端點連線。
-
針對全球資料庫:
-
Windows 用戶端只能使用全域資料庫主要 中的執行個體端點或叢集端點 AWS 區域 進行連線。
-
Windows 用戶端無法使用次要叢集端點進行連線 AWS 區域。
-
請確定您的內部部署 Microsoft Active Directory 網域名稱包含對應至新建立之信任關係的 DNS 尾碼路由。以下螢幕擷取畫面顯示了一個範例。

步驟 3:為 Amazon Aurora 建立 IAM 角色以存取 AWS Directory Service
若要讓 Amazon Aurora AWS Directory Service 為您呼叫 , AWS 您的帳戶需要使用 受管 IAM 政策 的 IAM 角色AmazonRDSDirectoryServiceAccess
。此角色允許 Amazon Aurora 呼叫 AWS Directory Service。(請注意,此存取 的 IAM 角色與用於 的 IAM 角色 AWS Directory Service 不同 IAM 資料庫身分驗證。)
當您使用 建立資料庫執行個體, AWS Management Console 且主控台使用者帳戶具有 iam:CreateRole
許可時,主控台會自動建立所需的 IAM 角色。在此情況下,角色名稱為 rds-directoryservice-kerberos-access-role
。否則,您必須手動建立 IAM 角色。當您建立此 IAM 角色時,請選擇 Directory Service
,然後將 AWS 受管政策連接至AmazonRDSDirectoryServiceAccess
該角色。
如需為服務建立 IAM 角色的詳細資訊,請參閱《IAM 使用者指南》中的建立角色以將許可委派給 AWS 服務。
注意
用於 Windows Authentication for RDS for Microsoft SQL Server 的 IAM 角色不可用於 Amazon Aurora。
作為使用 AmazonRDSDirectoryServiceAccess
受管政策的替代方案,您可以建立具有必要許可的政策。在此情況下,IAM 角色必須有以下 IAM 信任政策。
此角色也須具有下列 IAM 角色政策:
對於選擇加入 AWS 區域,請在 IAM 角色信任政策中使用區域特定的服務主體。當您為這些區域中的服務建立信任政策時,請在服務主體中指定區域代碼。
下列範例顯示包含區域特定服務主體的信任政策:
將 REGION-CODE 取代為特定區域的程式碼。例如,針對亞太區域 (墨爾本) 區域使用下列服務主體:
"Service": [ "directoryservice.rds.ap-southeast-4.amazonaws.com", "rds.ap-southeast-4.amazonaws.com" ]
步驟 4:建立和設定使用者
您可以透過使用 Active Directory 使用者和運算集區來建立使用者。這是 Active Directory Domain Services 和 Active Directory 輕量型目錄服務工具之一。如需詳細資訊,請參閱 Microsoft 文件中的將使用者和電腦新增至 Active Directory 網域
若要在 AWS Directory Service 目錄中建立使用者,您必須連線到做為 AWS Directory Service 目錄成員的 Windows 型 Amazon EC2 執行個體。同時,您必須以具有建立使用者之許可的使用者身分來登入。如需詳細資訊,請參閱《AWS Directory Service 管理指南》中的建立使用者。
步驟 5:啟用目錄和資料庫執行個體之間的跨 VPC 流量
如果您打算在相同 VPC 中尋找目錄和資料庫叢集,請略過本步驟,並移至 步驟 6:建立或修改 PostgreSQL 資料庫叢集。
如果您打算在不同 VPC 中尋找目錄和資料庫執行個體,請使用 VPC 互連或 AWS Transit Gateway 來設定跨 VPC 流量。
下列程序會使用 VPC 互連來啟用 VPC 之間的流量。請遵循《Amazon Virtual Private Cloud 互連指南》中什麼是 VPC 互連?的指示。
使用 VPC 互連以啟用跨 VPC 流量
-
設定適當的 VPC 路由規則,以確保網路流量可以雙向對流。
-
確保資料庫執行個體安全群組可以從目錄的安全群組接收傳入流量。
-
確保沒有網路存取控制清單 (ACL) 規則來封鎖流量。
如果不同的 AWS 帳戶擁有該目錄,您必須共用該目錄。
在 AWS 帳戶之間共用目錄
-
遵循 AWS Directory Service 管理指南中的教學課程:共用 AWS Managed Microsoft AD 目錄以實現無縫 EC2 網域加入,開始與將在其中建立資料庫執行個體 AWS 的帳戶共用目錄。
-
使用資料庫執行個體的帳戶登入 AWS Directory Service 主控台,並確保網域具有
SHARED
狀態,然後再繼續。 -
使用資料庫執行個體的帳戶登入 AWS Directory Service 主控台時,請注意目錄 ID 值。您可以使用此目錄 ID,將資料庫執行個體加入網域。
步驟 6:建立或修改 PostgreSQL 資料庫叢集
建立或修改要搭配目錄使用的 PostgreSQL 資料庫叢集。您可以使用主控台、CLI 或 RDS API,將資料庫叢集與目錄建立關聯。您可採用下列其中一種方式來這麼做:
-
使用主控台、create-db-cluster CLI 命令或 CreateDBCluster RDS API 操作,建立新的 PostgreSQL 資料庫叢集。如需說明,請參閱「建立 Aurora PostgreSQL 資料庫叢集並與之連線」。
-
使用主控台、modify-db-cluster CLI 命令或 ModifyDBCluster RDS API 操作,修改現有的 PostgreSQL 資料庫叢集。如需說明,請參閱「修改 Amazon Aurora 資料庫叢集」。
-
使用主控台、restore-db-cluster-from-db-snapshot CLI 命令或 RestoreDBClusterFromDBSnapshot RDS API 操作,從資料庫快照還原 PostgreSQL 資料庫叢集。如需說明,請參閱從資料庫叢集快照還原。
-
使用主控台、 restore-db-instance-to-point-in-time CLI 命令或 RestoreDBClusterToPointInTime RDS API 操作,將 PostgreSQL 資料庫叢集還原至某個時間點。如需說明,請參閱將資料庫叢集還原至指定時間。
僅有 VPC 中的 PostgreSQL 資料庫叢集支援 Kerberos 身分驗證。資料庫叢集可在與目錄相同的 VPC 中,或在不同 VPC 中。資料庫叢集必須使用允許在目錄 VPC 內傳入和傳出的安全群組,如此資料庫叢集才能與目錄通訊。
注意
從 RDS for PostgreSQL 遷移期間,Aurora PostgreSQL 資料庫叢集目前不支援啟用 PostgreSQL身分驗證。您只能在獨立 Aurora PostgreSQL 資料庫叢集上啟用 Kerberos 身分驗證。
使用主控台建立、修改或還原資料庫叢集時,請在 Database authentication (資料庫身分驗證) 區段中選擇 Kerberos authentication (Kerberos 身分驗證)。然後選擇 Browse Directory (瀏覽目錄)。選取目錄或選擇 Create a new directory (建立新目錄) 以使用 Directory Service。

當您使用 時 AWS CLI,資料庫叢集需要下列參數,才能使用您建立的目錄:
-
針對
--domain
參數,使用您建立目錄時產生的網域識別符 ("d-*" 識別符)。 -
針對
--domain-iam-role-name
參數,使用您建立的規則,其會使用受管 IAM 政策AmazonRDSDirectoryServiceAccess
。
例如,下列 CLI 命令會修改資料庫叢集來使用目錄。
aws rds modify-db-cluster --db-cluster-identifier
mydbinstance
--domain d-Directory-ID
--domain-iam-role-namerole-name
重要
如果您修改資料庫叢集,以啟用 Kerberos 身分驗證,請在進行變更後重新啟動資料庫叢集。
步驟 7:針對您的 Kerberos 主體建立 PostgreSQL 使用者
此時,您的 Aurora PostgreSQL 資料庫叢集已加入 AWS Managed Microsoft AD 網域中。您在 步驟 4:建立和設定使用者 的目錄中建立的使用者必須設定為 PostgreSQL 資料庫使用者,並授予登入資料庫的權限。您可以透過以具有 rds_superuser
權限的資料庫使用者身分登入來執行此操作。例如,如果您在建立 Aurora PostgreSQL 資料庫叢集時接受預設值,請使用 postgres
,如下列步驟中所示。
針對 Kerberos 主體建立 PostgreSQL 資料庫使用者
-
使用
psql
搭配psql
以連線至 Aurora PostgreSQL 資料庫叢集端點。下列範例使用rds_superuser
角色的預設postgres
帳戶。psql --host=
cluster-instance-1.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --password -
針對您想要其有權存取資料庫之每個 Kerberos 主體建立資料庫使用者名稱 (Active Directory 使用者名稱)。針對該使用者名稱使用 Active Directory 執行個體中定義的標準使用者名稱 (身分) (亦即小寫
alias
(Active Directory 中的使用者名稱)),以及 Active Directory 網域的大寫名稱。Active Directory 使用者名稱是經過外部驗證的使用者,因此請使用引號括住名稱,如下所示。postgres=>
CREATE USER "
username
@CORP.EXAMPLE.COM
" WITH LOGIN;CREATE ROLE
-
將
rds_ad
角色授予資料庫使用者。postgres=>
GRANT rds_ad TO "username
@CORP.EXAMPLE.COM
";GRANT ROLE
在您完成了針對 Active Directory 使用者身分建立所有 PostgreSQL 使用者之後,使用者就可以使用其 Kerberos 憑證存取 Aurora PostgreSQL 資料庫叢集。
使用 Kerberos 驗證的資料庫使用者必須從屬於 Active Directory 網域的用戶端機器執行此操作。
已獲授予 rds_ad
角色的資料庫使用者也無法具有 rds_iam
角色。這也適用於巢狀成員資格。如需詳細資訊,請參閱 IAM 資料庫身分驗證。
針對不區分大小寫的使用者名稱設定 Aurora PostgreSQL 資料庫叢集
Aurora PostgreSQL 14.5、13.8、12.12 和 11.17 版支援 krb_caseins_users
PostgreSQL 參數。此參數支援不區分大小寫的 Active Directory 使用者名稱。根據預設,此參數會設為 false,因此 Aurora PostgreSQL 會以區分大小寫的方式解譯使用者名稱。這是 Aurora PostgreSQL 所有舊版本中的預設行為。不過,您可以在自訂資料庫叢集參數群組中將此參數設為 true
,並允許 Aurora PostgreSQL 資料庫叢集參數群組以區分大小寫的方式解譯使用者名稱。考慮這樣做是為了方便您的資料庫使用者,他們有時可能會在使用 Active Directory 進行驗證時打錯其使用者名稱的大小寫。
若要變更 krb_caseins_users
參數,您的 Aurora PostgreSQL 資料庫叢集必須正在使用自訂資料庫叢集參數群組。如需使用自訂資料庫叢集參數群組的相關資訊,請參閱 Amazon Aurora 的參數群組。
您可以使用 AWS CLI 或 AWS Management Console 來變更設定。如需詳細資訊,請參閱在 Amazon Aurora 中修改資料庫叢集參數群組中的參數。
步驟 8:設定 PostgreSQL 用戶端
若要設定 PostgreSQL 用戶端,請執行下列步驟:
-
建立可指向網域的 krb5.conf 檔案 (或同等檔案)。
-
確認流量可以在用戶端主機與 之間流動 AWS Directory Service。請使用 Netcat 等網路公用程式檢查以下各項:
-
確認透過 DNS 傳送至連接埠 53 的流量。
-
確認透過 TCP/UDP 傳送至連接埠 53 和 Kerberos 的流量,其中包括用於 AWS Directory Service的連接埠 88 和 464。
-
-
確定流量可透過資料庫連接埠在用戶端主機和資料庫執行個體之間往來。例如,您可以使用 psql 來連接和存取資料庫。
以下是 的範例 krb5 AWS Managed Microsoft AD.conf 內容。
[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM
下列是內部部署 Microsoft Active Directory 的範例 krb5.conf 內容。
[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } ONPREM.COM = { kdc = onprem.com admin_server = onprem.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM .onprem.com = ONPREM.COM onprem.com = ONPREM.COM .rds.amazonaws.com = EXAMPLE.COM .amazonaws.com.rproxy.govskope.ca.cn = EXAMPLE.COM .amazon.com = EXAMPLE.COM