将基于身份的策略(IAM 策略)用于 Amazon Redshift - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将基于身份的策略(IAM 策略)用于 Amazon Redshift

本主题提供了基于身份的策略的示例,在这些策略中,账户管理员可以向 IAM 身份(即:用户、组和角色)附加权限策略。

重要

我们建议您首先阅读以下介绍性主题,这些主题讲解了管理 Amazon Redshift 资源访问的基本概念和选项。有关更多信息,请参阅 管理 Amazon Redshift 资源的访问权限的概览

下面介绍权限策略示例。该权限允许用户创建、删除、修改和重启所有集群,但拒绝删除或修改集群标识符以 production 开头的任何集群的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowClusterManagement", "Action": [ "redshift:CreateCluster", "redshift:DeleteCluster", "redshift:ModifyCluster", "redshift:RebootCluster" ], "Resource": [ "*" ], "Effect": "Allow" }, { "Sid":"DenyDeleteModifyProtected", "Action": [ "redshift:DeleteCluster", "redshift:ModifyCluster" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:cluster:production*" ], "Effect": "Deny" } ] }

该策略包含两条语句:

  • 第一条语句授予用户创建、删除、修改和重启集群的权限。该语句指定通配符 (*) 作为 Resource 的值,因此,该策略适用于归根 Amazon 账户所有的一切 Amazon Redshift 资源。

  • 第二条语句拒绝删除或修改集群的权限。该语句指定包含通配符 (*) 的集群 Amazon Resource Name (ARN) 作为 Resource 的值。因此,该语句适用于归根 Amazon 账户所有的一切 Amazon Redshift 集群(集群标识符以 production 开头)。

Amazon适用于 Amazon Redshift 的 托管(预定义)策略

Amazon通过提供由创建和管理的独立 IAM 策略来满足许多常用案例的要求。Amazon托管式策略可授予常用案例的必要权限,因此,您可以免去调查都需要哪些权限的工作。有关更多信息,请参阅《IAM 用户指南》中的 Amazon 托管式策略

此外,您还可以创建自定义 IAM 策略,以授予账户 Amazon Redshift API 操作和资源访问的权限。您可以将这些自定义策略附加到需要这些权限的 IAM 用户或组。

以下部分描述 Amazon Redshift 特有的 Amazon 托管式策略(可附加至您账户中的用户):

AmazonRedshiftReadOnlyAccess

授予 Amazon 账户对所有 Amazon Redshift 资源的只读访问权限。

您可以在 IAM 控制台上找到 AmazonRedshiftReadOnlyAccess 策略。

AmazonRedshiftFullAccess

授予 Amazon 账户对所有 Amazon Redshift 资源的完全访问权限。

您可以在 IAM 控制台上找到 AmazonRedshiftFullAccess 策略。

AmazonRedshiftQueryEditor

授予账户对 Amazon Redshift 控制台查询编辑器的完全访问权限。

您可以在 IAM 控制台上找到 AmazonRedshiftQueryEditor 策略。

AmazonRedshiftDataFullAccess

授予 Amazon 账户对所有 Amazon Redshift 数据 API 操作和资源的完全访问权限。

您可以在 IAM 控制台上找到 AmazonRedshiftDataFullAccess 策略。

AmazonRedshiftQueryEditorV2FullAccess

授予账户对 Amazon Redshift 查询编辑器 v2 的完全访问权限。此策略还授予访问其它所需服务的权限。

您可以在 IAM 控制台上找到 AmazonRedshiftQueryEditorV2FullAccess 策略。

AmazonRedshiftQueryEditorV2NoSharing

授予账户使用 Amazon Redshift 查询编辑器 v2 的能力(资源不共享)。此策略还授予访问其它所需服务的权限。使用此策略的主体无法标记其资源(例如查询),因此无法与同一 Amazon Web Services 账户 中的其它主体共享这些资源。

您可以在 IAM 控制台上找到 AmazonRedshiftQueryEditorV2NoSharing 策略。

AmazonRedshiftQueryEditorV2ReadSharing

授予账户使用 Amazon Redshift 查询编辑器 v2 的能力(资源共享受限)。此策略还授予访问其它所需服务的权限。使用此策略的主体可以标记其资源(例如查询),以便与同一 Amazon Web Services 账户 中的其它主体共享这些资源。获得授权的主体可读取其与团队共享的资源,但无法更新。

您可以在 IAM 控制台上找到 AmazonRedshiftQueryEditorV2ReadSharing 策略。

AmazonRedshiftQueryEditorV2ReadWriteSharing

授予账户使用 Amazon Redshift 查询编辑器 v2 共享资源的能力。此策略还授予访问其它所需服务的权限。使用此策略的主体可以标记其资源(例如查询),以便与同一 Amazon Web Services 账户 中的其它主体共享这些资源。获得授权的主体可以读取和更新其与团队共享的资源。

您可以在 IAM 控制台上找到 AmazonRedshiftQueryEditorV2ReadWriteSharing 策略。

