Amazon Redshift 自 2025 年 11 月 1 日起不再支援建立新的 Python UDF。如果您想要使用 Python UDF,請在該日期之前建立 UDF。現有 Python UDF 將繼續正常運作。如需詳細資訊,請參閱部落格文章
使用聯合身分來管理 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 資料倉儲位於同一帳戶中。
-
建立 IAM 身分。這可以是使用者或 IAM 角色。使用 IAM 支援的任何名稱。
-
將許可政策連接至身分。指定下列任一項:
-
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 的步驟。
-
-
設定您的 SQL 用戶端以連接到 Amazon Redshift。使用 Amazon Redshift JDBC 驅動器,並將使用者的憑證新增至工具的憑證屬性。像 SQL Workbench/J 這樣的用戶端非常適合此目的。設定下列用戶端連線延伸屬性:
-
AccessKeyID – 您的存取金鑰識別碼。
-
SecretAccessKey – 您的私密存取金鑰。(如果不使用加密,請注意傳輸金鑰的安全風險。)
-
SessionToken – IAM 角色的一組暫時憑證。
-
groupFederation - 如果您要為已佈建的叢集設定聯合身分,則設定為
true。如果您使用的是 Amazon Redshift Serverless,請勿設定此參數。 -
LogLevel - 整數日誌層級值。這是選用的。
-
-
將 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>指定使用者名稱來建立一個使用者。 -
-
身為 Amazon Redshift 叢集管理員,請授予 Redshift 使用者存取外部結構描述所需的許可。
GRANT ALL ON SCHEMA my_schema to "IAM:my_user";若要授予 Redshift 使用者在外部結構描述中建立資料表的能力,他們必須是結構描述擁有者。例如:
ALTER SCHEMA my_schema owner to "IAM:my_user"; -
若要驗證組態,請在授予許可之後,使用 SQL 用戶端以使用者身分執行查詢。此查詢範例會從外部資料表擷取資料。
SELECT * FROM my_schema.my_table;
開始將身分和授權傳播到 Redshift Spectrum
若要傳遞聯合身分來查詢外部資料表,請將 SESSION 設定為 CREATE EXTERNAL SCHEMA 的 IAM_ROLE 查詢參數值。下列步驟說明如何設定及運用 SESSION 來授權對外部結構描述進行查詢。
-
建立本機資料表和外部資料表。使用 AWS Glue 編目的外部資料表可以用於此目的。
-
使用您的 IAM 身分連接到 Amazon Redshift。如上一節所述,當身分連接到 Amazon Redshift 時,便會建立一個 Redshift 資料庫使用者。如果先前不存在,則會建立使用者。如果使用者是新使用者,管理員必須授予他們在 Amazon Redshift 中執行任務 (例如查詢和建立資料表) 的許可。
-
使用您的管理員帳戶連接到 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。 -
使用您在步驟 2 中連接的 IAM 身分,執行查詢以存取外部資料。例如:
select * from spectrum_schema.table1;在這種情況下,
table1可以是 Amazon S3 儲存貯體中檔案中的 JSON 格式資料。 -
如果您已經擁有使用叢集連接 IAM 角色的外部結構描述 (指向外部資料庫或結構描述),則可以取代現有結構描述並使用這些步驟中詳述的聯合身分,或建立新的結構描述。
SESSION 表示聯合身分憑證用於查詢外部結構描述。當您使用 SESSION 查詢參數時,請務必設定 catalog_id。這是必要的,因為它指向用於結構描述的資料目錄。先前,catalog_id 是從指派給 iam_role 的值中擷取。當您以這種方式設定身分識別和授權傳播時,例如,透過使用聯合憑證查詢外部結構描述,就不需要透過 IAM 角色進行授權。
使用須知
一個常見的連線錯誤如下:IAM 擷取臨時憑證時發生錯誤:無法使用提供的解組器取消封送異常回應。此錯誤是具有舊版 JDBC 驅動器的結果。聯合身分所需的最低驅動程式版本為 2.1.0.9。您可以從下載 Amazon Redshift JDBC 驅動器 2.x 版取得 JDBC 驅動器。
其他資源
這些連結提供管理外部資料存取權的其他資訊。
-
您仍然可以使用 IAM 角色存取 Redshift Spectrum 資料。如需更多詳細資訊,請參閱 授權 Amazon Redshift 代表您存取 AWS 服務。
-
當您使用 AWS Lake Formation管理對外部資料表的存取權時,您可以使用 Redshift Spectrum 搭配聯合 IAM 身分來查詢。您不再需要為 Redshift Spectrum 管理叢集連接的 IAM 角色,就能查詢向 AWS Lake Formation 註冊的資料。如需詳細資訊,請參閱將 AWS Lake Formation 與 Amazon Redshift Spectrum 搭配使用。