針對 Oracle 資料庫執行個體設定 Kerberos 身分驗證 - Amazon Relational Database Service

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

針對 Oracle 資料庫執行個體設定 Kerberos 身分驗證

使用 AWS Directory Service for Microsoft Active Directory(也稱為 AWS Managed Microsoft AD) 為 Oracle 資料庫執行個體設定 Kerberos 驗證。若要設定 Kerberos 身分驗證,請完成下列步驟:

注意

在安裝期間,RDS 會建立名稱為 managed_service_user@example.com 且擁有 CREATE SESSION 權限的 Oracle 資料庫使用者,其中 example.com 是您的網域名稱。此使用者對應 Directory Service 在受管 Active Directory 內建立的使用者。RDS 會定期使用 Directory Service 提供的登入資料登入 Oracle 資料庫。之後,RDS 會立即銷毀票證快取。

步驟 1:使用 AWS Managed Microsoft AD

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

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

  • 在 VPC 內設定 Active Directory。

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

    注意

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

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

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

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

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

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

  • 建立額外的 OU 和容器

  • 委派授權

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

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

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

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

  • 檢視 DNS 事件日誌

  • 檢視安全事件日誌

若要建立目錄 AWS Management Console,請使用 AWS CLI、或 AWS Directory Service API。請務必開啟目錄安全性群組上的相關輸出連接埠,以便目錄可以與 Oracle 資料庫執行個體通訊。

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

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

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

  4. 輸入下列資訊:

    目錄 DNS 名稱

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

    目錄 NetBIOS 名稱

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

    目錄描述

    (選用) 目錄的描述。

    管理員密碼

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

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

    • 小寫字母 (a–z)

    • 大寫字母 (A–Z)

    • 數字 (0–9)

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

    Confirm password (確認密碼)

    重新輸入的管理員密碼。

  5. 選擇下一步

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

    VPC

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

    子網路

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

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

    建立期間的目錄詳細資訊頁面

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

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

目錄詳細資訊頁面

步驟 2:建立信任

如果您 AWS Managed Microsoft AD 只打算使用,請移至步驟 3:設定 Amazon RDS 的 IAM 許可

若要使用現場部署或自行託管的 Microsoft Active Directory 獲得 Kerberos 身分驗證,請建立樹系信任或外部信任。信任可以是單向或雙向。如需使用設定樹系信任的詳細資訊 AWS Directory Service,請參閱《AWS Directory Service 管理指南》的建立信任關係的時機。

步驟 3:設定 Amazon RDS 的 IAM 許可

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

注意

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

建立 IAM 角色

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

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

注意

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

手動建立 IAM 信任政策

您可以選擇性地建立具有必要許可的資源政策,而不是使用受管 IAM 政策 AmazonRDSDirectoryServiceAccess。同時指定 directoryservice.rds.amazonaws.comrds.amazonaws.com 作為主體。

若要限制 Amazon RDS 為特定資源提供另一項服務的許可,建議在資源政策中使用 aws:SourceArnaws:SourceAccount 全域條件內容索引鍵。防範混淆代理人問題的最有效方法是使用 aws:SourceArn 全域條件內容索引鍵,以及 Amazon RDS 資源的完整 ARN。如需詳細資訊,請參閱 防止跨服務混淆代理人問題

下列範例示範如何使用 Amazon RDS 中的 aws:SourceArnaws:SourceAccount 全域條件內容索引鍵,來預防混淆代理人問題。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "directoryservice.rds.amazonaws.com", "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:rds:us-east-1:123456789012:db:mydbinstance" }, "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }

對於選擇加入區域,您還必須以的directoryservice.rds.region_name.amazonaws.com形式包含該區域的服務主體。例如,在非洲 (開普敦) 區域,請使用下列信任政策:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "directoryservice.rds.amazonaws.com", "directoryservice.rds.af-south-1.amazonaws.com", "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:rds:af-south-1:123456789012:db:mydbinstance" }, "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }

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

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

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

您可以使用 Active Directory 使用者和電腦工具 (其為 Active Directory 網域服務和 Active Directory 輕量型目錄服務工具之一) 來建立使用者。在此情況下,使用者 代表具有目錄存取權的個人或實體。

若要在 AWS Directory Service 目錄中建立使用者,您必須連線至屬於 AWS Directory Service 目錄成員的 Windows Amazon EC2 執行個體。同時,您必須以具有建立使用者之許可的使用者身分來登入。如需在 Microsoft Active Directory 建立使用者的詳細資訊,請參閱《 AWS Managed Microsoft AD管理指南》中的管理AWS Directory Service 中的使用者和群組

步驟 5:啟用目錄和資料庫執行個體之間的跨 VPC 流量

如果您打算在相同 VPC 中尋找目錄和資料庫執行個體,請略過本步驟,並移至步驟 6:建立或修改 Oracle 資料庫執行個體

如果您計劃在不同的 AWS 帳戶或 VPC 中尋找目錄和資料庫執行個體,請使用 VPC 對等或 Transit Gateway 來設定跨 VPC 流量。AWS下列程序會使用 VPC 互連來啟用 VPC 之間的流量。請遵循《Amazon Virtual Private Cloud 互連指南》什麼是 VPC 互連?的指示。

使用 VPC 互連以啟用跨 VPC 流量
  1. 設定適當的 VPC 路由規則,以確保網路流量可以雙向對流。

  2. 確保資料庫執行個體安全群組可以從目錄的安全群組接收傳入流量。若要取得更多資訊,請參閱《 AWS Managed Microsoft AD管理指南》中的 AWS Directory Service 最佳實務

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

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

