設定IAM許可 - Amazon Redshift

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

設定IAM許可

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

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

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

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

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

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

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

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

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

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

最後,帳戶 A IAM角色需要能夠擔任帳戶 B IAM角色。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::accountID-of-account-B:role/someRoleB" } }

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

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

{ "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:arn-partition:redshift-serverless:*:AWS 帳戶:workgroup/*", "arn:arn-partition:redshift:*:AWS 帳戶:cluster:*" ] } ] }

設定IAM政策,將對SQL陳述式資訊的存取限制為僅陳述式擁有者

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

{ "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

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

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

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

{ "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