

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

# 使用 Active Directory 搭配 RDS for SQL Server
<a name="User.SQLServer.ActiveDirectoryWindowsAuth"></a>

您可以將 RDS for SQL Server 資料庫執行個體加入至 Microsoft Active Directory (AD) 網域。您的 AD 網域可以在 AWS Managed AD 內部 AWS託管，或在您選擇的位置的自我管理 AD 上託管，包括您的公司資料中心、on AWS EC2 或其他雲端提供者。

您可以使用 NTLM 身分驗證和使用自我管理 Active Directory 和 的 Kerberos 身分驗證來驗證網域使用者 AWS Managed Microsoft AD。

在下列各節中，您可以找到在 Amazon RDS 上使用自我管理 Active Directory 和 AWS Managed Active Directory for Microsoft SQL Server 的相關資訊。

**Topics**
+ [搭配使用自我管理 Active Directory 與 Amazon RDS for SQL Server 資料庫執行個體](USER_SQLServer_SelfManagedActiveDirectory.md)
+ [使用具有 RDS for SQL Server 的 AWS 受管 Active Directory](USER_SQLServerWinAuth.md)

# 搭配使用自我管理 Active Directory 與 Amazon RDS for SQL Server 資料庫執行個體
<a name="USER_SQLServer_SelfManagedActiveDirectory"></a>

Amazon RDS for SQL Server 可與您的自我管理 Active Directory (AD) 網域密切整合，無論您的 AD 託管位置是在資料中心、Amazon EC2，還是與其他雲端供應商。此整合可讓您透過 NTLM 或 Kerberos 通訊協定進行直接使用者身分驗證，無需複雜的中繼網域或樹系信任。當您連線至 RDS SQL Server 資料庫執行個體時，身分驗證要求會安全地轉送至您指定的 AD 網域，以維護您現有的身分管理結構，同時運用 Amazon RDS 的受管資料庫功能。