在 AWS 帳戶之間共用目錄
  1. 按照AWS Directory Service 管理指南中的教學課程:共用目錄以進行無縫 EC2 網域加入中的說明,開始與將在其中建立資料庫執行個體的 AWS 帳戶共用 AWS Managed Microsoft AD 目錄

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

  3. 使用資料庫執行個體的帳戶登入 AWS Directory Service 主控台時,請記下目錄 ID 值。您可以使用此目錄 ID,將資料庫執行個體加入網域。

步驟 6:建立或修改 Oracle 資料庫執行個體

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

僅 VPC 中的 Oracle 資料庫執行個體支援 Kerberos 身分驗證。資料庫執行個體可在與目錄相同的 VPC 中,或在不同 VPC 中。當您建立或修改資料庫執行個體時,請執行以下動作:

  • 請提供您建立目錄時產生的網域識別符 (d-* 識別符)。

  • 請提供所建立的 IAM 角色名稱。

  • 確保資料庫執行個體安全群組可以接收來自目錄安全群組的傳入流量,並將傳出流量傳送至目錄。

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

建立資料庫執行個體時的 Kerberos 身分驗證設定

當您使用主控台修改或還原資料庫執行個體時,請選擇 Kerberos authentication (Kerberos 身分驗證) 區段中的目錄,或選擇 Create a new directory (建立新目錄)

修改或還原資料庫執行個體時的 Kerberos 身分驗證設定

使用時 AWS CLI,資料庫執行個體需要下列參數才能使用您建立的目錄:

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

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

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

對於LinuxmacOS、或Unix:

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

在 Windows 中:

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

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

注意

MANAGED_SERVICE_USER 是一個服務帳戶,其名稱是由 RDS 的 Directory Service 隨機產生。在 Kerberos 身分驗證設定期間,RDS for Oracle 會建立具有相同名稱的使用者,並為其指派 CREATE SESSION 權限。Oracle 資料庫使用者在外部識別為 MANAGED_SERVICE_USER@EXAMPLE.COM,其中 EXAMPLE.COM 是您網域的名稱。RDS 會定期使用 Directory Service 提供的登入資料登入 Oracle 資料庫。之後,RDS 會立即銷毀票證快取。

步驟 7:建立 Kerberos 身分驗證 Oracle 登入

如同對任何其他資料庫執行個體一般,使用 Amazon RDS 主要使用者登入資料來連接至 Oracle 資料庫執行個體。資料庫執行個體已加入 AWS Managed Microsoft AD 網域。因此,您可以從網域中的 Microsoft Active Directory 使用者和群組佈建 Oracle 登入和使用者。若要管理資料庫許可,請將標準 Oracle 許可授與這些登入,以及撤銷其許可。

允許 Microsoft Active Directory 使用者與 Oracle 進行身分驗證
  1. 使用 Amazon RDS 主要使用者登入資料來連線至 Oracle 資料庫執行個體。

  2. 在 Oracle 資料庫中建立外部身分驗證的使用者。

    在下列範例中,以使用者名稱和網域名稱取代 KRBUSER@CORP.EXAMPLE.COM

    CREATE USER "KRBUSER@CORP.EXAMPLE.COM" IDENTIFIED EXTERNALLY; GRANT CREATE SESSION TO "KRBUSER@CORP.EXAMPLE.COM";

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

步驟 8:設定 Oracle 用戶端

若要設定 Oracle 用戶端,必須符合下列需求:

  • 請建立一個名為 krb5.conf (Linux) 或 krb5.ini (Windows) 的組態檔案,以指向該網域。設定 Oracle 用戶端以使用此組態檔案。

  • 確認流量可以在用戶端主機之間流動,以及 AWS Directory Service 透過 TCP/UDP、Kerberos 連接埠 (受管理的是 88 和 464 AWS Directory Service),以及透過 TCP 透過 LDAP 連接埠 389 在 DNS 連接埠 53 之間流動。

  • 確定流量可透過資料庫連接埠在用戶端主機和資料庫執行個體之間往來。

以下是的示例內容 AWS Managed Microsoft AD。

[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } [domain_realm] .example.com = CORP.EXAMPLE.COM example.com = CORP.EXAMPLE.COM

以下是適用於內部部署 Microsoft AD 的範例內容。在您的 krb5.conf 或 krb5.ini 檔案中,將名稱取代為內部部署 on-prem-ad-serverAD 伺服器的名稱。

[libdefaults] default_realm = ONPREM.COM [realms] AWSAD.COM = { kdc = awsad.com admin_server = awsad.com } ONPREM.COM = { kdc = on-prem-ad-server-name admin_server = on-prem-ad-server-name } [domain_realm] .awsad.com = AWSAD.COM awsad.com= AWSAD.COM .onprem.com = ONPREM.COM onprem.com= ONPREM.COM
注意

在您設定 krb5.ini 或 krb5.conf 檔案後,我們建議您重新啟動伺服器。

以下是適用於 SQL*Plus 組態的範例 sqlnet.ora 內容:

SQLNET.AUTHENTICATION_SERVICES=(KERBEROS5PRE,KERBEROS5) SQLNET.KERBEROS5_CONF=path_to_krb5.conf_file

如需 SQL Developer 組態的範例,請參閱 Oracle Support 的文件 1609359.1