設定 IAM 許可權限 - Amazon Redshift

Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊,請參閱部落格文章

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

設定 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 映射至 sourceAWS 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 角色,將資源限制在 AWS 帳戶 中的 Redshift Serverless 工作群組和 Amazon Redshift 叢集

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

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:*" ] } ] }

設定 IAM 政策,以限制只有陳述式擁有者能夠存取 SQL 陳述式資訊

根據預設,Amazon Redshift 資料 API 會將呼叫 ExecuteStatementBatchExecuteStatement 時使用的 IAM 角色視為 SQL 陳述式的擁有者。允許擔任該角色的任何人都可以存取 SQL 陳述式的相關資訊,包括其結果。若要限制只有特定擁有者的 IAM 角色工作階段才能存取 SQL 陳述式資訊,請新增條件 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 搭配 CancelStatementDescribeStatementGetStatementResultListStatements。如需詳細資訊,請參閱 Amazon Redshift 資料 API 定義的動作

設定 IAM 政策以限制只有工作階段擁有者才能存取 SQL 結果

根據預設,Amazon Redshift 資料 API 會將呼叫 ExecuteStatementBatchExecuteStatement 時使用的 IAM 角色,視為執行 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 搭配 ExecuteStatementBatchExecuteStatement。如需詳細資訊,請參閱 Amazon Redshift 資料 API 定義的動作