AmazonRedshiftServiceLinkedRolePolicy

您无法将 AmazonRedshiftServiceLinkedRolePolicy 策略附加至您的 IAM 实体。把此策略附加至服务相关的角色,该角色允许 Amazon Redshift 访问账户资源。有关更多信息,请参阅使用面向 Amazon Redshift 的服务相关角色

AmazonRedshiftAllCommandsFullAccess

授予账户使用从 Amazon Redshift 控制台创建的 IAM 角色的能力,并将其设置为默认角色,以便集群从 Amazon S3 运行 COPY、UNLOAD、CREATE EXTERNAL SCHEMA、CREATE EXTERNAL FUNCTION 和 CREATE MODEL 命令。该策略还授予账户为相关服务运行 SELECT 语句的权限,例如 Amazon S3、CloudWatch Logs、Amazon SageMaker 或 Amazon Glue。

您可以在 IAM 控制台上找到 AmazonRedshiftAllCommandsFullAccess 策略。

此外,您还可以创建自定义 IAM 策略,以授予账户 Amazon Redshift API 操作和资源访问的权限。您可以将这些自定义策略附加到需要这些权限的 IAM 用户或组。

Amazon 托管式策略的 Amazon Redshift 更新

查看有关 Amazon Redshift(自从其开始跟踪更新更改以来)的 Amazon 托管式策略更新的详细信息。有关此页面更改的自动提示,请订阅 Amazon Redshift 文档历史记录页面上的 RSS 源。

更改 描述 日期

AmazonRedshiftServiceLinkedRolePolicy – 对现有策略的更新

Amazon Redshift 添加了新操作的权限,允许对 Amazon Redshift 网络和 VPC 资源进行管理。

2021 年 11 月 22 日

AmazonRedshiftAllCommandsFullAccess – 新策略

Amazon Redshift 添加了一项新策略,允许使用从 Amazon Redshift 控制台创建的 IAM 角色,并将其设置为默认角色,以便集群从 Amazon S3 运行 COPY、UNLOAD、CREATE EXTERNAL SCHEMA、CREATE EXTERNAL FUNCTION 和 CREATE MODEL 和 CREATE LIBRARY 命令。

2021 年 11 月 18 日

AmazonRedshiftServiceLinkedRolePolicy – 对现有策略的更新

Amazon Redshift 添加了新操作的权限,允许管理 Amazon Redshift CloudWatch 日志组和日志流,包括审计日志导出。

2021 年 11 月 15 日

AmazonRedshiftFullAccess – 对现有策略的更新

Amazon Redshift 添加了新权限。以允许模型可解释性、DynamoDB、Redshift Spectrum 和 Amazon RDS 联合身份验证等功能。 2021 年 10 月 7 日

AmazonRedshiftFullAccess – 新策略

Amazon Redshift 添加了一项新策略,允许对 Amazon Redshift 查询编辑器 v2 的wan q完全访问。

2021 年 9 月 24 日

AmazonRedshiftQueryEditorV2NoSharing – 新策略

Amazon Redshift 添加了一项新策略,允许在不共享资源的情况下使用 Amazon Redshift 查询编辑器 v2。

2021 年 9 月 24 日

AmazonRedshiftQueryEditorV2ReadSharing – 新策略

Amazon Redshift 添加了一项新策略,允许在 Amazon Redshift 查询编辑器 v2 中进行读取共享。

2021 年 9 月 24 日

AmazonRedshiftQueryEditorV2ReadWriteSharing – 新策略

Amazon Redshift 添加了一项新策略,允许在 Amazon Redshift 查询编辑器 v2 中进行读取和更新共享。

2021 年 9 月 24 日

AmazonRedshiftFullAccess – 对现有策略的更新

Amazon Redshift 添加了新的权限,以允许 sagemaker:*Job*

2021 年 8 月 18 日

AmazonRedshiftDataFullAccess – 对现有策略的更新

Amazon Redshift 添加了新的权限,以允许 AuthorizeDataShare

2021 年 8 月 12 日

AmazonRedshiftDataFullAccess – 对现有策略的更新

Amazon Redshift 添加了新的权限,以允许 BatchExecuteStatement

2021 年 7 月 27 日

Amazon Redshift 开始跟踪更改

Amazon Redshift 开始跟踪其 Amazon 托管式策略的更改。

2021 年 7 月 27 日

使用 Redshift Spectrum 所需的权限

Amazon Redshift Spectrum 需要其他 Amazon 服务访问资源的权限。有关 Redshift Spectrum 的 IAM 策略中的权限的详细信息,请参阅 Amazon Redshift 数据库开发人员指南中的 Amazon Redshift Spectrum 的 IAM 策略

使用 Amazon Redshift 控制台所需的权限

用户若要能够使用 Amazon Redshift 控制台,则必须拥有一组最低的权限来允许用户为自己的 Amazon 账户描述 Amazon Redshift 资源。这些权限还必须允许用户描述其他相关信息(包括 Amazon EC2 安全、Amazon CloudWatch、Amazon SNS 和网络信息)。

