

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

# 使用 Microsoft Active Directory 搭配 RDS Custom for SQL Server
<a name="custom-sqlserver-WinAuth"></a>

RDS Custom for SQL Server 允許將您的執行個體加入自我管理 Active Directory (AD) 或 AWS Managed Microsoft AD。無論您的 AD 託管位置為何，例如內部部署資料中心、Amazon EC2 或任何其他雲端服務提供者。

針對使用者和服務的身分驗證，您可以在 RDS Custom for SQL Server 資料庫執行個體上使用 NTLM 或 Kerberos 身分驗證，而無需使用中繼網域和樹系信任。當使用者嘗試在 RDS Custom for SQL Server 資料庫執行個體上使用自我加入的 Active Directory 進行身分驗證時，身分驗證請求會轉送到自我管理 AD 或您指定的 AWS Managed Microsoft AD。

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

**Topics**
+ [區域和版本可用性](#custom-sqlserver-WinAuth.Regions)
+ [設定自我管理或內部部署 AD](custom-sqlserver-WinAuth.config-Self-Managed.md)
+ [使用 設定 Microsoft Active Directory Directory Service](custom-sqlserver-WinAuth.config-ADS.md)
+ [網路組態連接埠規則](custom-sqlserver-WinAuth.NWConfigPorts.md)
+ [網路驗證](custom-sqlserver-WinAuth.NWValidation.md)
+ [為 RDS Custom for SQL Server 執行個體設定 Windows 身分驗證](custom-sqlserver-WinAuth.settingUp.md)
+ [管理網域中的資料庫執行個體](custom-sqlserver-WinAuth.ManagingDBI.md)
+ [了解網域成員資格](custom-sqlserver-WinAuth.Understanding.md)
+ [故障診斷 Active Directory](custom-sqlserver-WinAuth.Troubleshoot.md)

## 區域和版本可用性
<a name="custom-sqlserver-WinAuth.Regions"></a>

RDS Custom for SQL Server 支援自我管理 AD 和 AWS Managed Microsoft AD，並在支援 RDS Custom for SQL Server 的所有區域中使用 NTLM 或 Kerberos。如需更多詳細資訊，請參閱 [支援的 RDS Custom 區域和資料庫引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.md)。

# 設定自我管理或內部部署 AD
<a name="custom-sqlserver-WinAuth.config-Self-Managed"></a>

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

## 設定您的網路連線能力
<a name="custom-sqlserver-WinAuth.config-Self-Managed.network"></a>

以下列方式設定自我管理或內部部署 AD 網路連線：
+ 設定執行 RDS Custom for SQL Server 執行個體的 Amazon VPC 與您 AD 之間的連線。使用 Direct Connect Site-to-Site VPN AWS Transit Gateway、 和 VPC 對等互連。
+ 允許 RDS Custom for SQL Server 安全群組和網路 ACL 在連接埠上的流量傳送到自我管理或內部部署 AD。如需詳細資訊，請參閱[網路組態連接埠規則](custom-sqlserver-WinAuth.NWConfigPorts.md)。  
![\[Microsoft SQL Server Windows 身分驗證目錄\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/custom-sqs-SM-NC.png)

## 設定 DNS 解析
<a name="custom-sqlserver-WinAuth.config-Self-Managed.DNS"></a>

設定下列需求，以使用自我管理或內部部署 AD 設定 DNS 解析：
+ 在 VPC 中設定 DNS 解析，以解析自我託管 Active Directory 的完整網域名稱 (FQDN)。FQDN 的範例為 `corp.example.local`。若要設定 DNS 解析，請將 VPC DNS 解析程式設定為使用 Amazon Route 53 傳出端點和解析程式規則轉送特定網域的查詢。如需詳細資訊，請參閱[設定 Route 53 Resolver 傳出端點以解析 DNS 記錄](https://repost.aws/knowledge-center/route53-resolve-with-outbound-endpoint)。
+ 針對同時利用 VPC 和內部部署資源的工作負載，則必須解析內部部署託管的 DNS 記錄。內部部署資源可能需要解析託管在其中的名稱 AWS。

  若要建立混合雲端設定，請使用解析程式端點和條件式轉送機制，來解析內部部署資源和與自訂 VPC 之間的 DNS 查詢。如需詳細資訊，請參閱《Amazon Route 53 開發人員指南》**中的[在 VPC 和網路之間解析 DNS 查詢](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-overview-DSN-queries-to-vpc.html)。

**重要**  
修改 RDS Custom for SQL Server 上網路介面的 DNS 解析程式設定會導致已啟用 DNS 的 VPC 端點無法再正常運作。私有子網路內沒有網際網路存取的執行個體需要啟用 DNS 的 VPC 端點。

# 使用 設定 Microsoft Active Directory Directory Service
<a name="custom-sqlserver-WinAuth.config-ADS"></a>

AWS Managed Microsoft AD 在 中建立全受管 Microsoft Active Directory AWS ，該目錄採用 Windows Server 2019 技術，並在 2012 R2 樹系和網域功能層級運作。 會在 Amazon VPC 的不同子網路中 Directory Service 建立網域控制器，讓您的目錄即使在發生故障時也能高度使用。

若要使用 建立目錄 AWS Managed Microsoft AD，請參閱《 *AWS Directory Service 管理指南*》中的 [入門 AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started.html)。

## 設定您的網路連線能力
<a name="custom-sqlserver-WinAuth.config-ADS.network"></a>

### 啟用目錄和資料庫執行個體之間的跨 VPC 流量
<a name="custom-sqlserver-WinAuth.config-ADS.network.x-vpc"></a>

若要在相同 VPC 中尋找目錄和資料庫執行個體，請略過此步驟，並移至 [網路組態連接埠規則](custom-sqlserver-WinAuth.NWConfigPorts.md) 中的下一個步驟。

若要在不同 VPCs 中尋找目錄和資料庫執行個體，請使用 VPC 對等互連 或 設定跨 VPC 流量 AWS Transit Gateway。如需使用 VPC 對等互連的詳細資訊，請參閱《*Amazon* [VPC 對等互連指南》中的什麼是 VPC 對等互連？](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)以及《*Amazon VPC 傳輸閘道*》中的[什麼是 AWS Transit Gateway？](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)。

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

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

1. 允許資料庫執行個體的安全群組可以從目錄的安全群組接收傳入流量。如需詳細資訊，請參閱[網路組態連接埠規則](custom-sqlserver-WinAuth.NWConfigPorts.md)。

1. 網路存取控制清單 (ACL) 不得封鎖流量。

如果不同的 AWS 帳戶 擁有該目錄，您必須共用該目錄。若要與 共用 RDS Custom for SQL Server 執行個體 AWS 帳戶 所在的目錄，請遵循《 *AWS 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，將資料庫執行個體加入網域。

## 設定 DNS 解析
<a name="custom-sqlserver-WinAuth.config-ADS.DNS"></a>

當您使用 建立目錄時 AWS Managed Microsoft AD， 會 Directory Service 建立兩個網域控制站，並代表您新增 DNS 服務。

如果您有現有 AWS Managed Microsoft AD 或計劃在 RDS Custom for SQL Server 資料庫執行個體以外的 VPC 中啟動，請設定 VPC DNS 解析程式以轉送具有 Route 53 傳出和解析程式規則之特定網域的查詢，請參閱[設定 Route 53 Resolver 傳出端點以解析 DNS 記錄](https://repost.aws/knowledge-center/route53-resolve-with-outbound-endpoint)。

# 網路組態連接埠規則
<a name="custom-sqlserver-WinAuth.NWConfigPorts"></a>

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

  下表識別每個連接埠的角色。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/custom-sqlserver-WinAuth.NWConfigPorts.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 Custom for SQL Server 資料庫執行個體的傳出流量。請確定也會在適用於每個 AD 網域控制器、DNS 伺服器和 RDS Custom for SQL Server 資料庫執行個體的防火牆上鏡像這些流量規則。  
雖然 VPC 安全群組只需要以網路流量起始的方向開啟連接埠，但大多數 Windows 防火牆和 VPC 網路 ACL 都需要雙向開啟連接埠。

# 網路驗證
<a name="custom-sqlserver-WinAuth.NWValidation"></a>

將 RDS Custom 執行個體加入自我管理或 AWS Managed Microsoft AD 之前，請從您計劃啟動 RDS Custom for SQL Server 執行個體的相同 VPC 中的 EC2 執行個體檢查下列項目。
+ 檢查您是否能夠將完整網域名稱 (FQDN) 解析為網域控制站 IP。

  ```
  nslookup corp.example.com
  ```

  命令必須傳回類似的輸出：

  ```
  Server:  ip-10-0-0-2.us-west-2.compute.internal
  Address:  25.0.0.2
  
  Non-authoritative answer:
  Name:    corp.example.com
  Addresses:  40.0.9.25 (DC1 IP)
              40.0.50.123 (DC2 IP)
  ```
+ 解決您啟動 RDS Custom 執行個體所在 VPC 中 EC2 執行個體的 AWS 服務：

  ```
  $region='input-your-aws-region'
  $domainFQDN='input-your-domainFQDN'
   
  function Test-DomainPorts {
      param (
          [string]$Domain,
          [array]$Ports
      )
   
      foreach ($portInfo in $Ports) {
          try {
              $conn = New-Object System.Net.Sockets.TcpClient
              $connectionResult = $conn.BeginConnect($Domain, $portInfo.Port, $null, $null)
              $success = $connectionResult.AsyncWaitHandle.WaitOne(1000) # 1 second timeout
              if ($success) {
                  $conn.EndConnect($connectionResult)
                  $result = $true
              } else {
                  $result = $false
              }
          }
          catch {
              $result = $false
          }
          finally {
              if ($null -ne $conn) {
                  $conn.Close()
              }
          }
          Write-Host "$($portInfo.Description) port open: $result"
      }
  }
   
  # Check if ports can be reached 
  $ports = @(
      @{Port = 53;   Description = "DNS"},
      @{Port = 88;   Description = "Kerberos"},
      @{Port = 389;  Description = "LDAP"},
      @{Port = 445;  Description = "SMB"},
      @{Port = 5985; Description = "WinRM"},
      @{Port = 636;  Description = "LDAPS"},
      @{Port = 3268; Description = "Global Catalog"},
      @{Port = 3269; Description = "Global Catalog over SSL"},
      @{Port = 9389; Description = "AD DS"}
  )
   
  function Test-DomainReachability {
      param (
          [string]$DomainName
      )
      
      try {
          $dnsResults = Resolve-DnsName -Name $DomainName -ErrorAction Stop
          Write-Host "Domain $DomainName is successfully resolving to following IP addresses: $($dnsResults.IpAddress)"
          Write-Host ""
          return $true
      } 
      catch {
          Write-Host ""
          Write-Host "Error Message: $($_.Exception.Message)"
          Write-Host "Domain $DomainName reachability check failed, please Configure DNS resolution"
          return $false
      }
  }
   
  $domain = (Get-WmiObject Win32_ComputerSystem).Domain
  if ($domain -eq 'WORKGROUP') {
      Write-Host ""    
      Write-Host "Host $env:computername is still part of WORKGROUP and not part of any domain"
      }
  else {
      Write-Host ""
      Write-Host "Host $env:computername is joined to $domain domain"
      Write-Host ""
      }
   
   
  $isReachable = Test-DomainReachability -DomainName $domainFQDN  
  if ($isReachable) {
      write-Host "Checking if domain $domainFQDN is reachable on required ports  "
      Test-DomainPorts -Domain $domainFQDN -Ports $ports
  }
  else {
      Write-Host "Port check skipped. Domain not reachable"
  }   
   
   
   
  # Get network adapter configuration
  $networkConfig = Get-WmiObject Win32_NetworkAdapterConfiguration | 
                   Where-Object { $_.IPEnabled -eq $true } |
                   Select-Object -First 1
   
  # Check DNS server settings
  $dnsServers = $networkConfig.DNSServerSearchOrder
   
  if ($dnsServers) {
      Write-Host "`nDNS Server settings:"
      foreach ($server in $dnsServers) {
          Write-Host "  - $server"
      }
  } else {
      Write-Host "`nNo DNS servers configured or unable to retrieve DNS server information."
  }
   
  write-host ""
   
  # Checks reachability to dependent services
  $services = "s3", "ec2", "secretsmanager", "logs", "events", "monitoring", "ssm", "ec2messages", "ssmmessages"
   
  function Get-TcpConnectionAsync {
      param (
          $ServicePrefix,
          $region
      )
      $endpoint = "${ServicePrefix}.${region}.amazonaws.com"
      $tcp = New-Object Net.Sockets.TcpClient
      $result = $false
   
      try {
          $connectTask = $tcp.ConnectAsync($endpoint, 443)
          $timedOut = $connectTask.Wait(3000)
          $result = $tcp.Connected
      } 
      catch {
          $result = $false
      } 
      return $result
  }
   
  foreach ($service in $services) {
      $validationResult = Get-TcpConnectionAsync -ServicePrefix $service -Region $region
      Write-Host "Reachability to $service is $validationResult"
  }
  ```

  `TcpTestSucceeded` 值針對 `s3`、`ec2`、`secretsmanager`、`logs`、`events`、`monitoring`、`ssm`、`ec2messages` 和 `ssmmessages` 必須傳回 `True`。

# 為 RDS Custom for SQL Server 執行個體設定 Windows 身分驗證
<a name="custom-sqlserver-WinAuth.settingUp"></a>

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

Active Directory 層級群組政策可能與 AWS 自動化和許可衝突。我們建議選取僅適用於您為 RDS Custom for SQL Server 建立之 OU 的 GPO。
+ 若要在自我管理或內部部署 AD 中建立 OU 和 AD 網域使用者，您可以網域管理員身分連線網域控制器。
+ 若要在 Directory Service 目錄中建立使用者和群組，您必須連線到管理執行個體，還必須以具有建立使用者和群組之權限的使用者身分登入。如需詳細資訊，請參閱《AWS Directory Service 管理指南》**中的 [AWS Managed Microsoft AD 中的使用者和群組管理](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups.html)。
+ 若要從 Amazon EC2 Windows Server 執行個體中管理您的 Active Directory，您必須在 EC2 執行個體上安裝 Active Directory 網域服務和 Active Directory 輕量型目錄服務工具。如需詳細資訊，請參閱《AWS Directory Service 管理指南》**中的[安裝 AWS Managed Microsoft AD 的 Active Directory 管理工具](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_install_ad_tools.html)。
+ 我們建議您在單獨的 EC2 執行個體上安裝這些工具以進行管理，而不是在 RDS Custom for SQL Server 資料庫執行個體上安裝這些工具，以便於管理。

以下是 AD 網域服務帳戶的需求：
+ 您在 AD 網域中必須具有一個服務帳戶，其具有將電腦加入網域的委派許可。網域服務帳戶是 AD 中的使用者帳戶，其已獲委派執行特定任務的許可。
+ 在您正要將 RDS Custom for SQL Server 執行個體加入其中的組織單位中，必須向網域服務帳戶委派下列許可：
  + 已驗證能夠寫入 DNS 主機名稱
  + 已驗證能夠寫入服務主體名稱
  + 建立和刪除電腦物件
+ 對於自我管理和內部部署 AD，網域服務帳戶必須是「AWS 委派網域名稱系統管理員」群組的成員。
+ 對於 AWS Managed Microsoft AD，網域服務帳戶應該是「DnsAdmins」群組的成員。

這些是將電腦物件加入自我管理 AD 和 AWS Managed Microsoft AD 所需的最低許可集。如需詳細資訊，請參閱 Microsoft Windows Server 文件中的[錯誤：當被委派控制的非管理員使用者嘗試將電腦加入網域控制站時，存取遭拒](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/access-denied-when-joining-computers)。

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

**Topics**
+ [步驟 1：在您的 AD 中建立組織單位](#custom-sqlserver-WinAuth.settingUp.CreateOU)
+ [步驟 2：建立 AD 網域使用者](#custom-sqlserver-WinAuth.settingUp.ADuser)
+ [步驟 3：將控制權委派給自我管理或 AWS Managed Microsoft AD 中的 AD 使用者](#custom-sqlserver-WinAuth.settingUp.Delegate)
+ [步驟 4：建立私密](#custom-sqlserver-WinAuth.settingUp.ASM)
+ [步驟 5：建立或修改 RDS Custom for SQL Server 資料庫執行個體](#custom-sqlserver-WinAuth.settingUp.CreateDBInstance)
+ [步驟 6：建立 Windows 身分驗證 SQL Server 登入](#custom-sqlserver-WinAuth.settingUp.CreateLogins)
+ [步驟 7：使用 Kerberos 或 NTLM 身分驗證](#custom-sqlserver-WinAuth.settingUp.KerbNTLM)

## 步驟 1：在您的 AD 中建立組織單位
<a name="custom-sqlserver-WinAuth.settingUp.CreateOU"></a>

使用下列步驟在您的 AD 中建立組織單位：

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

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

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

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

1. 輸入 OU 的名稱。

   啟用**保護容器免於意外刪除**。

1. 選擇**確定**。您的新 OU 會出現在您的網域下方。

對於 AWS Managed Microsoft AD，此 OU 的名稱的基礎，是您建立目錄時所輸入的 NetBIOS 名稱。此 OU 屬於 AWS 且包含您所有 AWS 相關的目錄物件，您對此擁有完全控制權。此 OU 下預設存在兩個子 OU：**電腦和使用者**。RDS Custom 建立的新 OU 是以 NetBIOS 為基礎的 OU 子系。

## 步驟 2：建立 AD 網域使用者
<a name="custom-sqlserver-WinAuth.settingUp.ADuser"></a>

網域使用者憑證會用於 Secrets Manager 中的秘密。

**在您的 AD 中建立 AD 網域使用者**

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

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

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

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

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

## 步驟 3：將控制權委派給自我管理或 AWS Managed Microsoft AD 中的 AD 使用者
<a name="custom-sqlserver-WinAuth.settingUp.Delegate"></a>

**將控制權委派給網域中的 AD 網域使用者**

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

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

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

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

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

1. 在**使用者或群組**區段中，確認已新增 AD 使用者，然後按**下一步**。

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

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

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

   選取**電腦物件**

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

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

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

   保持選取**一般**。

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

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

1. 在**完成委派控制權精靈**中，請確認您的設定，然後按一下**完成**。

## 步驟 4：建立私密
<a name="custom-sqlserver-WinAuth.settingUp.ASM"></a>

在相同的 AWS 帳戶 帳戶和區域中建立秘密，其中包含要納入自我管理 Active Directory 的 RDS Custom for SQL Server 資料庫執行個體。儲存在 [步驟 2：建立 AD 網域使用者](#custom-sqlserver-WinAuth.settingUp.ADuser) 中建立的 AD 網域使用者的憑證。

------
#### [ Console ]
+ 在 AWS Secrets Manager 中，選擇**儲存新機密**。
+ 針對**機密類型**，選擇**其他類型的機密**。
+ 對於**金鑰/值對**，新增兩個金鑰：
  + 第一個金鑰，`SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME` 然後針對值輸入 AD 使用者的名稱 (不含網域字首)。
  + 針對第二個金鑰，輸入 `SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD` 並輸入網域上 AD 使用者的密碼。
+ 針對**加密金鑰**，輸入您用來建立 RDS Custom for SQL Server 執行個體的相同 AWS KMS 金鑰。
+ 針對**秘密名稱**，選擇以 `do-not-delete-rds-custom-` 開頭的秘密名稱，以允許執行個體設定檔存取此秘密。如果您想要為秘密選擇不同的名稱，請更新 `RDSCustomInstanceProfile` 以存取**秘密名稱**。
+ (選用) 對於**描述**，輸入秘密名稱的描述。
+ 新增標籤 `Key="AWSRDSCustom",Value="custom-sqlserver"` 
+ 按一下**儲存**，然後按**下一步**。
+ 對於**設定輪換設定**，保留預設值並選擇**下一步**。
+ 檢閱秘密的設定，然後按一下**存放**。
+ 選擇新的秘密，然後複製**秘密 ARN** 的值。我們會在下一個步驟中使用此項目來設定您的 Active Directory。

------
#### [ CLI ]

在 CLI 中執行以下命令來建立秘密：

```
# Linux based
aws secretsmanager create-secret \
--name do-not-delete-rds-custom-DomainUserCredentails \ 
--description "Active directory user credentials for managing RDS Custom" \ 
--secret-string "{\"SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME\":\"tester\",\"SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD\":\"xxxxxxxx\"}" \
--kms-key-id <RDSCustomKMSKey> \
--tags Key="AWSRDSCustom",Value="custom-sqlserver"

# Windows based
aws secretsmanager create-secret ^
--name do-not-delete-rds-custom-DomainUserCredentails ^ 
--description "Active directory user credentials for managing RDS Custom" ^
--secret-string "{\"SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME\":\"tester\",\"SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD\":\"xxxxxxxx\"}" ^
--kms-key-id <RDSCustomKMSKey> ^
--tags Key="AWSRDSCustom",Value="custom-sqlserver"
```

------

## 步驟 5：建立或修改 RDS Custom for SQL Server 資料庫執行個體
<a name="custom-sqlserver-WinAuth.settingUp.CreateDBInstance"></a>

建立或修改要搭配您目錄使用的 RDS Custom for 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)」。

**注意**  
如果您的 RDS Custom for SQL Server 執行個體已手動加入 AD，請檢查 [網路組態連接埠規則](custom-sqlserver-WinAuth.NWConfigPorts.md)、[網路驗證](custom-sqlserver-WinAuth.NWValidation.md) 的設定，並完成步驟 1 到步驟 4。將 `--domain-fqdn`、`--domain-ou` 和 `--domain-auth-secret-arn` 更新為您的 AD，以便向 RDS Custom 註冊網域聯結憑證和組態，以監控、註冊 CNAME，並採取復原動作。

使用 AWS CLI 時，需要下列參數，資料庫執行個體才能使用您建立的目錄：
+ 對於 `--domain-fqdn` 參數，使用自我管理 AD 的完整網域名稱。
+ 對於 `--domain-ou` 參數，使用您在自我管理 AD 中建立的 OU。
+ 對於 `--domain-auth-secret-arn` 參數，使用您所建立之**秘密 ARN** 的值。

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

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

在 Linux、macOS 或 Unix 中：

```
aws rds create-db-instance  \
--engine custom-sqlserver-se \
--engine-version 15.00.4312.2.v1 \
--db-instance-identifier my-custom-instance \
--db-instance-class db.m5.large \
--allocated-storage 100 --storage-type io1 --iops 1000 \
--master-username my-master-username \
--master-user-password my-master-password \
--kms-key-id  my-RDSCustom-key-id \
--custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance  \
--domain-fqdn "corp.example.com" \
--domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" \
--domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" \
--db-subnet-group-name my-DB-subnet-grp \
--vpc-security-group-ids  my-securitygroup-id \
--no-publicly-accessible \
--backup-retention-period 3 \
--port 8200 \
--region us-west-2 \
--no-multi-az
```

在 Windows 中：

```
aws rds create-db-instance  ^
--engine custom-sqlserver-se ^
--engine-version 15.00.4312.2.v1 ^
--db-instance-identifier my-custom-instance ^
--db-instance-class db.m5.large ^
--allocated-storage 100 --storage-type io1 --iops 1000 ^
--master-usernamemy-master-username ^
--master-user-password my-master-password ^
--kms-key-id  my-RDSCustom-key-id ^
--custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance  ^
--domain-fqdn "corp.example.com" ^
--domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" ^
--domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" ^
--db-subnet-group-name my-DB-subnet-grp ^
--vpc-security-group-ids  my-securitygroup-id ^
--no-publicly-accessible ^
--backup-retention-period 3 ^
--port 8200 ^
--region us-west-2 ^
--no-multi-az
```

**重要**  
如果您 AWS Managed Microsoft AD 的 NetBIOS 是 **corpexample**，則會顯示為 OU 本身。任何先前建立的新 OU 都會顯示為巢狀 OU。針對 AWS Managed Microsoft AD，將 `--domain-ou` 設定為 `"OU=RDSCustomOU,OU=corpexample,DC=corp,DC=example,DC=com"`。

下列命令會修改現有的 RDS Custom for SQL Server 資料庫執行個體，以使用 Active Directory 網域。

在 Linux、macOS 或 Unix 中：

```
aws rds modify-db-instance \
    --db-instance-identifier my-custom-instance \
    --domain-fqdn "corp.example.com" \
    --domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" \
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" \
```

在 Windows 中：

```
aws rds modify-db-instance ^
    --db-instance-identifier my-custom-instance ^
    --domain-fqdn "corp.example.com" ^
    --domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" ^
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" ^
```

下列 CLI 命令會從 Active Directory 網域中移除 RDS Custom for SQL Server 資料庫執行個體。

在 Linux、macOS 或 Unix 中：

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

在 Windows 中：

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

使用主控台建立或修改執行個體時，請按一下**啟用 Microsoft SQL Server Windows 身分驗證**，以查看下列選項。

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


您有責任確保您的網域 FQDN 正在解析為網域控制器 IP 位址。如果網域控制器 IP 未解析，網域聯結作業就會失敗，但 RDS Custom for SQL Server 執行個體建立會成功。如需故障診斷資訊，請參閱[故障診斷 Active Directory](custom-sqlserver-WinAuth.Troubleshoot.md)。

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

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

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

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

您可以執行如下的資料定義語言 (DDL) 命令，為 AD 使用者或群組建立 SQL Server 登入。

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

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

## 步驟 7：使用 Kerberos 或 NTLM 身分驗證
<a name="custom-sqlserver-WinAuth.settingUp.KerbNTLM"></a>

### 使用 RDS 端點的 NTLM 身分驗證
<a name="custom-sqlserver-WinAuth.settingUp.KerbNTLM.NTLM"></a>

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

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

### Kerberos 身分驗證
<a name="custom-sqlserver-WinAuth.settingUp.KerbNTLM.Kerb"></a>

RDS Custom for SQL Server 的 Kerberos 型身分驗證需要提供特定服務主體名稱 (SPN) 的連線。不過，容錯移轉事件之後，應用程式可能不知道新的 SPN。為了解決此問題，RDS Custom 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="custom-sqlserver-WinAuth.settingUp.KerbNTLM.CNAME"></a>

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

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

如果您要連接 RDS Custom EC2 執行個體，並嘗試使用 CNAME 在本機連線至資料庫，則您的連線將使用 NTLM 身分驗證，而不是 Kerberos。

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

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

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

# 管理網域中的資料庫執行個體
<a name="custom-sqlserver-WinAuth.ManagingDBI"></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 操作。

## 還原 RDS Custom for SQL Server 資料庫執行個體，然後將其新增至 Active Directory 網域
<a name="custom-sqlserver-WinAuth.ManagingDBI.Restoring"></a>

您可以還原資料庫快照或為 SQL Server 資料庫執行個體執行時間點復原 (PITR)，然後將其新增至 Active Directory 網域。一旦還原資料庫執行個體，請使用 [步驟 5：建立或修改 RDS Custom for SQL Server 資料庫執行個體](custom-sqlserver-WinAuth.settingUp.md#custom-sqlserver-WinAuth.settingUp.CreateDBInstance) 中的說明程序來修改執行個體，以將資料庫執行個體新增至 AD 網域。

# 了解網域成員資格
<a name="custom-sqlserver-WinAuth.Understanding"></a>

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

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

# 故障診斷 Active Directory
<a name="custom-sqlserver-WinAuth.Troubleshoot"></a>

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


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