

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

# 搭配 Amazon RDS for PostgreSQL 使用 Kerberos 身分驗證
<a name="postgresql-kerberos"></a>

在使用者連線至執行 PostgreSQL 的資料庫執行個體時，您可以使用 Kerberos 驗證用戶身分。若要這樣做，請將資料庫執行個體設定為 AWS Directory Service for Microsoft Active Directory 用於 Kerberos 身分驗證。 AWS Directory Service for Microsoft Active Directory 也稱為 AWS Managed Microsoft AD。這是 提供的功能 Directory Service。若要進一步了解，請參閱《 *AWS Directory Service 管理指南*》中的[什麼是 Directory Service？](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)。

若要開始，請建立 AWS Managed Microsoft AD 目錄來存放使用者登入資料。然後，將 Active Directory 網域和其他資訊提供給 PostgreSQL 資料庫執行個體。當使用者向 PostgreSQL 資料庫執行個體進行驗證時，身分驗證請求會轉送到 AWS Managed Microsoft AD 目錄。

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

除此之外，您也可以從自己的內部部署 Microsoft Active Directory 存取登入資料。若要執行這項操作，請建立信任網域關聯，讓 AWS Managed Microsoft AD 目錄信任您的內部部署 Microsoft Active Directory。如此一來，使用者就可以透過在存取您內部部署網路的工作負載時的相同 Windows 單一登入 (SSO) 體驗，來存取 PostgreSQL 執行個體。

資料庫可以使用密碼身分驗證或密碼身分驗證搭配 Kerberos 或 AWS Identity and Access Management (IAM) 身分驗證。如需 IAM 身分驗證的詳細資訊，請參閱 [適用於 MariaDB、MySQL 和 PostgreSQL 的 IAM 資料庫身分驗證](UsingWithRDS.IAMDBAuth.md)。

**注意**  
RDS for PostgreSQL 不支援 Active Directory 群組的 Kerberos 身分驗證。

