使用聯合身分來管理 Amazon Redshift 對本機資源和 Amazon Redshift Spectrum 外部資料表的存取。 - Amazon Redshift

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

使用聯合身分來管理 Amazon Redshift 對本機資源和 Amazon Redshift Spectrum 外部資料表的存取。

在 中使用身分聯合 AWS 與 提供的憑證,GetDatabaseCredentials可以簡化對本機資料和外部資料的授權和存取。在本教學課程中,我們會示範如何透過 AWS 身分聯合提供 資源的存取權,而不是使用特定IAM角色。

目前,若要讓使用者存取位於 Amazon S3 中的外部資料,您可以建立具有許可政策中定義許可IAM的角色。然後,具有連接角色的使用者可以存取外部資料。這是可行的,但如果您想提供精細的規則,例如讓特定使用者無法使用特定的欄,您可能必須對外部結構描述進行其他設定。

使用 提供的憑證,身分聯合GetDatabaseCredentials可以使用更易於指定和變更的精細IAM規則來提供對 AWS Glue 和 Redshift Spectrum 資源的存取。這可讓您更輕鬆地應用符合業務規則的存取權限。

使用聯合憑證的好處如下:

  • 您不需要管理 Redshift Spectrum 的叢集連接IAM角色。

  • 叢集管理員可以建立外部結構描述,供具有不同IAM內容的取用者存取。舉例來說,這對於在資料表上執行欄篩選非常有用,其中不同的消費者查詢相同的外部結構描述,並在傳回的記錄中取得不同的欄位。

  • 您可以使用具有 IAM 許可的使用者來查詢 Amazon Redshift,而不是只使用 角色。

準備身分以使用聯合身分登入

使用聯合身分登入之前,您必須先執行幾個初步步驟。這些說明假設您有一個現有的 Redshift Spectrum 外部結構描述,該結構描述參考儲存在 Amazon S3 儲存貯體中的資料檔案,且該儲存貯體與您的 Amazon Redshift 叢集或 Amazon Redshift Serverless 資料倉儲位於同一帳戶中。

  1. 建立IAM身分。這可以是使用者或IAM角色。使用 支援的任何名稱IAM。

  2. 將許可政策連接至身分。指定下列任一項:

    • redshift:GetClusterCredentialsWithIAM (適用於 Amazon Redshift 佈建的叢集)

    • redshift-serverless:GetCredentials (適用於 Amazon Redshift Serverless)

    您可以使用IAM主控台,使用政策編輯器新增許可。

    IAM 身分也需要存取外部資料的許可。直接新增下列 AWS 受管政策,以授予 Amazon S3 的存取權:

    • AmazonS3ReadOnlyAccess

    • AWSGlueConsoleFullAccess

    如果您使用 AWS Glue 準備外部資料,則需要最後一個受管政策。如需授予 Amazon Redshift Spectrum 存取權步驟的詳細資訊,請參閱為 Amazon Redshift 建立IAM角色,這是 Amazon Redshift 和 Redshift Spectrum 入門指南的一部分。它顯示新增IAM政策以存取 Redshift Spectrum 的步驟。

  3. 將SQL用戶端設定為連線至 Amazon Redshift。使用 Amazon Redshift JDBC驅動程式,並將使用者的憑證新增至工具的憑證屬性。像 SQL Workbench/J 這樣的用戶端對此運作良好。設定下列用戶端連線延伸屬性:

    • AccessKeyID – 您的存取金鑰識別符。

    • SecretAccessKey – 您的秘密存取金鑰。(如果不使用加密,請注意傳輸金鑰的安全風險。)

    • SessionToken – IAM角色的一組臨時憑證。

    • groupFederationtrue 如果您要為佈建叢集設定聯合身分,請設定為 。如果您使用的是 Amazon Redshift Serverless,請勿設定此參數。

    • LogLevel – 整數日誌層級值。這是選用的。

  4. 將 URL設定為 Amazon Redshift 或 Amazon Redshift Serverless 主控台中找到的JDBC端點。將URL結構描述取代為 jdbc:redshift:iam:,並使用下列格式:

    • Amazon Redshift 佈建叢集的格式:jdbc:redshift:iam://<cluster_id>.<unique_suffix>.<region>.redshift.amazonaws.com:<port>/<database_name>

      範例:jdbc:redshift:iam://test1.12345abcdefg.us-east-1.redshift.amazonaws.com:5439/dev

    • Amazon Redshift Serverless 的格式:jdbc:redshift:iam://<workgroup-name>.<account-number>.<aws-region>.redshift-serverless.amazonaws.com:5439:<port>/<database_name>

      範例:jdbc:redshift:iam://default.123456789012.us-east-1.redshift-serverless.amazonaws.com:5439/dev

    第一次使用IAM身分連線至資料庫後,Amazon Redshift 會自動建立具有相同名稱的 Amazon Redshift 身分,IAM:使用者或IAM角色的字首IAMR:為 。本主題中的其餘步驟顯示使用者的範例。

    如果未自動建立 Redshift 使用者,您可以使用管理員帳戶執行 CREATE USER 陳述式,並以格式 IAM:<user name> 指定使用者名稱來建立一個使用者。

  5. 身為 Amazon Redshift 叢集管理員,請授予 Redshift 使用者存取外部結構描述所需的許可。

    GRANT ALL ON SCHEMA my_schema to "IAM:my_user";

    若要授予 Redshift 使用者在外部結構描述中建立資料表的能力,他們必須是結構描述擁有者。例如:

    ALTER SCHEMA my_schema owner to "IAM:my_user";
  6. 若要驗證組態,請在授予許可後,使用SQL用戶端以使用者身分執行查詢。此查詢範例會從外部資料表擷取資料。

    SELECT * FROM my_schema.my_table;