**Topics**
+ [區域和版本可用性](#USER_SQLServer_SelfManagedActiveDirectory.RegionVersionAvailability)
+ [要求](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md)
+ [考量事項](#USER_SQLServer_SelfManagedActiveDirectory.Limitations)
+ [設定自我管理 Active Directory](USER_SQLServer_SelfManagedActiveDirectory.SettingUp.md)
+ [將資料庫執行個體加入自我管理 Active Directory](USER_SQLServer_SelfManagedActiveDirectory.Joining.md)
+ [在自我管理 Active Directory 網域中管理資料庫執行個體](USER_SQLServer_SelfManagedActiveDirectory.Managing.md)
+ [了解自我管理 Active Directory 網域成員資格](#USER_SQLServer_SelfManagedActiveDirectory.Understanding)
+ [對自我管理 Active Directory 進行疑難排解](USER_SQLServer_SelfManagedActiveDirectory.TroubleshootingSelfManagedActiveDirectory.md)
+ [還原 SQL Server 資料庫執行個體，然後將其新增至自我管理 Active Directory 網域](#USER_SQLServer_SelfManagedActiveDirectory.Restore)

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

Amazon RDS 支援在所有商業 AWS 區域 和 中使用 NTLM 和 Kerberos 的自我管理 AD for SQL Server AWS GovCloud (US) Regions。

# 要求
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements"></a>

在將 RDS for SQL Server 資料庫執行個體加入自我管理 AD 網域之前，請確定您已符合下列需求。

**Topics**
+ [設定內部部署 AD](#USER_SQLServer_SelfManagedActiveDirectory.Requirements.OnPremConfig)
+ [設定您的網路連線能力](#USER_SQLServer_SelfManagedActiveDirectory.Requirements.NetworkConfig)
+ [設定您的 AD 網域服務帳戶](#USER_SQLServer_SelfManagedActiveDirectory.Requirements.DomainAccountConfig)
+ [設定透過 LDAPS 的安全通訊](#USER_SQLServer_SelfManagedActiveDirectory.Requirements.LDAPS)

## 設定內部部署 AD
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements.OnPremConfig"></a>

請確定您具有可以將 Amazon RDS for SQL Server 執行個體加入其中的內部部署或其他自我管理 Microsoft AD。您的內部部署 AD 應該具有下列組態：
+ 如果您已定義 AD 網站，請確定 VPC 中與您的 RDS for SQL Server 資料庫執行個體相關聯的子網路已定義在您的 AD 網站中。確認 VPC 中的子網路與其他 AD 網站中的子網路之間沒有任何衝突。
+ 您的 AD 網域控制器具有 Windows Server 2008 R2 或更新版本的網域功能層級。
+ 您的 AD 網域名稱不能採用單一標籤網域 (SLD) 格式。RDS for SQL Server 不支援 SLD 網域。
+ AD 的完整網域名稱 (FQDN) 不得超過 47 個字元。

## 設定您的網路連線能力
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements.NetworkConfig"></a>

請確定您已符合下列網路組態：
+ 在您想要建立 RDS for SQL Server 資料庫執行個體和自我管理 AD 的 Amazon VPC 之間設定連線能力。您可以使用 AWS Direct Connect、 AWS VPN、VPC 對等互連或 AWS Transit Gateway 設定連線。
+ 對於 VPC 安全群組，預設 Amazon VPC 的預設安全群組已新增至主控台中的 RDS for SQL Server 資料庫執行個體。請確定您要在其中建立 RDS for SQL Server 資料庫執行個體之子網路的安全群組和 VPC 網路 ACL 允許連接埠上的流量，並依下圖所示的方向前進。  
![\[自我管理 AD 網路組態連接埠規則。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQLServer_SelfManagedActiveDirectory_Requirements_NetworkConfig.png)

  下表識別每個連接埠的角色。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/USER_SQLServer_SelfManagedActiveDirectory.Requirements.html)
+ 一般而言，網域 DNS 伺服器位於 AD 網域控制器中。您不需要設定 VPC DHCP 選項集，即可使用此功能。如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的 [DHCP 選項集](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。

**重要**  
如果使用 VPC 網路 ACL，您也必須允許動態連接埠 (49152-65535) 上來自 RDS for SQL Server 資料庫執行個體的傳出流量。請確定也會在適用於每個 AD 網域控制器、DNS 伺服器和 RDS for SQL Server 資料庫執行個體的防火牆上鏡像這些流量規則。  
雖然 VPC 安全群組只需要以網路流量起始的方向開啟連接埠，但大多數 Windows 防火牆和 VPC 網路 ACL 都需要雙向開啟連接埠。

## 設定您的 AD 網域服務帳戶
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements.DomainAccountConfig"></a>

請確定您已符合 AD 網域服務帳戶的下列需求：
+ 確定您在自我管理 AD 網域中具有網域服務帳戶，且該帳戶具有將電腦加入網域的委派許可。網域服務帳戶是自我管理 AD 中的使用者帳戶，其已獲委派執行特定任務的許可。
+ 在您正要將 RDS for SQL Server 資料庫執行個體加入其中的組織單位 (OU) 中，網域服務帳戶必須獲得委派下列許可：
  + 已驗證能夠寫入 DNS 主機名稱
  + 已驗證能夠寫入服務主體名稱
  + 建立和刪除電腦物件

  這些代表將電腦物件加入自我管理 AD 所需的最低許可集。如需詳細資訊，請參閱 Microsoft Windows Server 文件中的[嘗試將電腦加入網域時發生錯誤](https://learn.microsoft.com/en-US/troubleshoot/windows-server/identity/access-denied-when-joining-computers)。
+ 若要使用 Kerberos 身分驗證，您必須將服務主體名稱 (SPN) 和 DNS 許可提供給 AD 網域服務帳戶：
  + **寫入 SPN**：在您需要加入 RDS for SQL Server 資料庫執行個體的 OU 中，將**寫入 SPN** 許可委派給 AD 網域服務帳戶。此許可與已驗證的寫入 SPN 不同。
  + **DNS 許可**：在網域控制站的伺服器層級，透過 DNS 管理員將下列許可提供給 AD 網域服務帳戶：
    + 列出內容
    + 讀取所有屬性
    + 讀取許可

**重要**  
在建立資料庫執行個體之後，請不要移動 RDS for SQL Server 在組織單位中建立的電腦物件。移動相關聯的物件會導致 RDS for SQL Server 資料庫執行個體設定錯誤。如果您需要移動 Amazon RDS 所建立的電腦物件，請使用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 操作，透過所需的電腦物件位置修改網域參數。

## 設定透過 LDAPS 的安全通訊
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements.LDAPS"></a>

對於 RDS 建議透過 LDAPS 進行通訊，以查詢和存取網域控制站中的電腦物件和 SPNs。若要使用安全 LDAP，請使用您的網域控制站上符合安全 LDAPS 需求的有效 SSL 憑證。如果網域控制站上不存在有效的 SSL 憑證，RDS for SQL Server 資料庫執行個體會預設為使用 LDAP。如需憑證有效性的詳細資訊，請參閱 [LDAPS 憑證的需求](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/enable-ldap-over-ssl-3rd-certification-authority#requirements-for-an-ldaps-certificate)。

## 考量事項
<a name="USER_SQLServer_SelfManagedActiveDirectory.Limitations"></a>

將 RDS for SQL Server 資料庫執行個體新增至自我管理 AD 時，請考量下列事項：
+ 您的資料庫執行個體會與 AWS NTP 服務同步，而非 AD 網域的時間伺服器。對於 AD 網域中連結的 SQL Server 執行個體之間的資料庫連線，您只能進行 SQL 身分驗證，而不是 Windows 身分驗證。
+ 來自自我管理 AD 網域的群組政策物件設定不會傳播到您的 RDS for SQL Server 執行個體。

# 設定自我管理 Active Directory
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp"></a>

若要設定自我管理 AD，請採取下列步驟。

**Topics**
+ [步驟 1：在您的 AD 中建立組織單位](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateOU)
+ [步驟 2：在您的 AD 中建立 AD 網域服務帳戶](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateADuser)
+ [步驟 3：將控制權委派給 AD 網域服務帳戶](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.DelegateControl)
+ [步驟 4：建立AWS KMS金鑰](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateKMSkey)
+ [步驟 5：建立AWS秘密](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateSecret)

## 步驟 1：在您的 AD 中建立組織單位
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateOU"></a>

**重要**  
 我們建議為擁有加入自我管理 AD 網域之 RDS for SQL Server 資料庫執行個體的任何AWS帳戶建立範圍為該 OU 的專用 OU 和服務憑證。透過專用 OU 和服務憑證，您可以避免衝突的許可，並遵循最低權限的主體。

**在您的 AD 中建立 OU**

1. 以網域管理員身分連線至您的 AD 網域。

1. 開啟 **Active Directory 使用者和電腦**，然後選取您要在其中建立 OU 的網域。

1. 在網域上按一下滑鼠右鍵，然後選擇**新增**，再選擇**組織單位**。

1. 輸入 OU 的名稱。

1. 保持選取**保護容器免遭意外刪除**的方塊。

1. 按一下 **OK (確定)**。您的新 OU 會出現在您的網域下方。

## 步驟 2：在您的 AD 中建立 AD 網域服務帳戶
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateADuser"></a>

網域服務帳戶登入資料將用於 AWSSecrets Manager 中的秘密。

**在您的 AD 中建立 AD 網域服務帳戶**

1. 開啟 **Active Directory 使用者和電腦**，然後選取您要在其中建立使用者的網域。

1. 在**使用者**上按一下滑鼠右鍵，然後選擇**新增**，再選擇**使用者**。

1. 輸入使用者的名字、姓氏和登入名稱。按一下 **Next (下一步)**。

1. 輸入使用者的密碼。不要選取**「使用者在下次登入時必須變更密碼」**。不要選取**「帳戶已停用」**。按一下 **Next (下一步)**。

1. 按一下 **OK (確定)**。您的新使用者會出現在您的網域下方。

## 步驟 3：將控制權委派給 AD 網域服務帳戶
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.DelegateControl"></a>

**將控制權委派給網域中的 AD 網域服務帳戶**

1. 開啟 **Active Directory 使用者和電腦** MMC 嵌入式管理單元，然後選取您要在其中建立使用者的網域。

1. 在您先前建立的 OU 上按一下滑鼠右鍵，然後選擇**委派控制權**。

1. 在**委派控制權精靈**頁面上，按**下一步**。

1. 在**使用者或群組**區段上，按一下**新增**。

1. 在**選取使用者、電腦或群組**區段上，輸入您建立的 AD 網域服務帳戶，然後按一下**檢查名稱**。如果 AD 網域服務帳戶檢查成功，請按一下**確定**。

1. 在**使用者或群組**區段上，確認已新增您的 AD 網域服務帳戶，然後按**下一步**。

1. 在**要委派的任務**區段上，選取**建立要委派的自訂任務**，然後按**下一步**。

1. 在 **Active Directory 物件類型**區段上：

   1. 選擇**僅限資料夾中的下列物件**。

   1. 選取**電腦物件**。

   1. 選取**在此資料夾中建立選取的物件**。

   1. 選取**刪除此資料夾中選取的物件**，然後按**下一步**。

1. 在**許可**區段上：

   1. 保持選取**一般**。

   1. 選取**已驗證寫入 DNS 主機名稱**。

   1. 選取**已驗證寫入服務主體名稱**，然後按**下一步**。

   1. 若要啟用 Kerberos 身分驗證，請保持選取**屬性特定**，然後從清單中選取**寫入 servicePrincipalName**。

1. 對於**完成委派控制權精靈**，請檢閱並確認您的設定，然後按一下**完成**。

1. 針對 Kerberos 身分驗證，開啟 DNS Manager，並開啟**伺服器**屬性。

   1. 在 Windows 對話方塊中，輸入 `dnsmgmt.msc`。

   1. 在**安全性**索引標籤底下新增 AD 網域服務帳戶。

   1. 選取**讀取**許可，並套用您的變更。

## 步驟 4：建立AWS KMS金鑰
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateKMSkey"></a>

KMS 金鑰用於加密您的AWS秘密。

**建立AWS KMS金鑰**
**注意**  
 對於**加密金鑰**，請勿使用AWS預設 KMS 金鑰。請務必在相同AWS帳戶中建立AWS KMS金鑰，其中包含您要加入自我管理 AD 的 RDS for SQL Server 資料庫執行個體。

1. 在 AWS KMS主控台中，選擇**建立金鑰**。

1. 對於**金鑰類型**，選擇**對稱**。

1. 對於**金鑰用途**，選擇**加密和解密**。

1. 針對 **Advanced options (進階選項)**：

   1. 對於**金鑰材料來源**，選擇 **KMS**。

   1. 對於**區域性**，選擇**單一區域金鑰**，然後按**下一步**。

1. 對於**別名**，提供 KMS 金鑰的名稱。

1. (選用) 對於**描述**，提供 KMS 金鑰的描述。

1. (選用) 對於**標籤**，提供 KMS 金鑰的標籤，然後按**下一步**。

1. 對於**金鑰管理員**，提供 IAM 使用者的名稱，然後選取該名稱。

1. 對於**金鑰刪除**，保持選取**允許金鑰管理員刪除此金鑰**的方塊，然後按**下一步**。

1. 對於**金鑰使用者**，提供上一個步驟中相同的 IAM 使用者，然後選取該使用者。按一下 **Next (下一步)**。

1. 檢閱組態。

1. 對於**金鑰政策**，在政策**聲明**中包含下列內容：

   ```
   {
       "Sid": "Allow use of the KMS key on behalf of RDS",
       "Effect": "Allow",
       "Principal": {
           "Service": [
               "rds.amazonaws.com"
           ]
       },
       "Action": "kms:Decrypt",
       "Resource": "*"
   }
   ```

1. 按一下 **Finish (完成)**。

## 步驟 5：建立AWS秘密
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateSecret"></a>

**若要建立機密**
**注意**  
 請務必在包含您要加入自我管理 AD 之 RDS for SQL Server 資料庫執行個體的相同AWS帳戶中建立秘密。

1. 在 AWSSecrets Manager 中，選擇**儲存新的秘密**。

1. 針對**機密類型**，選擇**其他類型的機密**。

1. 對於**金鑰/值對**，新增兩個金鑰：

   1. 對於第一個金鑰，輸入 `SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME`。

   1. 對於第一個金鑰的值，僅輸入 AD 使用者的使用者名稱 (不含網域字首)。請勿包含網域名稱，因為這會導致執行個體建立失敗。

   1. 對於第二個金鑰，輸入 `SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD`。

   1. 對於第二個金鑰的值，輸入您在網域上為 AD 使用者建立的密碼。

1. 對於**加密金鑰**，輸入您在上一個步驟中建立的 KMS 金鑰，然後按**下一步**。

1. 對於**秘密名稱**，輸入可協助您稍後尋找密碼的描述性名稱。

1. (選用) 對於**描述**，輸入秘密名稱的描述。

1. 對於**資源許可**，按一下**編輯**。

1. 請將下列政策新增至許可政策：
**注意**  
建議您使用政策中的 `aws:sourceAccount` 和 `aws:sourceArn` 條件金鑰，保護自己免受*混淆代理人問題*的困擾。使用AWS 帳戶適用於 的 `aws:sourceAccount`和適用於 的 RDS for SQL Server 資料庫執行個體 ARN`aws:sourceArn`。如需詳細資訊，請參閱[防止跨服務混淆代理人問題](cross-service-confused-deputy-prevention.md)。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement":
       [
           {
               "Effect": "Allow",
               "Principal":
               {
                   "Service": "rds.amazonaws.com"
               },
               "Action": "secretsmanager:GetSecretValue",
               "Resource": "*",
               "Condition":
               {
                   "StringEquals":
                   {
                       "aws:sourceAccount": "123456789012"
                   },
                   "ArnLike":
                   {
                       "aws:sourceArn": "arn:aws:rds:us-west-2:123456789012:db:*"
                   }
               }
           }
       ]
   }
   ```

------

1. 按一下**儲存**，然後按**下一步**。

1. 對於**設定輪換設定**，保留預設值並選擇**下一步**。

1. 檢閱秘密的設定，然後按一下**存放**。

1. 選擇您建立的秘密，然後複製**秘密 ARN** 的值。這將在下一個步驟中用來設定自我管理 Active Directory。

# 將資料庫執行個體加入自我管理 Active Directory
<a name="USER_SQLServer_SelfManagedActiveDirectory.Joining"></a>

若要將 RDS for SQL Server 資料庫執行個體加入自我管理 AD，請遵循下列步驟：

## 步驟 1：建立或修改 SQL Server 資料庫執行個體
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateModify"></a>

您可以使用主控台、CLI 或 RDS API，將 RDS for SQL Server 資料庫執行個體與自我管理 AD 網域建立關聯。您可採用下列其中一種方式來這麼做：
+ 使用主控台、[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 操作，建立新的 SQL Server 資料庫執行個體。

  如需說明，請參閱「[建立 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 操作，修改現有的 SQL Server 資料庫執行個體。

  如需說明，請參閱「[修改 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 操作，從資料庫快照還原 SQL Server 資料庫執行個體。

  如需說明，請參閱「[還原至資料庫執行個體](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 操作，將 SQL Server 資料庫執行個體還原至某個時間點。

  如需說明，請參閱[將 Amazon RDS 的資料庫執行個體還原至指定時間](USER_PIT.md)。

當您使用 時 AWS CLI，資料庫執行個體需要下列參數，才能使用您建立的自我管理 AD 網域：
+ 對於 `--domain-fqdn` 參數，使用自我管理 AD 的完整網域名稱 (FQDN)。
+ 對於 `--domain-ou` 參數，使用您在自我管理 AD 中建立的 OU。
+ 對於 `--domain-auth-secret-arn` 參數，使用您在上一個步驟中所建立之**秘密 ARN** 的值。
+ 對於 `--domain-dns-ips` 參數，針對自我管理 AD 使用 DNS 伺服器的主要和次要 IPv4 地址。如果您沒有次要 DNS 伺服器 IP 地址，請輸入主要 IP 地址兩次。

下列範例 CLI 命令說明如何建立、修改及移除具有自我管理 AD 網域的 RDS for SQL Server 資料庫執行個體。

**重要**  
如果您修改資料庫執行個體，以將其加入自我管理 AD 網域或從中移除，則需要重新啟動資料庫執行個體，修改才會生效。您可以選擇立即套用變更，也可以等到下一個維護時段。選擇**立即套用**選項會導致單一可用區域資料庫執行個體停機。多可用區域資料庫執行個體將在完成重新啟動之前執行容錯移轉。如需詳細資訊，請參閱[使用排程修改設定](USER_ModifyInstance.ApplyImmediately.md)。

下列 CLI 命令會建立新的 RDS for SQL Server 資料庫執行個體，並將其加入自我管理 AD 網域。

針對 Linux、macOS 或 Unix：

```
aws rds create-db-instance \
    --db-instance-identifier my-DB-instance \
    --db-instance-class db.m5.xlarge \
    --allocated-storage 50 \
    --engine sqlserver-se \
    --engine-version 15.00.4043.16.v1 \
    --license-model license-included \
    --master-username my-master-username \
    --master-user-password my-master-password \
    --domain-fqdn my_AD_domain.my_AD.my_domain \
    --domain-ou OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain \
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" \
    --domain-dns-ips "10.11.12.13" "10.11.12.14"
```

在 Windows 中：

```
aws rds create-db-instance ^
    --db-instance-identifier my-DB-instance ^
    --db-instance-class db.m5.xlarge ^
    --allocated-storage 50 ^
    --engine sqlserver-se ^
    --engine-version 15.00.4043.16.v1 ^
    --license-model license-included ^
    --master-username my-master-username ^
    --master-user-password my-master-password ^
    --domain-fqdn my-AD-test.my-AD.mydomain ^
    --domain-ou OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain ^
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" \ ^
    --domain-dns-ips "10.11.12.13" "10.11.12.14"
```

下列 CLI 命令會修改現有的 RDS for SQL Server 資料庫執行個體，以使用自我管理 AD 網域。

針對 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier my-DB-instance \
    --domain-fqdn my_AD_domain.my_AD.my_domain \
    --domain-ou OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain \
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" \ 
    --domain-dns-ips "10.11.12.13" "10.11.12.14"
```

在 Windows 中：

```
aws rds modify-db-instance ^
    --db-instance-identifier my-DBinstance ^
    --domain-fqdn my_AD_domain.my_AD.my_domain ^
    --domain-ou OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain ^
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" ^ 
    --domain-dns-ips "10.11.12.13" "10.11.12.14"
```

下列 CLI 命令會從自我管理 AD 網域中移除 RDS for SQL Server 資料庫執行個體。

針對 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier my-DB-instance \
    --disable-domain
```

在 Windows 中：

```
aws rds modify-db-instance ^
    --db-instance-identifier my-DB-instance ^
    --disable-domain
```

## 步驟 2：使用 Kerberos 或 NTLM 身分驗證
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.KerbNTLM"></a>

### NTLM 身分驗證
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.KerbNTLM.NTLM"></a>

每個 Amazon RDS 資料庫執行個體都有端點，並且每個端點有資料庫執行個體的 DNS 名稱和連接埠號碼。若要使用 SQL 用戶端應用程式連線至您的資料庫執行個體，您需要資料庫執行個體的 DNS 名稱和連接埠號碼。若要使用 NTLM 身分驗證進行驗證，如果您使用多可用區域部署，則必須連線至 RDS 端點或接聽程式端點。

在規劃的資料庫維護或未規劃的服務中斷期間，Amazon RDS 會自動容錯移轉到最新的次要資料庫，以便操作可以很快繼續執行，而無須人為介入。主要與次要執行個體會使用相同的端點，其實體網路會處理轉換至次要的作業，做為容錯移轉程序的一部分。當容錯移轉發生時，您不必重新設定應用程式。

### Kerberos 身分驗證
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.Kerb"></a>

RDS for SQL Server 的 Kerberos 型身分驗證需要提供特定服務主體名稱 (SPN) 的連線。不過，容錯移轉事件之後，應用程式可能不知道新的 SPN。為了解決此問題，RDS for SQL Server 提供了 Kerberos 型端點。

Kerberos 型端點遵循特定格式。如果您的 RDS 端點為 `rds-instance-name.account-region-hash.aws-region.rds.amazonaws.com`，則對應的 Kerberos 型端點將為 `rds-instance-name.account-region-hash.aws-region.awsrds.fully qualified domain name (FQDN)`。

例如，如果 RDS 端點為 `ad-test.cocv6zwtircu.us-east-1.rds.amazonaws.com`，且網域名稱為 `corp-ad.company.com`，則 Kerberos 型端點將為 `ad-test.cocv6zwtircu.us-east-1.awsrds.corp-ad.company.com`。

此 Kerberos 型端點可以使用 Kerberos 與 SQL Server 執行個體進行驗證，即使在容錯移轉事件之後也一樣，因為端點會自動更新，以指向主要 SQL Server 執行個體的新 SPN。

### 尋找您的 CNAME
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CNAME"></a>

若要尋找 CNAME，請連線至您的網域控制站，並開啟 **DNS Manager**。導覽至**轉送查詢區域**和您的 FQDN。

導覽 **awsrds**、**aws-region** 以及**帳戶和區域特定的雜湊**。

![\[修改資料庫執行個體的儲存量\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/kerb-endpoint-selfManagedAD-RDSMS.png)


如果從遠端用戶端連線 CNAME 之後傳回 NTLM 連線，請檢查是否允許列出必要的連接埠。

如果要檢查您的連線使用的是 Kerberos，請執行下列查詢：

```
SELECT net_transport, auth_scheme
    FROM sys.dm_exec_connections
    WHERE session_id = @@SSPID;
```

如果執行個體在您連線至 Kerberos 端點時傳回 NTLM 連線，請驗證您的網路組態和使用者組態。請參閱 [設定您的網路連線能力](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md#USER_SQLServer_SelfManagedActiveDirectory.Requirements.NetworkConfig)。

## 步驟 3：建立 Windows 身分驗證 SQL Server 登入
<a name="USER_SQLServer_SelfManagedActiveDirectory.CreateLogins"></a>

使用 Amazon RDS 主要使用者憑證來連線至 SQL Server 資料庫執行個體，如同您對任何其他資料庫執行個體所做一般。因為資料庫執行個體已加入自我管理 AD 網域，所以您可以佈建 SQL Server 登入和使用者。您可以從自我管理 AD 網域中的 AD 使用者和群組公用程式執行此操作。您可透過對這些 Windows 登入授予和撤銷的標準 SQL Server 許可來管理資料庫許可。

為了讓自我管理 AD 網域服務帳戶向 SQL Server 進行身分驗證，自我管理 AD 網域服務帳戶或使用者所屬的自我管理 AD 群組必須要有 SQL Server Windows 登入存在。精細定義的存取控制是透過授予和撤銷這些 SQL Server 登入的許可來處理。自我管理 AD 網域服務帳戶若沒有 SQL Server 登入，或不屬於具有此類登入的自我管理 AD 群組，則無法存取 SQL Server 資料庫執行個體。

需要 ALTER ANY LOGIN 許可，才能建立自我管理 AD SQL Server 登入。如果您尚未使用此許可建立任何登入，請使用 SQL Server 身分驗證，以資料庫執行個體的主要使用者身分連線，並在主要使用者的內容下建立自我管理 AD SQL Server 登入。

您可以執行如下的資料定義語言 (DDL) 命令，為自我管理 AD 網域服務帳戶或群組建立 SQL Server 登入。

**注意**  
使用 Windows 2000 前版的登入名稱，以格式 `my_AD_domain\my_AD_domain_user` 來指定使用者和群組。您無法使用格式為 *`my_AD_domain_user`*`@`*`my_AD_domain`* 的使用者原則名稱 (UPN)。

```
USE [master]
GO
CREATE LOGIN [my_AD_domain\my_AD_domain_user] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];
GO
```

如需詳細資訊，請參閱 Microsoft 開發人員網路文件中的[ 建立登入 (Transact-SQL)](https://msdn.microsoft.com/en-us/library/ms189751.aspx)。

來自您網域的使用者 (人員和應用程式兩者) 現在可以使用 Windows 身分驗證，從加入自我管理 AD 網域的用戶端機器連線至 RDS for SQL Server Active 執行個體。

# 在自我管理 Active Directory 網域中管理資料庫執行個體
<a name="USER_SQLServer_SelfManagedActiveDirectory.Managing"></a>

 您可以使用 主控台 AWS CLI或 Amazon RDS API 來管理資料庫執行個體及其與自我管理 AD 網域的關係。例如，您可以將資料庫執行個體移入、移出或移至網域之間。

 例如，使用 Amazon RDS API，您可以執行下列動作：
+ 若要針對失敗的成員資格重新嘗試自我管理網域加入，請使用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) API 操作，並指定相同的參數集：
  + `--domain-fqdn`
  + `--domain-dns-ips`
  + `--domain-ou`
  + `--domain-auth-secret-arn`
+ 若要從自我管理網域中移除資料庫執行個體，請使用 `ModifyDBInstance` API 操作，並針對網域參數指定 `--disable-domain`。
+ 若要將資料庫執行個體從某個自我管理網域移至另一個網域，請使用 `ModifyDBInstance` API 操作，並指定新網域的網域參數。
  + `--domain-fqdn`
  + `--domain-dns-ips`
  + `--domain-ou`
  + `--domain-auth-secret-arn`
+ 若要列出每個資料庫執行個體的自我管理 AD 網域成員資格，請使用 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/DescribeDBInstances.html) API 操作。

## 了解自我管理 Active Directory 網域成員資格
<a name="USER_SQLServer_SelfManagedActiveDirectory.Understanding"></a>

您在指定 AD 詳細資訊時建立或修改資料庫執行個體之後，該執行個體會成為自我管理 AD 網域的成員。 AWS 主控台會指出資料庫執行個體自我管理 Active Directory 網域成員資格的狀態。資料庫執行個體的狀態可以是下列其中一個：
+  **已加入** – 執行個體是 AD 網域的成員。
+  **加入中** – 執行個體正處於成為 AD 網域成員的過程中。
+  **加入待定** – 執行個體成員資格待定。
+  **pending-maintenance-join** – AWS 將嘗試在下一個排定的維護時段，讓執行個體成為 AD 網域的成員。
+  **移除待定** – 從 AD 網域移除執行個體待定。
+  **pending-maintenance-removal** – AWS 將在下一個排定的維護時段嘗試從 AD 網域移除執行個體。
+  **失敗** – 組態問題讓執行個體無法加入 AD 網域。請在重新發出執行個體修改命令之前檢查並修正您的組態。
+  **移除中** – 正在從自我管理 AD 網域移除執行個體。

**重要**  
因為網路連線問題，所以成為自我管理 AD 網域成員的請求可能失敗。例如，您可以建立一個資料庫執行個體或修改現有執行個體，並嘗試讓資料庫執行個體失敗，以便成為自我管理 AD 網域的成員。在此情況下，請重新發出命令以建立或修改資料庫執行個體，或修改新建立的執行個體以加入自我管理 AD 網域。

# 對自我管理 Active Directory 進行疑難排解
<a name="USER_SQLServer_SelfManagedActiveDirectory.TroubleshootingSelfManagedActiveDirectory"></a>

以下是您在設定或修改自我管理 AD 時可能會遇到的問題。


****  

| 錯誤程式碼 | 說明 | 常見原因 | 故障診斷建議 | 
| --- | --- | --- | --- | 
| 錯誤 2 / 0x2 | 系統找不到指定的檔案。 | 使用 `—domain-ou` 參數指定的組織單位 (OU) 的格式或位置無效。透過 AWS Secrets Manager 指定的網域服務帳戶缺少加入 OU 所需的許可。 | 檢閱 `—domain-ou` 參數。確定網域服務帳戶具有 OU 的正確許可。如需詳細資訊，請參閱[設定您的 AD 網域服務帳戶](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md#USER_SQLServer_SelfManagedActiveDirectory.Requirements.DomainAccountConfig)。 | 
| 錯誤 5 / 0x5 | 存取遭拒。 | 網域服務帳戶的許可設定錯誤，或網域中已存在電腦帳戶。 | 檢閱網域中的網域服務帳戶許可，並確認網域中沒有重複的 RDS 電腦帳戶。您可以在 RDS for SQL Server 資料庫執行個體上執行 `SELECT @@SERVERNAME`，以驗證 RDS 電腦帳戶的名稱。如果您使用多可用區域，請嘗試透過容錯移轉重新開機，然後再次驗證 RDS 電腦帳戶。如需詳細資訊，請參閱[在資料庫執行個體](USER_RebootInstance.md)。 | 
| 錯誤 87 / 0x57 | 參數不正確。 | 透過 AWS Secrets Manager 指定的網域服務帳戶沒有正確的許可。使用者設定檔也可能已損毀。 | 檢閱網域服務帳戶的需求。如需詳細資訊，請參閱[設定您的 AD 網域服務帳戶](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md#USER_SQLServer_SelfManagedActiveDirectory.Requirements.DomainAccountConfig)。 | 
| 錯誤 234 / 0xEA | 指定的組織單位 (OU) 不存在。 | 使用 `—domain-ou` 參數指定的 OU 不存在於自我管理 AD 中。 | 檢閱 `—domain-ou` 參數，並確保指定的 OU 存在於您的自我管理 AD 中。 | 
| 錯誤 1326 / 0x52E | 使用者名稱或密碼不正確。 |  AWS Secrets Manager 中提供的網域服務帳戶登入資料包含未知的使用者名稱或錯誤密碼。也可能在您的自我管理 AD 中停用了網域帳戶。 | 請確定 AWS Secrets Manager 中提供的憑證是正確的，而且網域帳戶已在自我管理 AD 中啟用。 | 
| 錯誤 1355 / 0x54B | 指定的網域不存在或無法聯絡。 | 網域已關閉、指定的 DNS IP 集無法連線，或指定的 FQDN 無法連線。 | 檢閱 `—domain-dns-ips` 和 `—domain-fqdn` 參數以確定其正確無誤。檢閱 RDS for SQL Server 資料庫執行個體的網路組態，並確定可連線到您的自我管理 AD。如需詳細資訊，請參閱[設定您的網路連線能力](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md#USER_SQLServer_SelfManagedActiveDirectory.Requirements.NetworkConfig)。 | 
| 錯誤 1722 / 0x6BA | RPC 伺服器無法使用。 | 連線 AD 網域的 RPC 服務時發生問題。這可能是服務或網路問題。 | 驗證 RPC 服務是否正在您的網域控制器上執行，以及 TCP 連接埠 `135` 和 `49152-65535` 是否可在網域上，從 RDS for SQL Server 資料庫執行個體進行連線。 | 
|  錯誤 1727 / 0x6BF  |  遠端程序呼叫失敗且未執行。  |  網路連線問題或防火牆限制封鎖了與網域控制站的 RPC 通訊。  |  如果使用跨 VPC 網域加入，請驗證是否已使用 VPC 對等互連或 Transit Gateway 正確設定跨 VPC 通訊。請確定可在您的網域上從 RDS for SQL Server 資料庫執行個體連線到 TCP 高連接埠 `49152-65535`，包括任何可能的防火牆限制。  | 
| 錯誤 2224 / 0x8B0 | 使用者帳戶已存在。 | 嘗試新增至自我管理 AD 的電腦帳戶已存在。 | 在 RDS for SQL Server 資料庫執行個體上執行 `SELECT @@SERVERNAME`，來識別電腦帳戶，然後小心地將其從自我管理 AD 中移除。 | 
| 錯誤 2242 / 0x8c2 | 此使用者的密碼已過期。 | 透過 AWS Secrets Manager 指定的網域服務帳戶密碼已過期。 | 更新網域服務帳戶的密碼，此帳戶用來將 RDS for SQL Server 資料庫執行個體加入自我管理 AD。 | 

將您的資料庫執行個體加入自我管理 Active Directory 網域之後，您可能會收到與網域運作狀態相關的 RDS 事件。

```
Unhealthy domain state detected while attempt to verify or 
configure your Kerberos endpoint in your domain on 
node node_n. message
```

對於多可用區域執行個體，您可能會看到 node1 和 node2 的錯誤報告，這表示執行個體的 Kerberos 組態尚未做好容錯移轉的準備。如果發生容錯移轉，您在使用 Kerberos 時可能會遇到身分驗證問題。請解決組態問題，以確保 Kerberos 設定有效且是最新的。就多可用區域執行個體而言，只要所有網路和許可都已設定妥當，即可直接在新的主要主機上使用 Kerberos 身分驗證，無需任何動作。

對於單一可用區域執行個體，node1 是主節點。如果您的 Kerberos 身分驗證未如預期運作，請檢查執行個體事件並解決組態問題，以確保 Kerberos 設定有效且是最新的。

## 還原 SQL Server 資料庫執行個體，然後將其新增至自我管理 Active Directory 網域
<a name="USER_SQLServer_SelfManagedActiveDirectory.Restore"></a>

您可以還原資料庫快照或為 SQL Server 資料庫執行個體執行時間點復原 (PITR)，然後將其新增至自我管理 Active Directory 網域。一旦還原了資料庫執行個體，請使用[步驟 1：建立或修改 SQL Server 資料庫執行個體](USER_SQLServer_SelfManagedActiveDirectory.Joining.md#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateModify)中說明的程序來修改執行個體，以將資料庫執行個體新增至自我管理 AD 網域。

# 使用具有 RDS for SQL Server 的 AWS 受管 Active Directory
<a name="USER_SQLServerWinAuth"></a>

您可以使用 AWS Managed Microsoft AD 在使用者連線到 RDS for SQL Server 資料庫執行個體時，透過 Windows 身分驗證對使用者進行身分驗證。資料庫執行個體可與 搭配使用 AWS Directory Service for Microsoft Active Directory，也稱為 AWS Managed Microsoft AD，以啟用 Windows 身分驗證。當使用者向加入信任網域的 SQL Server 資料庫執行個體進行驗證時，身分驗證請求會轉送到您使用 Directory Service建立的網域目錄。

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

Amazon RDS 僅支援 AWS Managed Microsoft AD 使用 Windows 身分驗證。RDS 不支援使用 AD Connector。如需詳細資訊，請參閱下列內容：
+ [的應用程式相容性政策 AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_app_compatibility.html)
+ [AD Connector 應用程式相容性政策](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ad_connector_app_compatibility.html)

如需有關版本和區域可用性的詳細資訊，請參閱[透過 RDS for SQL Server 進行 Kerberos 身分驗證](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.KerberosAuthentication.html#Concepts.RDS_Fea_Regions_DB-eng.Feature.KerberosAuthentication.sq)。

## 設定 Windows 身分驗證概觀
<a name="USER_SQLServerWinAuth.overview"></a>

Amazon RDS 對 Windows 身分驗證使用混合模式。此方法表示*主要使用者* (用來建立您的 SQL Server 資料庫執行個體的名稱和密碼) 使用 SQL 身分驗證。因為主要使用者帳戶是具有特殊權限的登入資料，您應該限制對此帳戶的存取。

若要使用現場部署或自行託管的 Microsoft Active Directory 獲得 Windows 身分驗證，請建立樹系信任。信任可以是單向或雙向。如需使用 設定樹系信任的詳細資訊 Directory Service，請參閱《 *AWS Directory Service 管理指南*》中的[何時建立信任關係](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_setup_trust.html)。

若要為 SQL Server 資料庫執行個體設定 Windows 身分驗證，請執行下列步驟 (如 [為 SQL Server 資料庫執行個體設定 Windows 身分驗證](USER_SQLServerWinAuth.SettingUp.md) 所詳述)：

1.  AWS Managed Microsoft AD從 AWS 管理主控台 或 Directory Service API 使用 來建立 AWS Managed Microsoft AD 目錄。

1. 如果您使用 AWS CLI 或 Amazon RDS API 來建立 SQL Server 資料庫執行個體，請建立 AWS Identity and Access Management (IAM) 角色。此角色使用受管 IAM 政策 `AmazonRDSDirectoryServiceAccess`，而且 Amazon RDS 允許對目錄進行呼叫。如果您使用主控台來建立您的 SQL Server 資料庫執行個體， AWS 會為您建立 IAM 角色。

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

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

1. 如果您打算在不同 VPC 中尋找目錄和資料庫執行個體，請啟用跨 VPC 流量。

1. 使用 Amazon RDS 從主控台 AWS CLI或 Amazon RDS API 建立新的 SQL Server 資料庫執行個體。在建立請求中，您可以提供建立目錄時產生的網域識別符 ("`d-*`" identifier) 和您建立之角色的名稱。您也可以將現有 SQL Server 資料庫執行個體修改為使用 Windows 身分驗證，方法是設定資料庫執行個體的網域和 IAM 角色參數。

1. 如同對其他資料庫執行個體一般，使用 Amazon RDS 主要使用者登入資料來連接至 SQL Server 資料庫執行個體。由於資料庫執行個體已加入 AWS Managed Microsoft AD 網域，因此您可以從其網域中的 Active Directory 使用者和群組佈建 SQL Server 登入和使用者。(這些稱為 SQL Server "Windows" 登入。) 您可透過對這些 Windows 登入授予和撤銷的標準 SQL Server 許可來管理資料庫許可。

當您使用 Amazon RDS 主控台建立與網域連線的 RDS for SQL Server 資料庫執行個體時， AWS 會自動建立 `rds-directoryservice-access-role` IAM 角色。這是管理網域連線的執行個體不可或缺的角色，也是下列操作的必要角色：
+ 對網域連線的 SQL Server 執行個體進行組態變更
+ 管理 Active Directory 整合設定
+ 在加入網域的執行個體上執行維護操作

**重要**  
如果刪除了 `rds-directoryservice-access-role` IAM 角色，則無法透過 Amazon RDS 主控台或 API 變更網域連線的 SQL Server 執行個體。嘗試修改執行個體會導致錯誤訊息，指出：您沒有 iam:CreateRole 的許可。若要請求存取，請複製下列文字並將其傳送給您的 AWS 管理員。  
之所以發生此錯誤，是因為 Amazon RDS 必須重新建立角色以管理網域連線，但缺少必要的許可。此外，此錯誤不會記錄在 CloudTrail 中，這可能會使疑難排解更加困難。

如果意外刪除了 `rds-directoryservice-access-role`，您必須先獲得重新建立的 `iam:CreateRole` 許可，才能對連線網域的 SQL Server 執行個體進行任何變更。若要手動重新建立角色，請確定角色已連接 `AmazonRDSDirectoryServiceAccess` 受管政策，並且有適當的信任關係允許 RDS 服務承擔角色。

# 建立 Kerberos 身分驗證的端點
<a name="USER_SQLServerWinAuth.KerberosEndpoint"></a>

Kerberos 式身分驗證需要端點是客戶指定的主機名稱、句點，然後接著完整網域名稱 (FQDN)。例如，下列是您會對 Kerberos 式身分驗證使用的端點範例。在此範例中，SQL Server 資料庫執行個體主機名稱是 `ad-test`，而網域名稱是 `corp-ad.company.com`。

```
ad-test.corp-ad.company.com
```

如果您要確定您的連線使用的是 Kerberos，執行下列查詢：

```
1. SELECT net_transport, auth_scheme 
2.   FROM sys.dm_exec_connections 
3.  WHERE session_id = @@SPID;
```

# 為 SQL Server 資料庫執行個體設定 Windows 身分驗證
<a name="USER_SQLServerWinAuth.SettingUp"></a>

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

## 步驟 1：使用 建立目錄 AWS Directory Service for Microsoft Active Directory
<a name="USER_SQLServerWinAuth.SettingUp.CreateDirectory"></a>

Directory Service 在 AWS 雲端中建立全受管 Microsoft Active Directory。當您建立 AWS Managed Microsoft AD 目錄時， 會代表您 Directory Service 建立兩個網域控制站和網域名稱服務 (DNS) 伺服器。目錄伺服器是在兩個子網路中建立，而這兩個子網路是在 VPC 內的兩個不同可用區域中。此備援可協助確保即使失敗，仍能存取您的目錄。

 當您建立 AWS Managed Microsoft AD 目錄時， 會代表您 Directory Service 執行下列任務：
+ 設定 VPC 內的 Microsoft Active Directory。
+ 建立含有使用者名稱 Admin 與指定密碼的目錄管理員帳戶。您可以使用此帳戶來管理目錄。
+ 建立目錄控制器的安全群組。

當您啟動 時 AWS Directory Service for Microsoft Active Directory， 會 AWS 建立組織單位 (OU)，其中包含您目錄的所有物件。此 OU 有您在建立目錄時所輸入的 NetBIOS 名稱，位於根網域中。網域根由 擁有和管理 AWS。

 隨著您的 AWS Managed Microsoft AD 目錄建立的*管理*帳戶具有您的 OU 最常見管理活動的許可：
+ 建立更新或刪除使用者、群組和電腦。
+ 新增資源 (例如檔案或列印伺服器) 至您的網域，然後對您 OU 中的使用者和群組指派這些資源的許可。
+ 建立額外的 OU 和容器。
+ 委派授權。
+ 建立及連結群組政策。
+ 從 Active Directory 資源回收筒還原已刪除的物件。
+ 在 Active Directory Web 服務上執行 AD 和 DNS Windows PowerShell 模組。

管理員帳戶也有權執行下列全網域活動：
+ 管理 DNS 組態 (新增、移除或更新記錄、區域和轉寄站)。
+ 檢視 DNS 事件日誌。
+ 檢視安全事件日誌。

**使用 建立目錄 AWS Managed Microsoft AD**

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

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

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

1. 在 **Enter directory information (輸入目錄資訊)** 頁面上，提供下列資訊：  
**版本**  
 選擇滿足您需求的版本。  
**目錄 DNS 名稱**  
目錄的完全合格名稱，例如 `corp.example.com`。SQL Server 不支援超過 47 個字元的名稱。  
**目錄 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 (確認密碼)**  
重新輸入管理員密碼。

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

1. 在 **Choose VPC and subnets (選擇 VPC 和子網路)** 頁面上，提供下列資訊：  
**VPC**  
選擇目錄的 VPC。  
您可以在不同 VPC 中尋找目錄和資料庫執行個體，但如果您這麼做，請務必啟用跨 VPC 流量。如需更多詳細資訊，請參閱 [步驟 4：啟用目錄和資料庫執行個體之間的跨 VPC 流量](#USER_SQLServerWinAuth.SettingUp.VPC-Peering)。  
**子網路**  
選擇目錄伺服器的子網路。這兩個子網路必須位於不同的可用區域。

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)**。建立或修改 SQL Server 資料庫執行個體時需要此值。

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


## 步驟 2：建立供 Amazon RDS 使用的 IAM 角色
<a name="USER_SQLServerWinAuth.SettingUp.CreateIAMRole"></a>

如果您使用主控台來建立您的 SQL Server 資料庫執行個體，則可以略過此步驟。如果您使用 &CLI; 或 &RDS; API 來建立您的 SQL Server 資料庫執行個體，您必須建立使用受管 IAM 政策 `AmazonRDSDirectoryServiceAccess` 的 IAM 角色。此角色允許 Amazon RDS Directory Service 為您呼叫 。

如果您使用自訂政策來加入網域，而不是使用 AWS受管`AmazonRDSDirectoryServiceAccess`政策，請確定您允許 `ds:GetAuthorizedApplicationDetails`動作。由於 Directory Service API 的變更，此要求自 2019 年 7 月起生效。

以下 IAM 政策 (`AmazonRDSDirectoryServiceAccess`) 會提供對 Directory Service的存取。

**Example 提供 存取權的 IAM 政策 Directory Service**    
****  

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

建議您在資源型信任關係中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件內容金鑰，將服務的許可限定於特定資來源。這是防止[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)最有效的方式。

您可以同時使用全域條件內容索引鍵和包含帳號 ID 的 `aws:SourceArn` 值。在此情況下，當在相同陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 裡的帳户時，兩者必須使用同樣的帳户 ID。
+ 如果您想要跨服務存取單一資源，請使用 `aws:SourceArn`。
+ 如果您想要允許該帳戶中的任何資源與跨服務使用相關聯，請使用 `aws:SourceAccount`。

在信任關係中，請務必使用 `aws:SourceArn` 全域條件內容索引鍵，其中包含存取角色的資源之完整 Amazon 資源名稱 (ARN)。為使用 Windows Authentication，請務必包含資料庫執行個體，如下列範例所示。

**Example 與 Windows Authentication 全域條件內容索引鍵的信任關係**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "rds.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": [
                        "arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                    ]
                }
            }
        }
    ]
}
```

使用此 IAM 政策和信任關係建立 IAM 角色。如需建立 IAM 角色的詳細資訊，請參閱《IAM 使用者指南》**中的[建立客戶受管原則](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#create-managed-policy-console)。

## 步驟 3：建立和設定使用者和群組
<a name="USER_SQLServerWinAuth.SettingUp.CreateUsers"></a>

您可以使用 Active Directory 使用者和運算集區來建立使用者及群組。這個工具是 Active Directory Domain Services 和 Active Directory 輕量型目錄服務工具之一。使用者代表具有目錄存取權的個人或實體。群組非常適合對使用者群組授予或拒絕權限，而無需將這些權限逐一套用到各個使用者。

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

## 步驟 4：啟用目錄和資料庫執行個體之間的跨 VPC 流量
<a name="USER_SQLServerWinAuth.SettingUp.VPC-Peering"></a>

如果您打算在相同 VPC 中尋找目錄和資料庫執行個體，請略過本步驟，並移至[步驟 5：建立或修改 SQL Server 資料庫執行個體](#USER_SQLServerWinAuth.SettingUp.CreateModify)。

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

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

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

## 步驟 5：建立或修改 SQL Server 資料庫執行個體
<a name="USER_SQLServerWinAuth.SettingUp.CreateModify"></a>

建立或修改要搭配您目錄使用的 SQL Server 資料庫執行個體。您可以使用主控台、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 操作，建立新的 SQL Server 資料庫執行個體。

  如需說明，請參閱「[建立 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 操作，修改現有的 SQL Server 資料庫執行個體。

  如需說明，請參閱「[修改 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 操作，從資料庫快照還原 SQL Server 資料庫執行個體。

  如需說明，請參閱「[還原至資料庫執行個體](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 操作，將 SQL Server 資料庫執行個體還原至某個時間點。

  如需說明，請參閱「[將 Amazon RDS 的資料庫執行個體還原至指定時間](USER_PIT.md)」。

 Windows 身分驗證只支援 VPC 中的 Server 資料庫執行個體。

 若要讓資料庫執行個體使用您建立的網域目錄，需要下列項目：
+  對於 **Directory (目錄)**，您必須選擇在建立目錄時產生的網域識別碼 (`d-ID`)。
+  確定 VPC 安全群組具有可讓資料庫執行個體與目錄通訊的輸出規則。

![\[Microsoft SQL Server Windows 身分驗證目錄\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/WinAuth1.png)


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

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

針對 Linux、macOS 或 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 身分驗證，請在進行變更後重新啟動資料庫執行個體。

## 步驟 6：建立 Windows 身分驗證 SQL Server 登入
<a name="USER_SQLServerWinAuth.CreateLogins"></a>

如同對其他資料庫執行個體一般，使用 Amazon RDS 主要使用者登入資料來連接至 SQL Server 資料庫執行個體。由於資料庫執行個體已加入 AWS Managed Microsoft AD 網域，因此您可以佈建 SQL Server 登入和使用者。您可以從網域中的 Active Directory 使用者和群組執行這項操作。您可透過對這些 Windows 登入授予和撤銷的標準 SQL Server 許可來管理資料庫許可。

若要讓 Active Directory 使用者向 SQL Server 進行身分驗證，必須存在使用者或使用者為其成員之群組的 SQL Server Windows 登入。精細定義的存取控制是透過授予和撤銷這些 SQL Server 登入的許可來處理。沒有 SQL Server 登入或屬於具有此類登入的群組的使用者無法存取 SQL Server 資料庫執行個體。

需要 ALTER ANY LOGIN 許可，才能建立 Active Directory SQL Server 登入。如果您尚未使用此許可建立任何登入，請使用 SQL Server 身分驗證，以資料庫執行個體的主要使用者身分連線。

執行資料定義語言 (DDL) 命令來為 Active Directory 使用者或群組建立 SQL Server 登入，如下列範例。

**注意**  
使用 Windows 2000 前版的登入名稱，以格式 `domainName\login_name` 來指定使用者和群組。您無法使用格式為 *`login_name`*`@`*`DomainName`* 的使用者原則名稱 (UPN)。  
您只能使用 T-SQL 陳述式在 RDS for SQL Server 執行個體上建立 Windows 身分驗證登入。您無法使用 SQL Server Management Studio 建立 Windows 身分驗證登入。

```
USE [master]
GO
CREATE LOGIN [mydomain\myuser] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];
GO
```

如需詳細資訊，請參閱 Microsoft 開發人員網路文件中的[ 建立登入 (Transact-SQL)](https://msdn.microsoft.com/en-us/library/ms189751.aspx)。

來自您網域的使用者 (人員和應用程式兩者)，現在可以使用 Windows 身分驗證從加入網域的用戶端機器連接至 RDS for SQL Server 執行個體。

# 管理網域中的資料庫執行個體
<a name="USER_SQLServerWinAuth.Managing"></a>

 您可以使用 主控台 AWS CLI或 Amazon RDS API 來管理資料庫執行個體及其與網域的關係。例如，您可以將資料庫執行個體移入、移出或移至網域之間。

 例如，使用 Amazon RDS API，您可以執行下列動作：
+  若要對失敗的成員資格重新嘗試加入網域，請使用 [ModifyDBInstance API](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作，並指定目前成員資格的目錄 ID。
+  如要更新成員資格的 IAM 角色名稱，請使用 `ModifyDBInstance` API 操作並指定目前成員資格的目錄 ID，以及新的 IAM 角色。
+  若要從網域移除資料庫執行個體，請使用 `ModifyDBInstance` API 操作，並指定 `none` 做為網域參數。
+  如要在網域之間移動資料庫執行個體，請使用 `ModifyDBInstance` API 操作，並指定新網域的網域識別符做為網域參數。
+  若要列出每個資料庫執行個體的成員資格，請使用 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/DescribeDBInstances.html) API 操作。

## 了解網域成員資格
<a name="USER_SQLServerWinAuth.Understanding"></a>

 在您建立或修改資料庫執行個體之後，執行個體會成為網域的成員。 AWS 主控台會指出資料庫執行個體的網域成員資格狀態。資料庫執行個體的狀態可以是下列其中一個：
+  **已加入** – 執行個體是網域的成員。
+  **加入中** – 執行個體正處於成為網域成員的程序中。
+  **加入待定** – 執行個體成員資格待定。
+  **pending-maintenance-join** – AWS 會在下一個排定的維護時段嘗試讓執行個體成為網域的成員。
+  **移除待定** – 從網域移除執行個體待定。
+  **pending-maintenance-removal** – AWS 將在下一個排定的維護時段嘗試從網域移除執行個體。
+  **失敗** – 組態問題讓執行個體無法加入網域。請在重新發出執行個體修改命令之前檢查並修正您的組態。
+  **移除中** – 正在從網域移除執行個體。

因為網路連線問題或 IAM 角色不正確，成為網域成員的請求可能失敗。例如，您可以建立一個資料庫執行個體或修改現有執行個體，並嘗試讓資料庫執行個體失敗，以便成為網域的成員。在此情況下，請重新發出命令以建立或修改資料庫執行個體，或修改新建立的執行個體以加入網域。

# 使用 Windows 身分驗證連線至 SQL Server
<a name="USER_SQLServerWinAuth.Connecting"></a>

若要使用 Windows 身分驗證連線至 SQL Server，您必須以網域使用者的身分登入到加入網域的電腦。啟動 SQL Server Management Studio 之後，選擇 **Windows 身分驗證**做為身分驗證類型，如下所示。

![\[使用 Windows 身分驗證連線至 SQL Server\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/WinAuth4.png)


## 還原 SQL Server 資料庫執行個體，並將其新增至網域
<a name="USER_SQLServerWinAuth.Restore"></a>

您可以還原資料庫快照或為 SQL Server 資料庫執行個體執行 point-in-time 恢復 (PITR)，然後將其新增至網域。一旦還原資料庫執行個體，請使用 [步驟 5：建立或修改 SQL Server 資料庫執行個體](USER_SQLServerWinAuth.SettingUp.md#USER_SQLServerWinAuth.SettingUp.CreateModify) 中的說明程序來修改執行個體，以將資料庫執行個體新增至網域。