如果创建比必需的最低权限更为严格的 IAM 策略,对于附加了该 IAM 策略的用户,控制台无法按预期正常运行。要确保这些用户仍可使用 Amazon Redshift 控制台,也可向用户附加 AmazonRedshiftReadOnlyAccess 托管式策略。其操作方法,请见Amazon适用于 Amazon Redshift 的 托管(预定义)策略所述。

有关授予用户访问 Amazon Redshift 控制台上的查询编辑器的权限,请参阅使用 Amazon Redshift 控制台查询编辑器所需的权限

对于只需要调用 Amazon CLI 或 Amazon Redshift API 的用户,无需为其提供最低限度的控制台权限。

使用 Amazon Redshift 控制台查询编辑器所需的权限

一个用户若要使用 Amazon Redshift 查询编辑器,该用户必须具有一组 Amazon Redshift 和 Amazon Redshift 数据 API 操作的最低权限。要使用密钥连接到数据库,您还必须具有 Secrets Manager 权限。

要授予用户对 Amazon Redshift 控制台上的查询编辑器的访问权限,请附加 AmazonRedshiftQueryEditorAmazonRedshiftReadOnlyAccess Amazon 托管式策略。AmazonRedshiftQueryEditor 策略允许用户只检索其自己的 SQL 语句的结果。也就是说,相同 aws:userid 提交的语句,如 AmazonRedshiftQueryEditor Amazon 托管式策略的此部分所示。

{ "Sid": "DataAPIIAMSessionPermissionsRestriction", "Action": [ "redshift-data:GetStatementResult", "redshift-data:CancelStatement", "redshift-data:DescribeStatement", "redshift-data:ListStatements" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "redshift-data:statement-owner-iam-userid": "${aws:userid}" } } }

要允许用户检索同一 IAM 角色中其他用户的 SQL 语句的结果,请创建您自己的策略,而不需要限制对当前用户的访问权限的条件。同时限制管理员更改策略的访问权限。

使用查询编辑器 v2 所需的权限

需要使用 Amazon Redshift 查询编辑器 v2 的用户必须拥有一组 Amazon Redshift、查询编辑器 v2 操作和其它操作的最低权限,以及其它 Amazon 服务的权限,诸如 Amazon Key Management Service、Amazon Secrets Manager和标记服务。

要授予用户对查询编辑器 v2 的完全访问权,请附上 AmazonRedshiftQueryEditorV2FullAccess Amazon 托管式策略。这些 AmazonRedshiftQueryEditorV2FullAccess 策略授权用户与同一团队中的其它人共享查询编辑器 v2 资源(例如查询)。有关如何控制查询编辑器 v2 资源访问的详细信息,请参阅 IAM 控制台上查询编辑器 v2 的特定托管式策略的定义。

一些 Amazon Redshift 查询编辑器 v2 Amazon 托管式策略使用 Amazon 标签在条件范围内限制对资源的访问。在查询编辑器 v2 中,共享查询的基础是附加至主体(IAM 用户或 IAM 角色)的 IAM 策略中的标记密钥和值 "aws:ResourceTag/sqlworkbench-team": "${aws:PrincipalTag/sqlworkbench-team}"。同样 Amazon Web Services 账户 的主体具有相同标记值(例如 accounting-team),在查询编辑器 v2 中处于同一个团队。您同时只能与一个团队关联。具有管理权限的用户可以在 IAM 控制台上设置团队,方法是为所有团队成员提供相同的 sqlworkbench-team 标记值。如果标记值 sqlworkbench-team 已为 IAM 用户或 IAM 角色更改,可能要经过延迟后,更改才会反映在共享资源中。如果资源(例如查询)的标记值发生了更改,在更改生效之前可能再次出现延迟。团队成员还必须拥有 tag:GetResources 权限才能分享。

示例:添加 IAM 角色的 accounting-team 标签

  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在控制台的导航窗格中,选择 Roles(角色),然后选择要编辑的角色的名称。

  3. 选择 Tags(标签)选项卡,然后选择 Add(添加)标签。

  4. 添加标记密钥 sqlworkbench-team 和值 accounting-team

  5. 选择保存更改

    现在,当 IAM 主体(附加了此 IAM 角色)与团队共享查询时,其它具有同样 accounting-team 标记值的主体可以查看查询。

有关如何将标签附加至主体(包括 IAM 角色和 IAM 用户)的更多信息,请参阅《IAM 用户指南》中的标记 IAM 资源部分。

您还可以使用身份提供商(IdP)在会话级别设置团队。这允许使用同一 IAM 角色的多个用户拥有不同的团队。IAM 角色信任策略必须允许 sts:TagSession 操作。有关更多信息,请参阅《IAM 用户指南》中的添加会话标签所需的权限。将主标签属性添加到 IdP 提供的 SAML 断言中。