開始將身分和授權傳播到 Redshift Spectrum

若要傳遞聯合身分來查詢外部資料表,請將 SESSION 設定為 CREATE EXTERNAL SCHEMAIAM_ROLE 查詢參數值。下列步驟說明如何設定及運用 SESSION 來授權對外部結構描述進行查詢。

  1. 建立本機資料表和外部資料表。使用 AWS Glue 編目的外部資料表可以用於此目的。

  2. 使用IAM您的身分連線至 Amazon Redshift。如上一節所述,當身分連接到 Amazon Redshift 時,便會建立一個 Redshift 資料庫使用者。如果先前不存在,則會建立使用者。如果使用者是新使用者,管理員必須授予他們在 Amazon Redshift 中執行任務 (例如查詢和建立資料表) 的許可。

  3. 使用您的管理員帳戶連接到 Redshift。執行命令以使用 SESSION 值建立外部結構描述。

    create external schema spectrum_schema from data catalog database '<my_external_database>' region '<my_region>' iam_role 'SESSION' catalog_id '<my_catalog_id>';

    請注意,在這種情況下會設定 catalog_id。這是與功能一起新增的設定,因為 SESSION 會取代特定角色。

    在此範例中,查詢中的值模擬真實值的顯示方式。

    create external schema spectrum_schema from data catalog database 'spectrum_db' region 'us-east-1' iam_role 'SESSION' catalog_id '123456789012'

    在這種情況下,catalog_id值是 AWS 您的帳戶 ID。

  4. 使用您在步驟 2 中與 連線的IAM身分,執行查詢以存取外部資料。例如:

    select * from spectrum_schema.table1;

    在這種情況下, table1 可以是 Amazon S3 儲存貯體中檔案中JSON的 格式化資料。

  5. 如果您已經有一個使用叢集連接IAM角色的外部結構描述,指向外部資料庫或結構描述,您可以取代現有的結構描述並使用聯合身分,如這些步驟中詳述,或建立新的結構描述。

SESSION 表示聯合身分憑證用於查詢外部結構描述。當您使用 SESSION 查詢參數時,請務必設定 catalog_id。這是必要的,因為它指向用於結構描述的資料目錄。先前,catalog_id 是從指派給 iam_role 的值中擷取。當您以這種方式設定身分和授權傳播時,例如,透過使用聯合憑證查詢外部結構描述,將不需要透過IAM角色進行授權。

使用須知

常見的連線錯誤如下:IAM擷取臨時登入資料時發生錯誤:無法使用提供的 unmarshallers 取消marshall 例外狀況回應。此錯誤是擁有舊版JDBC驅動程式的結果。聯合身分所需的最低驅動程式版本為 2.1.0.9。您可以從下載 Amazon Redshift JDBC驅動程式 2.1 版取得驅動程式。 JDBC

其他資源

這些連結提供管理外部資料存取權的其他資訊。