**Topics**
+ [區域和版本可用性](#postgresql-kerberos.RegionVersionAvailability)
+ [對 PostgreSQL 資料庫執行個體進行 Kerberos 身分驗證的概觀](#postgresql-kerberos-overview)
+ [為 PostgreSQL 資料庫執行個體設定 Kerberos 身分驗證](postgresql-kerberos-setting-up.md)
+ [在 Active Directory 網域中管理 RDS for PostgreSQL 資料庫執行個體](postgresql-kerberos-managing.md)
+ [使用 Kerberos 身分驗證連線至 PostgreSQL](postgresql-kerberos-connecting.md)

## 區域和版本可用性
<a name="postgresql-kerberos.RegionVersionAvailability"></a>

功能可用性和支援會因每個資料庫引擎的特定版本以及 AWS 區域而有所不同。如需有關 RDS for PostgreSQL 搭配 Kerberos 驗證的版本和區域可用性的詳細資訊，請參閱 [支援 Amazon RDS 中 Kerberos 身分驗證的區域和資料庫引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.KerberosAuthentication.md)。

## 對 PostgreSQL 資料庫執行個體進行 Kerberos 身分驗證的概觀
<a name="postgresql-kerberos-overview"></a>

若要為 PostgreSQL 資料庫執行個體設定 Kerberos 身分驗證，請遵循下列步驟，稍後會提供更詳細的說明：

1. 使用 AWS Managed Microsoft AD 建立 AWS Managed Microsoft AD 目錄。您可以使用 AWS 管理主控台、 AWS CLI或 Directory Service API 來建立目錄。請務必開啟目錄安全性群組上的相關輸出連接埠，以便目錄可以與  執行個體  通訊。

1. 建立提供 Amazon RDS 存取權的角色，以呼叫您的 AWS Managed Microsoft AD 目錄。若要這樣做，請建立使用 受管 IAM 政策 的 AWS Identity and Access Management (IAM) 角色`AmazonRDSDirectoryServiceAccess`。

   若要讓 IAM 角色允許存取，必須在您 AWS 帳戶的正確 AWS 區域中啟用 AWS Security Token Service (AWS STS) 端點。 AWS STS 端點預設會在所有 中處於作用中狀態 AWS 區域，而且您可以使用它們，而不需要任何進一步的動作。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[AWS STS 在 AWS 區域中啟用和停用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-activate-deactivate) 。

1. 使用 Microsoft Active Directory 工具在 AWS Managed Microsoft AD 目錄中建立和設定使用者。如需有關在 Active Directory 中建立使用者的詳細資訊，請參閱[《 管理指南》中的管理 AWS Managed Microsoft AD 中的使用者和群組](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups.html)。 *Directory Service *

1. 如果您打算在不同 AWS 帳戶或 Virtual Private Cloud (VPC) 中尋找目錄和資料庫執行個體，請設定 VPC 互連。如需詳細資訊，請參閱《Amazon VPC Peering Guide》**中的[什麼是 VPC 互連？](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html)。

1. 使用下列其中一種方法，從主控台、CLI 或 RDS API 建立或修改 PostgreSQL 資料庫執行個體：
   + [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md) 
   + [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md) 
   + [還原至資料庫執行個體](USER_RestoreFromSnapshot.md)
   + [將 Amazon RDS 的資料庫執行個體還原至指定時間](USER_PIT.md)

   您可以在與目錄相同的 Amazon Virtual Private Cloud (VPC) 或不同的 AWS 帳戶或 VPC 中找到執行個體。當您建立或修改 PostgreSQL 資料庫執行個體時，請執行下列動作：
   + 請提供您建立目錄時產生的網域識別符 (`d-*` 識別符)。
   + 請提供所建立的 IAM 角色名稱。
   + 確保資料庫執行個體安全群組可以從目錄的安全群組接收傳入流量。

1. 使用 RDS 主要使用者登入資料來連接至 PostgreSQL 資料庫執行個體。然後，在 PostgreSQL 中建立要在外部識別的使用者。外部識別的使用者可以使用 Kerberos 身分驗證來登入 PostgreSQL 資料庫執行個體。

# 為 PostgreSQL 資料庫執行個體設定 Kerberos 身分驗證
<a name="postgresql-kerberos-setting-up"></a>

您可以使用 AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) 來設定 PostgreSQL 資料庫執行個體的 Kerberos 身分驗證。若要設定 Kerberos 身分驗證，請遵循下列步驟。

**Topics**
+ [步驟 1：使用 建立目錄 AWS Managed Microsoft AD](#postgresql-kerberos-setting-up.create-directory)
+ [步驟 2：（選用） 在內部部署 Active Directory 與 之間建立信任關係 Directory Service](#postgresql-kerberos-setting-up.create-trust)
+ [步驟 3：為 Amazon RDS 建立 IAM 角色以存取 Directory Service](#postgresql-kerberos-setting-up.CreateIAMRole)
+ [步驟 4：建立和設定使用者](#postgresql-kerberos-setting-up.create-users)
+ [步驟 5：啟用目錄和資料庫執行個體之間的跨 VPC 流量](#postgresql-kerberos-setting-up.vpc-peering)
+ [步驟 6：建立或修改 PostgreSQL 資料庫執行個體](#postgresql-kerberos-setting-up.create-modify)
+ [步驟 7：針對您的 Kerberos 主體建立 PostgreSQL 使用者](#postgresql-kerberos-setting-up.create-logins)
+ [步驟 8：設定 PostgreSQL 用戶端](#postgresql-kerberos-setting-up.configure-client)

## 步驟 1：使用 建立目錄 AWS Managed Microsoft AD
<a name="postgresql-kerberos-setting-up.create-directory"></a>

Directory Service 在 AWS 雲端中建立全受管 Active Directory。當您建立 AWS Managed Microsoft AD 目錄時， 會為您 Directory Service 建立兩個網域控制站和 DNS 伺服器。目錄伺服器是在 VPC 的不同子網路中建立。此備援有助於確保即使發生故障，您仍然可以存取目錄。

 當您建立 AWS Managed Microsoft AD 目錄時， AWS Directory Service 會代表您執行下列任務：
+ 在 VPC 內設定 Active Directory。
+ 建立含有使用者名稱 `Admin` 與指定密碼的目錄管理員帳戶。您可以使用此帳戶來管理目錄。
**重要**  
請務必儲存此密碼。 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**

1.  在 [Directory Service 主控台](https://console.aws.amazon.com/directoryservicev2/)中，選擇 **Directories (目錄)**，然後選擇 **Set up directory (設定目錄)**。

1. 選擇 **AWS Managed Microsoft AD**. AWS Managed Microsoft AD 是目前支援與 Amazon RDS 搭配使用的唯一選項。

1. 選擇**下一步**。

1. 在 **Enter directory information (輸入目錄資訊)** 頁面上，提供下列資訊：  
**版本**  
 選擇滿足您需求的版本。  
**目錄 DNS 名稱**  
 目錄的完全合格名稱，例如 **corp.example.com**。  
**目錄 NetBIOS 名稱**  
 目錄的簡短名稱，例如：`CORP`。  
**目錄描述**  
 選擇填寫其他目錄說明。  
**管理員密碼**  
 目錄管理員的密碼。目錄建立程序會建立含有使用者名稱 `Admin` 與這組密碼的管理者帳戶。  
 目錄管理員密碼不得包含 "admin" 字組。密碼區分大小寫，長度須為 8 至 64 個字元。至少須有一位字元屬於以下四種類型中的三類：  
   +  小寫字母 (a–z) 
   +  大寫字母 (A–Z) 
   +  數字 (0–9) 
   +  非英數字元 (\$1\$1@\$1\$1%^&\$1\$1-\$1=`\$1\$1()\$1\$1[]:;"'<>,.?/)   
**Confirm password (確認密碼)**  
 重新輸入管理員密碼。  
請確定您儲存此密碼。 Directory Service 不會儲存此密碼，而且無法擷取或重設。

1. 選擇**下一步**。

1. 在 **Choose VPC and subnets (選擇 VPC 和子網路)** 頁面上，提供下列資訊：  
**VPC**  
選擇目錄的 VPC。您可在此相同 VPC 或不同 VPC 中建立 PostgreSQL 資料庫執行個體。  
**子網路**  
 選擇目錄伺服器的子網路。這兩個子網路必須位於不同的可用區域。

1. 選擇 **Next (下一步)**。

1.  檢閱目錄資訊。如果需要變更，請選擇 **Previous (上一步)**，然後進行變更。若資訊無誤，請選擇 **Create directory (建立目錄)**。  
![\[目錄詳細資訊頁面\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/WinAuth2.png)

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

 若要查看目錄的資訊，請選擇目錄清單中的目錄 ID。請記下 **Directory ID (目錄 ID)** 值，建立或修改 PostgreSQL 資料庫執行個體時需要此值。

![\[詳細資訊頁面的影像\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/WinAuth3.png)


## 步驟 2：（選用） 在內部部署 Active Directory 與 之間建立信任關係 Directory Service
<a name="postgresql-kerberos-setting-up.create-trust"></a>

如果您不打算使用自己的內部部署 Microsoft Active Directory，請跳至[步驟 3：為 Amazon RDS 建立 IAM 角色以存取 Directory Service](#postgresql-kerberos-setting-up.CreateIAMRole).

若要使用現場部署 Active Directory 取得 Kerberos 身分驗證，您需要使用現場部署 Microsoft Active Directory 與 AWS Managed Microsoft AD 目錄 （在 中建立） 之間的樹系信任來建立信任網域關係[步驟 1：使用 建立目錄 AWS Managed Microsoft AD](#postgresql-kerberos-setting-up.create-directory)。信任可以是單向，其中 AWS Managed Microsoft AD 目錄信任內部部署 Microsoft Active Directory。信任也可以是雙向，其中兩個 Active Directory 互相信任。如需使用 設定信任的詳細資訊 Directory Service，請參閱《 *AWS Directory Service 管理指南*》中的[何時建立信任關係](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_setup_trust.html)。

**注意**  
如果您使用內部部署 Microsoft Active Directory，Windows 用戶端會使用端點 Directory Service 中 的網域名稱進行連線，而不是使用 rds.amazonaws.com。如需詳細資訊，請參閱 [使用 Kerberos 身分驗證連線至 PostgreSQL](postgresql-kerberos-connecting.md)。

請確定您的內部部署 Microsoft Active Directory 網域名稱包含對應至新建立之信任關係的 DNS 尾碼路由。以下螢幕擷取畫面顯示了一個範例。

![\[DNS 路由對應至建立的信任\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/kerberos-auth-trust.png)


## 步驟 3：為 Amazon RDS 建立 IAM 角色以存取 Directory Service
<a name="postgresql-kerberos-setting-up.CreateIAMRole"></a>

若要讓 Amazon RDS Directory Service 為您呼叫 ， AWS 您的帳戶需要使用 受管 IAM 政策 的 IAM 角色`AmazonRDSDirectoryServiceAccess`。此角色允許 Amazon RDS 呼叫 Directory Service。

當您使用 建立資料庫執行個體， AWS 管理主控台 且主控台使用者帳戶具有 `iam:CreateRole`許可時，主控台會自動建立所需的 IAM 角色。在此情況下，角色名稱為 `rds-directoryservice-kerberos-access-role`。否則，您必須手動建立 IAM 角色。當您建立此 IAM 角色時，請選擇 `Directory Service`，然後將 AWS 受管政策連接到`AmazonRDSDirectoryServiceAccess`該角色。

如需為服務建立 IAM 角色的詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**注意**  
用於 Windows Authentication for RDS for Microsoft SQL Server 的 IAM 角色不可用於 Amazon RDS for PostgreSQL。

作為使用 `AmazonRDSDirectoryServiceAccess` 受管政策的替代方案，您可以建立具有必要許可的政策。在此情況下，IAM 角色必須有以下 IAM 信任政策。

------
#### [ JSON ]

****  

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

------

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

------
#### [ JSON ]

****  

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

------

對於選擇加入 AWS 區域，請在 IAM 角色信任政策中使用區域特定的服務主體。當您為這些區域中的服務建立信任政策時，請在服務主體中指定區域代碼。

下列範例顯示的信任政策，其中包含區域專屬服務主體：

------
#### [ JSON ]

****  

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

------

將 REGION-CODE 取代為特定區域的代碼。例如，針對亞太區域 (墨爾本) 使用下列服務主體：

```
"Service": [
  "directoryservice.rds.ap-southeast-4.amazonaws.com",
  "rds.ap-southeast-4.amazonaws.com"
]
```

## 步驟 4：建立和設定使用者
<a name="postgresql-kerberos-setting-up.create-users"></a>

 您可以透過使用 Active Directory 使用者和運算集區來建立使用者。這是 Active Directory Domain Services 和 Active Directory 輕量型目錄服務工具之一。如需詳細資訊，請參閱 Microsoft 文件中的[將使用者和電腦新增至 Active Directory 網域](https://learn.microsoft.com/en-us/troubleshoot/windows-server/identity/create-an-active-directory-server#add-users-and-computers-to-the-active-directory-domain)。在此情況下，使用者是個人或其他實體，例如其電腦屬於網域，而其身分在目錄中維護。

若要在 Directory Service 目錄中建立使用者，您必須連線到屬於 Directory Service 目錄成員的 Windows 型 Amazon EC2 執行個體。同時，您必須以具有建立使用者之許可的使用者身分來登入。如需詳細資訊，請參閱《AWS Directory Service 管理指南》**中的[建立使用者](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups_create_user.html)。

## 步驟 5：啟用目錄和資料庫執行個體之間的跨 VPC 流量
<a name="postgresql-kerberos-setting-up.vpc-peering"></a>

如果您打算在相同 VPC 中尋找目錄和資料庫執行個體，請略過本步驟，並移至[步驟 6：建立或修改 PostgreSQL 資料庫執行個體](#postgresql-kerberos-setting-up.create-modify)。

如果您打算在不同 VPC 中尋找目錄和資料庫執行個體，請使用 VPC 互連或 [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html) 來設定跨 VPC 流量。

下列程序會使用 VPC 互連來啟用 VPC 之間的流量。請遵循《Amazon Virtual Private Cloud 互連指南》**中[什麼是 VPC 互連？](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html)的指示。

**使用 VPC 互連以啟用跨 VPC 流量**

1. 設定適當的 VPC 路由規則，以確保網路流量可以雙向對流。

1. 確保資料庫執行個體安全群組可以從目錄的安全群組接收傳入流量。

1. 確保沒有網路存取控制清單 (ACL) 規則來封鎖流量。

如果不同的 AWS 帳戶擁有該目錄，您必須共用該目錄。

**在 AWS 帳戶之間共用目錄**

1. 遵循《 AWS *Directory Service 管理指南*》中的[教學課程：共用 AWS Managed Microsoft AD 目錄以實現無縫 EC2 網域加入](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_directory_sharing.html)，開始與將在其中建立資料庫執行個體的帳戶共用目錄。

1. 使用資料庫執行個體的帳戶登入 Directory Service 主控台，並確保網域具有 `SHARED` 狀態，然後再繼續。

1. 使用資料庫執行個體的帳戶登入 Directory Service 主控台時，請注意**目錄 ID** 值。您可以使用此目錄 ID，將資料庫執行個體加入網域。

## 步驟 6：建立或修改 PostgreSQL 資料庫執行個體
<a name="postgresql-kerberos-setting-up.create-modify"></a>

建立或修改要搭配目錄使用的 PostgreSQL 資料庫執行個體。您可以使用主控台、CLI 或 RDS API，將資料庫執行個體與目錄建立關聯。您可採用下列其中一種方式來這麼做：
+  使用主控台、[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) CLI 命令，或 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) RDS API 操作，建立新的 PostgreSQL 資料庫執行個體。如需說明，請參閱「[建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)」。
+  使用主控台、[modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 命令，或 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 操作，修改現有的 PostgreSQL 資料庫執行個體。如需說明，請參閱「[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)」。
+  使用主控台、[restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) CLI 命令，或 [RestoreDBInstanceFromDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html) RDS API 操作，從資料庫快照還原 PostgreSQL 資料庫執行個體。如需說明，請參閱「[還原至資料庫執行個體](USER_RestoreFromSnapshot.md)」。
+  使用主控台、[restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) CLI 命令，或 [RestoreDBInstanceToPointInTime](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html) RDS API 操作，將 PostgreSQL 資料庫執行個體還原至某個時間點。如需說明，請參閱「[將 Amazon RDS 的資料庫執行個體還原至指定時間](USER_PIT.md)」。

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

### 主控台
<a name="postgresql-kerberos-setting-up.create-modify.Console"></a>

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

![\[選擇 Kerberos 進行身分驗證並識別要使用的目錄。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/rpg-authentication-use-kerberos.png)


### AWS CLI
<a name="postgresql-kerberos-setting-up.create-modify.CLI"></a>

當您使用 時 AWS CLI，資料庫執行個體需要下列參數，才能使用您建立的目錄：
+ 針對 `--domain` 參數，使用您建立目錄時產生的網域識別碼 ("d-\$1" 識別碼)。
+ 針對 `--domain-iam-role-name` 參數，使用您建立的規則，其會使用受管 IAM 政策 `AmazonRDSDirectoryServiceAccess`。

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

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

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

## 步驟 7：針對您的 Kerberos 主體建立 PostgreSQL 使用者
<a name="postgresql-kerberos-setting-up.create-logins"></a>

此時，您的 RDS for PostgreSQL 資料庫執行個體已加入 AWS Managed Microsoft AD 網域中。您在 [步驟 4：建立和設定使用者](#postgresql-kerberos-setting-up.create-users) 的目錄中建立的使用者必須設定為 PostgreSQL 資料庫使用者，並授予登入資料庫的權限。您可以透過以具有 `rds_superuser` 權限的資料庫使用者身分登入來執行此操作。例如，如果您在建立 RDS for PostgreSQL 資料庫執行個體時接受預設值，請使用 `postgres`，如下列步驟中所示。

**針對 Kerberos 主體建立 PostgreSQL 資料庫使用者**

1. 使用 `psql` 搭配 `psql` 以連線至 RDS for PostgreSQL 資料庫執行個體端點。下列範例使用 `rds_superuser` 角色的預設 `postgres` 帳戶。

   ```
   psql --host=cluster-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
   ```

1. 針對您想要其有權存取資料庫之每個 Kerberos 主體建立資料庫使用者名稱 (Active Directory 使用者名稱)。針對該使用者名稱使用 Active Directory 執行個體中定義的標準使用者名稱 (身分) (亦即小寫 `alias` (Active Directory 中的使用者名稱))，以及 Active Directory 網域的大寫名稱。Active Directory 使用者名稱是經過外部驗證的使用者，因此請使用引號括住名稱，如下所示。

   ```
   postgres=> CREATE USER "username@CORP.EXAMPLE.COM" WITH LOGIN;
   CREATE ROLE
   ```

1. 將 `rds_ad` 角色授予資料庫使用者。

   ```
   postgres=> GRANT rds_ad TO "username@CORP.EXAMPLE.COM";
   GRANT ROLE
   ```

在您完成了針對 Active Directory 使用者身分建立所有 PostgreSQL 使用者之後，使用者就可以使用其 Kerberos 憑證存取 RDS for PostgreSQL 資料庫執行個體。

使用 Kerberos 進行驗證的資料庫使用者，都必須從屬於 Active Directory 網域成員的用戶端機器執行這項操作。

已獲授予 `rds_ad` 角色的資料庫使用者也無法具有 `rds_iam` 角色。這也適用於巢狀成員資格。如需詳細資訊，請參閱[適用於 MariaDB、MySQL 和 PostgreSQL 的 IAM 資料庫身分驗證](UsingWithRDS.IAMDBAuth.md)。

## 步驟 8：設定 PostgreSQL 用戶端
<a name="postgresql-kerberos-setting-up.configure-client"></a>

若要設定 PostgreSQL 用戶端，請執行下列步驟：
+ 建立可指向網域的 krb5.conf 檔案 (或同等檔案)。
+ 確認流量可以在用戶端主機與 之間流動 Directory Service。請使用 Netcat 等網路公用程式檢查以下各項：
  + 確認透過 DNS 傳送至連接埠 53 的流量。
  + 確認透過 TCP/UDP 傳送至連接埠 53 和 Kerberos 的流量，其中包括用於 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.goskope.com.cn = EXAMPLE.COM
 .amazon.com = EXAMPLE.COM
```

# 在 Active Directory 網域中管理 RDS for PostgreSQL 資料庫執行個體
<a name="postgresql-kerberos-managing"></a>

您可以使用主控台、CLI 或 RDS API，來管理資料庫執行個體，以及其與 Microsoft Active Directory 的關係。例如，您可以使 Active Directory 產生關聯，以啟用 Kerberos 身分驗證。您也可以移除 Active Directory 的關聯，以停用 Kerberos 身分驗證。您可以將要由某個 Microsoft Active Directory 外部識別的資料庫執行個體移至另一個 Microsoft Active Directory。

例如，使用 CLI，您可以執行下列動作：
+ 若要對失敗的成員資格重新嘗試啟用 Kerberos 身分驗證，請使用 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 命令。並針對 `--domain` 選項指定目前成員資格的目錄 ID。
+ 若要在資料庫執行個體上停用 Kerberos 身分驗證，請使用 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 命令。並針對 `none` 選項指定 `--domain`。
+ 若要將資料庫執行個體從某個網域移至另一個網域，請使用 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 命令。並針對 `--domain` 選項指定新網域的網域識別符。

## 了解網域成員資格
<a name="postgresql-kerberos-managing.understanding"></a>

在您建立或修改資料庫執行個體之後，網域的成員。您可以在主控台中或執行 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) CLI 命令，來檢視網域成員資格狀態。資料庫執行個體的狀態可以是下列其中一個：
+ `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 身分驗證可能會失敗。若是如此，請確定您使用正確的 IAM 角色，然後修改要加入網域的資料庫執行個體。

**注意**  
只有搭配使用 Kerberos 身分驗證與 RDS for PostgreSQL 時，流量才會傳送至網域的 DNS 伺服器。所有其他 DNS 請求都會被視為執行 PostgreSQL 之資料庫執行個體上的傳出網路存取。如需傳出網路存取搭配 RDS for PostgreSQL 的詳細資訊，請參閱[針對傳出網路存取使用自訂 DNS 伺服器。](Appendix.PostgreSQL.CommonDBATasks.CustomDNS.md)。

# 使用 Kerberos 身分驗證連線至 PostgreSQL
<a name="postgresql-kerberos-connecting"></a>

您可以使用 pgAdmin 界面或 psql 等命令列界面搭配 Kerberos 身分驗證連接至 PostgreSQL。如需連線的詳細資訊，請參閱 [連線至執行 PostgreSQL 資料庫引擎的資料庫執行個體](USER_ConnectToPostgreSQLInstance.md) 。如需取得端點、連接埠號碼和其他連線所需詳細資訊的資訊，請參閱 [連接至 PostgreSQL 資料庫執行個體](CHAP_GettingStarted.CreatingConnecting.PostgreSQL.md#CHAP_GettingStarted.Connecting.PostgreSQL)。

**注意**  
PostgreSQL 中的 GSSAPI 身分驗證和加密是由 Kerberos 程式庫 `libkrb5.so` 實作。`postgres_fdw` 和 `dblink` 等功能也依賴此相同的程式庫，來使用 Kerberos 身分驗證或加密進行傳出連線。

## pgAdmin
<a name="collapsible-section-pgAdmin"></a>

若要使用 Kerberos 身分驗證搭配 pgAdmin 連接至 PostgreSQL，請遵循下列步驟：

1. 在您的用戶端電腦上啟動 pgAdmin 應用程式。

1. 在 **Dashboard (儀表板)** 標籤上，選擇 **Add New Server (新增伺服器)**。

1. 在 **Create - Server (建立 - 伺服器)** 對話方塊中，於 **General (一般)** 標籤上輸入名稱，以識別 pgAdmin 中的伺服器。

1. 在 **Connection** (連線) 標籤上，輸入來自 RDS for PostgreSQL 資料庫的下列資訊：
   + 對於 **Host** (託管)，輸入 的端點。RDS for PostgreSQL 資料庫執行個體。端點看起來類似下列：

     ```
     RDS-DB-instance.111122223333.aws-region.rds.amazonaws.com
     ```

     若要從 Windows 用戶端連線至內部部署 Microsoft Active Directory，您可以使用 AWS 受管 Active Directory 的網域名稱，而不是在主機端點`rds.amazonaws.com`中。例如，假設 AWS Managed Active Directory 的網域名稱為 `corp.example.com`。然後對於 **Host** (託管)，端點的指定方式如下：

     ```
     RDS-DB-instance.111122223333.aws-region.corp.example.com
     ```
   + 針對 **Port (連接埠)**，輸入指派的連接埠。
   + 針對 **Maintenance database (維護資料庫)**，輸入用戶端將連接的初始資料庫名稱。
   + 針對 **Username (使用者名稱)**，輸入您在 [步驟 7：針對您的 Kerberos 主體建立 PostgreSQL 使用者](postgresql-kerberos-setting-up.md#postgresql-kerberos-setting-up.create-logins) 中為 Kerberos 身分驗證輸入的使用者名稱。

1. 選擇**儲存**。

## Psql
<a name="collapsible-section-psql"></a>

若要使用 Kerberos 身分驗證搭配 psql 連接至 PostgreSQL，請遵循下列步驟：

1. 在命令提示中，執行下列命令。

   ```
   kinit username                
   ```

   請將 *`username`* 換成使用者名稱。在提示字元中，輸入 Microsoft Active Directory 中為使用者存放的密碼。

1. 如果 PostgreSQL 資料庫執行個體是使用可公開存取的 VPC，請將資料庫執行個體端點的 IP 地址放入 EC2 用戶端上的 `/etc/hosts` 檔案。例如，使用下列命令取得 IP 地址，然後將該地址放入 `/etc/hosts` 檔案。

   ```
   % dig +short PostgreSQL-endpoint.AWS-Region.rds.amazonaws.com  
   ;; Truncated, retrying in TCP mode.
   ec2-34-210-197-118.AWS-Region.compute.amazonaws.com.
   34.210.197.118 
   
   % echo " 34.210.197.118  PostgreSQL-endpoint.AWS-Region.rds.amazonaws.com" >> /etc/hosts
   ```

   如果使用來自 Windows 用戶端的內部部署 Microsoft Active Directory，則需要使用特殊化的端點進行連線。使用 AWS Managed Active Directory 的網域名稱，而不是在主機端點`rds.amazonaws.com`中使用 Amazon 網域。

   例如，假設 AWS Managed Active Directory 的網域名稱為 `corp.example.com`。則為端點使用 `PostgreSQL-endpoint.AWS-Region.corp.example.com` 格式並將其放入 `/etc/hosts` 檔案中。

   ```
   % echo " 34.210.197.118  PostgreSQL-endpoint.AWS-Region.corp.example.com" >> /etc/hosts
   ```

1. 使用下列 psql 命令來登入與 Active Directory 整合的 PostgreSQL 資料庫執行個體。

   ```
   psql -U username@CORP.EXAMPLE.COM -p 5432 -h PostgreSQL-endpoint.AWS-Region.rds.amazonaws.com postgres
   ```

   若要使用內部部署 Active Directory 從 Windows 用戶端登入 PostgreSQL 資料庫叢集，請使用下列 psql 命令搭配上一個步驟的網域名稱 (`corp.example.com`)：

   ```
   psql -U username@CORP.EXAMPLE.COM -p 5432 -h PostgreSQL-endpoint.AWS-Region.corp.example.com postgres
   ```