<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:sqlworkbench-team"> <AttributeValue>accounting-team</AttributeValue> </Attribute>

按照身份提供商(IdP)提供的说明使用来自目录的内容填充 SAML 属性。有关身份提供商(IdP)和 Amazon Redshift 的更多信息,请参阅《IAM 用户指南》中的使用 IAM 身份验证生成数据库用户凭证身份提供商和联合身份验证

使用 Amazon Redshift 调度程序所需的权限

使用 Amazon Redshift 计划程序时,您应设置与 Amazon Redshift 计划程序 (scheduler.redshift.amazonaws.com) 具有信任关系的 IAM 角色,以便允许该计划程序代表您承担权限。您还可以为要计划的 Amazon Redshift API 操作将策略(权限)附加到角色。

以下示例演示 JSON 格式的策略文档,该策略用于在 Amazon Redshift 调度程序和 Amazon Redshift 之间设置信任关系。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "scheduler.redshift.amazonaws.com", "redshift.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

有关信任实体更多信息,请参阅 IAM 用户指南中的创建向 Amazon 服务委派权限的角色

您还必须为要计划的 Amazon Redshift 操作添加权限。

为使计划程序使用 ResizeCluster 操作,请为 IAM 策略添加如下权限。根据您的环境,您可能希望使策略限制更严格。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "redshift:ResizeCluster", "Resource": "*" } ] }

有关为 Amazon Redshift 调度程序创建角色的步骤,请参阅 IAM 用户指南中的为 Amazon 服务(控制台)创建角色。在 IAM 控制台中创建角色时,请选择以下选项:

  • 对于 Choose the service that will use this role (选择将使用此角色的服务):选择 Redshift

  • 对于 Select your use case (选择您的使用案例),选择 Redshift - Scheduler (Redshift - 计划程序)

  • 为允许计划的 Amazon Redshift 操作的角色创建或附加策略。选择 Create policy (创建策略) 或修改角色以便附加策略。输入计划操作的 JSON 策略。

  • 在创建角色后,编辑 IAM 角色的 Trust Relationship (信任关系) 以便包含服务 redshift.amazonaws.com

您创建的 IAM 角色具有信任实体 scheduler.redshift.amazonaws.comredshift.amazonaws.com。它还具有附加策略,该策略允许支持的 Amazon Redshift API 操作,例如 "redshift:ResizeCluster"

使用 Amazon EventBridge 调度程序所需的权限

使用 Amazon EventBridge 调度程序时,您应设置与 EventBridge 计划程序 (events.amazonaws.com) 具有信任关系的 IAM 角色,以便允许该计划程序代表您承担权限。您还可以为要计划的 Amazon Redshift 数据 API 操作将策略(权限)附加到角色,并附加 Amazon EventBridge 操作的策略。

当您使用控制台上的 Amazon Redshift 查询编辑器创建计划查询时,您可以使用 EventBridge 调度程序。

您可以创建 IAM 角色以在 IAM 控制台上运行计划查询。在此 IAM 角色中,附加 AmazonEventBridgeFullAccessAmazonRedshiftDataFullAccess

以下示例演示 JSON 格式的策略文档,该策略用于设置与EventBridge 调度程序的信任关系。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com", ] }, "Action": "sts:AssumeRole" } ] }

有关信任实体更多信息,请参阅 IAM 用户指南中的创建向 Amazon 服务委派权限的角色

有关为 EventBridge 调度程序创建角色的步骤,请参阅 IAM 用户指南中的为 Amazon 服务(控制台)创建角色。在 IAM 控制台中创建角色时,请选择以下选项:

  • Choose the service that will use this role(选择将使用此角色的服务)下,选择 CloudWatch Events

  • 对于 Select your use case(选择您的使用案例):选择 CloudWatch Events

  • 附加以下权限策略:AmazonEventBridgeFullAccessAmazonRedshiftDataFullAccess

您创建的 IAM 角色具有信任实体 events.amazonaws.com。它还具有附加策略,该策略允许支持的 Amazon Redshift 数据 API 操作,例如 "redshift-data:*"

在 Amazon SageMaker 中使用 Amazon Redshift 机器学习(ML)所需的权限。

接下来,您可以找到在 Amazon SageMaker 中使用 Amazon Redshift 机器学习(ML)所需权限的描述(不同使用案例)。

为了让用户在 Amazon SageMaker 中使用 Amazon Redshift ML,请创建一个拥有比默认策略更具限制性策略的 IAM 角色。您可以使用以下策略。您还可以修改此策略以满足您的需求。

