本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用聯合身分來管理 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擷取臨時登入資料時發生錯誤:無法使用提供的 unmarshallers 取消marshall 例外狀況回應。此錯誤是擁有舊版JDBC驅動程式的結果。聯合身分所需的最低驅動程式版本為 2.1.0.9。您可以從下載 Amazon Redshift JDBC驅動程式 2.1 版取得驅動程式。 JDBC
其他資源
這些連結提供管理外部資料存取權的其他資訊。
-
您仍然可以使用 IAM角色存取 Redshift Spectrum 資料。如需詳細資訊,請參閱授權 Amazon Redshift 代表您存取 AWS 服務。
-
當您使用 管理對外部資料表的存取時 AWS Lake Formation,您可以使用具有聯合IAM身分的 Redshift Spectrum 來查詢它們。您不再需要管理 Redshift Spectrum 的叢集連接IAM角色,即可查詢向 註冊的資料 AWS Lake Formation。如需詳細資訊,請參閱將 AWS Lake Formation 與 Amazon Redshift Spectrum 搭配使用。