設定 IAM 許可權限 - Amazon Redshift

從 2025 年 11 月 1 日起,Amazon Redshift 將不再支援建立新的 Python UDFs。如果您想要使用 Python UDFs,請在該日期之前建立 UDFs。現有的 Python UDFs將繼續如常運作。如需詳細資訊,請參閱部落格文章

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

設定 IAM 許可權限

Amazon Redshift 會提供 AmazonRedshiftDataFullAccess 受管政策。此政策可提供 Amazon Redshift 資料 API 操作的完整存取權。此政策也允許對特定 Amazon Redshift AWS Secrets Manager以及驗證和存取 Amazon Redshift 叢集或 Redshift Serverless 工作群組所需的 IAM API 操作進行範圍存取。

您也可以建立自己的 IAM 政策,以允許存取特定資源。若要建立您的政策,請使用 AmazonRedshiftDataFullAccess 政策作為起始範本。建立政策後,將它新增給每一位需要資料 API 存取的使用者。

請考量與使用者相關聯之 IAM 政策的下列要求:

  • 如果您使用 AWS Secrets Manager 進行身分驗證,請確認政策允許使用 secretsmanager:GetSecretValue動作來擷取以金鑰 標記的秘密RedshiftDataFullAccess

  • 如果您使用暫時憑證對叢集進行身分驗證,請確認政策允許對叢集中任何資料庫的資料庫使用者名稱 redshift_data_api_user 使用 redshift:GetClusterCredentials 動作。此使用者名稱必須已建立在資料庫中。

  • 如果您使用暫時憑證向無伺服器工作群組進行身分驗證,請確認政策允許使用 redshift-serverless:GetCredentials 動作來擷取以索引鍵 RedshiftDataFullAccess 標記的工作群組。資料庫使用者會 1:1 對應至 source AWS Identity and Access Management (IAM) 身分。例如,使用者 sample_user 會映射至資料庫使用者 IAM:sample_user,而 IAM 角色 sample_role 會映射至 IAMR:sample_role。如需 IAM 身分的相關資訊,請參閱《IAM 使用者指南》中的 IAM 身分 (使用者、使用者群組和角色)

  • IAM 動作redshift-data:GetStatementResult允許存取 GetStatementResultGetStatementResultV2 API 操作。

下列連結提供 IAM 使用者指南 AWS Identity and Access Management 中有關 的詳細資訊。

在另一個帳戶擁有的叢集上執行查詢

若要在另一個帳戶擁有的叢集上執行查詢,擁有端帳戶必須提供資料 API 可在呼叫端帳戶中擔任的 IAM 角色。例如,假設帳戶 B 擁有帳戶 A 需要存取的叢集。帳戶 B 可將 AWS 受管政策連接至AmazonRedshiftDataFullAccess帳戶 B 的 IAM 角色。然後,帳戶 B 會使用信任政策來信任帳戶 A,如下所示:

JSON
{ "Version": "2012-10-17" , "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/someRoleA" ] }, "Action": "sts:AssumeRole" } ] }

最後,帳戶 A 的 IAM 角色必須能夠擔任帳戶 B 的 IAM 角色。

JSON
{ "Version": "2012-10-17" , "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111122223333:role/someRoleB" } }

指定 IAM 角色,將資源限制在 中的 Redshift Serverless 工作群組和 Amazon Redshift 叢集 AWS 帳戶

您可以在身分型政策中指定資源 ARNs,以控制對 中 Redshift Serverless 工作群組和 Amazon Redshift 叢集的存取 AWS 帳戶。此範例說明如何建立政策,僅允許存取指定 中工作群組和叢集的資料 API AWS 帳戶。

JSON
{ "Version": "2012-10-17" , "Statement": [ { "Effect": "Allow", "Action": [ "redshift-data:CancelStatement", "redshift-data:DescribeStatement", "redshift-data:GetStatementResult", "redshift-data:ListStatements" ], "Resource": "*" }, { "Effect": "Allow", "Action": "redshift-data:*", "Resource": [ "arn:aws:redshift:us-east-1:111122223333:workgroup/*", "arn:aws:redshift:us-east-1:111122223333:cluster:*" ] } ] }

設定僅限陳述式擁有者存取 SQL 陳述式資訊的 IAM 政策

根據預設,Amazon Redshift Data API 會將呼叫 ExecuteStatement和 時使用的 IAM 角色BatchExecuteStatement視為 SQL 陳述式的擁有者。允許擔任該角色的任何人都可以存取 SQL 陳述式的相關資訊,包括其結果。若要限制 SQL 陳述式資訊存取具有特定擁有者的 IAM 角色工作階段,請新增條件 redshift-data:statement-owner-iam-userid: "${aws:userid}"。下列 IAM 政策會限制存取。

JSON
{ "Version": "2012-10-17" , "Statement": [ { "Effect": "Allow", "Action": [ "redshift-data:CancelStatement", "redshift-data:DescribeStatement", "redshift-data:GetStatementResult", "redshift-data:ListStatements" ], "Resource": "*", "Condition": { "StringEquals": { "redshift-data:statement-owner-iam-userid": "${aws:userid}" } } } ] }

您可以statement-owner-iam-userid搭配 CancelStatementDescribeStatementGetStatementResult和 使用 條件ListStatements。如需詳細資訊,請參閱 Amazon Redshift Data API 定義的動作

設定僅限工作階段擁有者存取 SQL 結果的 IAM 政策

根據預設,Amazon Redshift Data API 會將呼叫 ExecuteStatement和 時使用的 IAM 角色BatchExecuteStatement視為執行 SQL 陳述式的資料庫工作階段擁有者。允許擔任該角色的任何人都可以將查詢提交至資料庫工作階段。若要限制具有特定擁有者的 IAM 角色工作階段的工作階段存取權,請新增條件 redshift-data:session-owner-iam-userid: "${aws:userid}"。下列 IAM 政策會限制存取。

下列 IAM 政策僅允許工作階段擁有者取得陳述式結果。條件session-owner-iam-userid用於限制對指定 的資源存取userid

JSON
{ "Version": "2012-10-17" , "Statement": [ { "Effect": "Allow", "Action": [ "redshift-data:ExecuteStatement", "redshift-data:BatchExecuteStatement" ], "Resource": "*", "Condition": { "StringEquals": { "redshift-data:session-owner-iam-userid": "${aws:userid}" } } } ] }

您可以session-owner-iam-userid搭配 ExecuteStatement和 使用 條件BatchExecuteStatement。如需詳細資訊,請參閱 Amazon Redshift Data API 定義的動作