以下策略显示了从 Amazon Redshift 运行 SageMaker Autopilot(具备模型可解释性)所需的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:CreateAutoMLJob", "sagemaker:CreateCompilationJob", "sagemaker:CreateEndpoint", "sagemaker:DescribeAutoMLJob", "sagemaker:DescribeTrainingJob", "sagemaker:DescribeCompilationJob", "sagemaker:DescribeProcessingJob", "sagemaker:DescribeTransformJob", "sagemaker:ListCandidatesForAutoMLJob", "sagemaker:StopAutoMLJob", "sagemaker:StopCompilationJob", "sagemaker:StopTrainingJob", "sagemaker:DescribeEndpoint", "sagemaker:InvokeEndpoint", "sagemaker:StopProcessingJob", "sagemaker:CreateModel", "sagemaker:CreateProcessingJob" ], "Resource": [ "arn:aws:sagemaker:*:*:model/*redshift*", "arn:aws:sagemaker:*:*:training-job/*redshift*", "arn:aws:sagemaker:*:*:automl-job/*redshift*", "arn:aws:sagemaker:*:*:compilation-job/*redshift*", "arn:aws:sagemaker:*:*:processing-job/*redshift*", "arn:aws:sagemaker:*:*:transform-job/*redshift*", "arn:aws:sagemaker:*:*:endpoint/*redshift*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:log-group:/aws/sagemaker/Endpoints/*redshift*", "arn:aws:logs:*:*:log-group:/aws/sagemaker/ProcessingJobs/*redshift*", "arn:aws:logs:*:*:log-group:/aws/sagemaker/TrainingJobs/*redshift*", "arn:aws:logs:*:*:log-group:/aws/sagemaker/TransformJobs/*redshift*" ] }, { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*", "Condition": { "StringEquals": { "cloudwatch:namespace": [ "SageMaker", "/aws/sagemaker/Endpoints", "/aws/sagemaker/ProcessingJobs", "/aws/sagemaker/TrainingJobs", "/aws/sagemaker/TransformJobs" ] } } }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:GetAuthorizationToken", "ecr:GetDownloadUrlForLayer" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetBucketAcl", "s3:GetBucketCors", "s3:GetEncryptionConfiguration", "s3:GetBucketLocation", "s3:ListBucket", "s3:ListAllMyBuckets", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads", "s3:PutObject", "s3:PutBucketAcl", "s3:PutBucketCors", "s3:DeleteObject", "s3:AbortMultipartUpload", "s3:CreateBucket" ], "Resource": [ "arn:aws:s3:::redshift-downloads", "arn:aws:s3:::redshift-downloads/*", "arn:aws:s3:::*redshift*", "arn:aws:s3:::*redshift*/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetBucketAcl", "s3:GetBucketCors", "s3:GetEncryptionConfiguration", "s3:GetBucketLocation", "s3:ListBucket", "s3:ListAllMyBuckets", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads", "s3:PutObject", "s3:PutBucketAcl", "s3:PutBucketCors", "s3:DeleteObject", "s3:AbortMultipartUpload", "s3:CreateBucket" ], "Resource": "*", "Condition": { "StringEqualsIgnoreCase": { "s3:ExistingObjectTag/Redshift": "true" } } }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::*:role/*", "Condition": { "StringEquals": { "iam:PassedToService": [ "redshift.amazonaws.com", "sagemaker.amazonaws.com", ] } } } ] }

以下策略显示了允许访问 Amazon DynamoDB、Redshift Spectrum 和 Amazon RDS 联合身份验证的完全最低权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:CreateAutoMLJob", "sagemaker:CreateCompilationJob", "sagemaker:CreateEndpoint", "sagemaker:DescribeAutoMLJob", "sagemaker:DescribeTrainingJob", "sagemaker:DescribeCompilationJob", "sagemaker:DescribeProcessingJob", "sagemaker:DescribeTransformJob", "sagemaker:ListCandidatesForAutoMLJob", "sagemaker:StopAutoMLJob", "sagemaker:StopCompilationJob", "sagemaker:StopTrainingJob", "sagemaker:DescribeEndpoint", "sagemaker:InvokeEndpoint", "sagemaker:StopProcessingJob", "sagemaker:CreateModel", "sagemaker:CreateProcessingJob" ], "Resource": [ "arn:aws:sagemaker:*:*:model/*redshift*", "arn:aws:sagemaker:*:*:training-job/*redshift*", "arn:aws:sagemaker:*:*:automl-job/*redshift*", "arn:aws:sagemaker:*:*:compilation-job/*redshift*", "arn:aws:sagemaker:*:*:processing-job/*redshift*", "arn:aws:sagemaker:*:*:transform-job/*redshift*", "arn:aws:sagemaker:*:*:endpoint/*redshift*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:log-group:/aws/sagemaker/Endpoints/*redshift*", "arn:aws:logs:*:*:log-group:/aws/sagemaker/ProcessingJobs/*redshift*", "arn:aws:logs:*:*:log-group:/aws/sagemaker/TrainingJobs/*redshift*", "arn:aws:logs:*:*:log-group:/aws/sagemaker/TransformJobs/*redshift*" ] }, { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*", "Condition": { "StringEquals": { "cloudwatch:namespace": [ "SageMaker", "/aws/sagemaker/Endpoints", "/aws/sagemaker/ProcessingJobs", "/aws/sagemaker/TrainingJobs", "/aws/sagemaker/TransformJobs" ] } } }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:GetAuthorizationToken", "ecr:GetDownloadUrlForLayer" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetBucketAcl", "s3:GetBucketCors", "s3:GetEncryptionConfiguration", "s3:GetBucketLocation", "s3:ListBucket", "s3:ListAllMyBuckets", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads", "s3:PutObject", "s3:PutBucketAcl", "s3:PutBucketCors", "s3:DeleteObject", "s3:AbortMultipartUpload", "s3:CreateBucket" ], "Resource": [ "arn:aws:s3:::redshift-downloads", "arn:aws:s3:::redshift-downloads/*", "arn:aws:s3:::*redshift*", "arn:aws:s3:::*redshift*/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetBucketAcl", "s3:GetBucketCors", "s3:GetEncryptionConfiguration", "s3:GetBucketLocation", "s3:ListBucket", "s3:ListAllMyBuckets", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads", "s3:PutObject", "s3:PutBucketAcl", "s3:PutBucketCors", "s3:DeleteObject", "s3:AbortMultipartUpload", "s3:CreateBucket" ], "Resource": "*", "Condition": { "StringEqualsIgnoreCase": { "s3:ExistingObjectTag/Redshift": "true" } } }, { "Effect": "Allow", "Action": [ "dynamodb:Scan", "dynamodb:DescribeTable", "dynamodb:Getitem" ], "Resource": [ "arn:aws:dynamodb:*:*:table/*redshift*", "arn:aws:dynamodb:*:*:table/*redshift*/index/*" ] }, { "Effect": "Allow", "Action": [ "elasticmapreduce:ListInstances" ], "Resource": [ "arn:aws:elasticmapreduce:*:*:cluster/*redshift*" ] }, { "Effect": "Allow", "Action": [ "elasticmapreduce:ListInstances" ], "Resource": "*", "Condition": { "StringEqualsIgnoreCase": { "elasticmapreduce:ResourceTag/Redshift": "true" } } }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:*:*:function:*redshift*" }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:UpdateTable", "glue:GetTable", "glue:GetTables", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition" ], "Resource": [ "arn:aws:glue:*:*:table/*redshift*/*", "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/*redshift*" ] }, { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": [ "arn:aws:secretsmanager:*:*:secret:*redshift*" ] }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword", "secretsmanager:ListSecrets" ], "Resource": "*", "Condition": { "StringEquals": { "secretsmanager:ResourceTag/Redshift": "true" } } }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::*:role/*", "Condition": { "StringEquals": { "iam:PassedToService": [ "redshift.amazonaws.com", "glue.amazonaws.com", "sagemaker.amazonaws.com", "athena.amazonaws.com" ] } } } ] }

或者,要使用 Amazon KMS 密钥用于加密,将以下权限添加到策略中。

{ "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": [ "arn:aws:kms:<your-region>:<your-account-id>:key/<your-kms-key>" ] }

要允许 Amazon Redshift 和 SageMaker 代入先前的 IAM 角色以便与其它服务交互,请将以下信任策略添加到 IAM 角色中。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "sagemaker.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

先前的 Amazon S3 存储桶 redshift-downloads/redshift-ml/,是存储用于其它步骤和示例的示例数据的位置。如果您不需要从 Amazon S3 加载数据,您可以将存储桶删除。或者,将其替换为用于将数据加载到 Amazon Redshift 的其它 Amazon S3 存储桶。

your-account-idyour-roleyour-s3-bucket 值是您在 CREATE MODEL(创建模型)命令中指定的账户 ID、角色和存储桶。

(可选)如果您为使用 Amazon Redshift ML 指定了一个 Amazon KMS 密钥,请使用示例策略的 Amazon KMS 密钥部分。your-kms-key 值是作为 CREATE MODEL 命令一部分使用的键。

如果您为超参数优化任务指定了一个私有的虚拟私有云(VPC),请添加以下权限:

{ "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcs", "ec2:DescribeDhcpOptions", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ] }

要使用模型解释,请确保您具备调用 SageMaker API 操作的权限。建议使用 AmazonSageMakerFullAccess 托管式策略。如果您要使用更具限制性的策略创建 IAM 角色,您可以使用以下策略。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker::CreateEndpoint", "sagemaker::CreateEndpointConfig", "sagemaker::DeleteEndpoint", "sagemaker::DeleteEndpointConfig", "sagemaker::DescribeEndpoint", "sagemaker::DescribeEndpointConfig", "sagemaker::DescribeModel", "sagemaker::InvokeEndpoint", "sagemaker::ListTags" ], "Resource": "*" } ] }

有关 AmazonSageMakerFullAccess 托管式策略的更多信息,请参阅《Amazon SageMaker 开发人员指南》中的 AmazonSageMakerFullAccess

有关 Amazon Redshift ML 的更多信息,请参阅在 Amazon Redshift 中使用机器学习CREATE MODEL

使用数据共享 API 操作所需的权限

要控制对数据共享 API 操作的访问,请使用基于 IAM 操作的策略。有关如何管理 IAM 策略的信息,请参阅 IAM 用户指南中的管理 IAM 策略

当创建者集群管理员需要使用 AuthorizeDataShare 调用来授权 Amazon Web Services 账户 账户外数据共享出口的时候,更是如此。在这种情况下,您可以设置基于 IAM 操作的策略来授予此权限。使用 DeauthorizeDataShare 调用以撤消出口。

使用基于 IAM 操作的策略时,您还可以在策略中指定 IAM 资源,例如 DataShareARN。下面显示了 DataShareARN 的格式和示例。

arn:aws:redshift:region:account-id:datashare:namespace-guid/datashare-name arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/SalesShare

您可以通过在 IAM 策略中指定数据更新名称来限制对特定数据共享的 AuthorizeDataShare 访问权限。

{ "Statement": [ { "Action": [ "redshift:AuthorizeDataShare", ], "Resource": [ "arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/SalesShare" ], "Effect": "Deny" } ] }

您还可以将 IAM 策略限制为特定创建器集群拥有的所有数据共享。若要执行此操作,请将策略中的 datashare-name 值替换为通配符或星号。保留集群的 namespace-guid 值。

arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/*

以下 IAM 策略防止实体面向特定创建者集群拥有的数据共享调用 AuthorizeDataShare

{ "Statement": [ { "Action": [ "redshift:AuthorizeDataShare", ], "Resource": [ "arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/*" ], "Effect": "Deny" } ] }

DataShareARN 会根据数据共享名称和所拥有的全局唯一的集群命名空间 ID(GUID)来限制访问。它通过将名称指定为星号来完成此操作。

GetClusterCredentials 的资源策略

要使用 JDBC 或 ODBC 利用 IAM 数据库凭证连接集群数据库,或者以编程方式调用 GetClusterCredentials 操作,您需要拥有一组最低的权限。至少,您需要具有访问 redshift:GetClusterCredentials 资源的 dbuser 操作的权限。

如果使用 JDBC 或 ODBC 连接,您可以指定 serverport 来代替 cluster_idregion,为此,您的策略必须允许能够访问 redshift:DescribeClusters 资源的 cluster 操作。

如果您使用可选参数 AutocreateDbGroupsDbName 调用 GetClusterCredentials 操作,您还必须允许这些操作,并允许访问下表中列出的资源。

GetClusterCredentials 参数

操作

资源

Autocreate

redshift:CreateClusterUser

dbuser

DbGroups

redshift:JoinGroup

dbgroup

DbName

NA dbname

有关资源的更多信息,请参阅 Amazon Redshift 资源和操作

您还可以在策略中包括以下条件:

  • redshift:DurationSeconds

  • redshift:DbName

  • redshift:DbUser

有关条件的更多信息,请参阅“在策略中指定条件”。

客户托管式策略示例

本节的用户策略示例介绍如何授予各 Amazon Redshift 操作的权限。当您使用 Amazon Redshift API、Amazon 开发工具包或 Amazon CLI 时,可以使用这些策略。

注意

所有示例都使用美国西部 (俄勒冈) 区域 (us-west-2) 并且包含虚构的账户 ID。

示例 1:为用户授予所有 Amazon Redshift 操作和资源的完全访问权限

以下策略允许访问所有资源上的所有 Amazon Redshift 操作。

{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowRedshift", "Action": [ "redshift:*" ], "Effect": "Allow", "Resource": "*" } ] }

Action 元素中的 redshift:* 值指示 Amazon Redshift 中的所有操作。

示例 2:拒绝用户访问一组 Amazon Redshift 操作

默认情况下,所有权限都将被拒绝。不过,有时您需要明确拒绝对某个或某组操作的访问。以下策略允许访问所有 Amazon Redshift 操作,但明确拒绝对名称以 Delete 开头的任何 Amazon Redshift 操作的访问。该策略适用于 us-west-2 中的所有 Amazon Redshift 资源。

{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowUSWest2Region", "Action": [ "redshift:*" ], "Effect": "Allow", "Resource": "arn:aws:redshift:us-west-2:*" }, { "Sid":"DenyDeleteUSWest2Region", "Action": [ "redshift:Delete*" ], "Effect": "Deny", "Resource": "arn:aws:redshift:us-west-2:*" } ] }

示例 3:允许用户管理集群

以下策略允许用户创建、删除、修改和重启所有集群,但拒绝删除名称以 protected 开头的任何集群的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowClusterManagement", "Action": [ "redshift:CreateCluster", "redshift:DeleteCluster", "redshift:ModifyCluster", "redshift:RebootCluster" ], "Resource": [ "*" ], "Effect": "Allow" }, { "Sid":"DenyDeleteProtected", "Action": [ "redshift:DeleteCluster" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:cluster:protected*" ], "Effect": "Deny" } ] }

示例 4:允许用户授予和撤销快照访问权限

以下策略允许用户(如用户 A)执行以下操作:

  • 授予对从名为 shared 的集群中创建的任何快照的访问权限。

  • 撤消对从快照名称以 shared 开头的 revokable 集群中创建的任何快照的访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowSharedSnapshots", "Action": [ "redshift:AuthorizeSnapshotAccess" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:shared/*" ], "Effect": "Allow" }, { "Sid":"AllowRevokableSnapshot", "Action": [ "redshift:RevokeSnapshotAccess" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:snapshot:*/revokable*" ], "Effect": "Allow" } ] }

如果用户 A 允许用户 B 访问快照,则用户 B 必须拥有以下某项策略才能从该快照还原集群。以下策略允许用户 B 描述集群、从快照还原集群以及创建集群。这些集群的名称必须以 from-other-account 开头。

{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowDescribeSnapshots", "Action": [ "redshift:DescribeClusterSnapshots" ], "Resource": [ "*" ], "Effect": "Allow" }, { "Sid":"AllowUserRestoreFromSnapshot", "Action": [ "redshift:RestoreFromClusterSnapshot" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:snapshot:*/*", "arn:aws:redshift:us-west-2:444455556666:cluster:from-other-account*" ], "Effect": "Allow" } ] }

示例 5:允许用户复制集群快照以及从快照中还原集群

以下策略允许用户复制从名为 big-cluster-1 的集群中创建的任何快照,以及还原名称以 snapshot-for-restore 开头的任何快照。

{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowCopyClusterSnapshot", "Action": [ "redshift:CopyClusterSnapshot" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:snapshot:big-cluster-1/*" ], "Effect": "Allow" }, { "Sid":"AllowRestoreFromClusterSnapshot", "Action": [ "redshift:RestoreFromClusterSnapshot" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:snapshot:*/snapshot-for-restore*", "arn:aws:redshift:us-west-2:123456789012:cluster:*" ], "Effect": "Allow" } ] }

以下示例策略允许访问 Amazon Redshift、Amazon Simple Notification Service (Amazon SNS) 和 Amazon CloudWatch 的所有操作和资源。它还允许对账户下的所有相关 Amazon EC2 资源执行指定的操作。

注意

此示例策略中指定的 Amazon EC2 操作不支持资源级权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowRedshift", "Effect": "Allow", "Action": [ "redshift:*" ], "Resource": [ "*" ] }, { "Sid":"AllowSNS", "Effect": "Allow", "Action": [ "sns:*" ], "Resource": [ "*" ] }, { "Sid":"AllowCloudWatch", "Effect": "Allow", "Action": [ "cloudwatch:*" ], "Resource": [ "*" ] }, { "Sid":"AllowEC2Actions", "Effect": "Allow", "Action": [ "ec2:AllocateAddress", "ec2:AssociateAddress", "ec2:AttachNetworkInterface", "ec2:DescribeAccountAttributes", "ec2:DescribeAddresses", "ec2:DescribeAvailabilityZones", "ec2:DescribeInternetGateways", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs" ], "Resource": [ "*" ] } ] }

示例 7:允许用户使用 Amazon Redshift 控制台标记资源

以下示例策略允许用户使用 Amazon Resource Groups 通过 Amazon Redshift 控制台对资源进行标记。此策略可附加到调用新的或原始 Amazon Redshift 控制台的用户角色。有关标记的更多信息,请参阅在 Amazon Redshift 中为资源添加标签

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Tagging permissions", "Effect": "Allow", "Action": [ "redshift:DeleteTags", "redshift:CreateTags", "redshift:DescribeTags", "tag:UntagResources", "tag:TagResources" ], "Resource": "*" } ] }

使用 GetClusterCredentials 的示例策略

以下策略使用这些示例参数值:

  • 区域:us-west-2

  • Amazon*, 账户123456789012

  • 集群名称: examplecluster

以下策略启用 GetCredentialsCreateClusterUserJoinGroup 操作。仅在 Amazon 用户 ID 与 "AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com" 匹配时,该策略才使用条件密钥以允许 GetClusterCredentialsCreateClusterUser 操作。IAM 访问权限仅对 "testdb" 数据库是必需的。该策略还允许用户参与名为 "common_group" 的组。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetClusterCredsStatement", "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/${redshift:DbUser}", "arn:aws:redshift:us-west-2:123456789012:dbname:examplecluster/testdb", "arn:aws:redshift:us-west-2:123456789012:dbgroup:examplecluster/common_group" ], "Condition": { "StringEquals": { "aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com" } } }, { "Sid": "CreateClusterUserStatement", "Effect": "Allow", "Action": [ "redshift:CreateClusterUser" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/${redshift:DbUser}" ], "Condition": { "StringEquals": { "aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com" } } }, { "Sid": "RedshiftJoinGroupStatement", "Effect": "Allow", "Action": [ "redshift:JoinGroup" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:dbgroup:examplecluster/common_group" ] } ] } } }