创建一个 IAM 角色作为 Amazon Redshift 的默认角色 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

创建一个 IAM 角色作为 Amazon Redshift 的默认角色

当您通过 Redshift 控制台创建 IAM 角色时,Amazon Redshift 以编程方式在您的 Amazon Web Services 账户 中创建角色,并自动附上现有的 Amazon 托管式策略。这种方法意味着您可以留在 Redshift 控制台上,而不必切换到 IAM 控制台创建角色。要更精细地控制在 Amazon Redshift 控制台上创建的现有 IAM 角色的权限,您可以将自定义托管式策略附加至 IAM 角色。

在控制台上创建 IAM 角色概述

当您使用 Amazon Redshift 控制台创建 IAM 角色时,Amazon Redshift 会跟踪所有通过控制台创建的 IAM 角色。Amazon Redshift 预先选择最新的默认 IAM 角色来创建所有新集群,以及从快照中还原集群。

通过 Amazon Redshift 控制台创建一个 IAM 角色,该角色拥有的策略包括可运行 SQL 命令的权限。这些命令包括 COPY、UNLOAD、CREATE EXTERNAL FUNCTION、CREATE EXTERNAL TABLE、CREATE EXTERNAL SCHEMA、CREATE MODEL 或 CREATE LIBRARY。或者,您可以更精细地控制用户通过创建自定义策略并将其附加到 IAM 角色来进行对 Amazon 资源的访问。

当您使用控制台创建 IAM 角色并将其设置为集群的默认角色时,您无需提供 IAM 角色的 Amazon Resource Name(ARN)即可执行身份验证和授权。

在 IAM 控制台上创建角色。

您通过控制台为集群创建的 IAM 角色具有自动附加的 AmazonRedshiftAllCommandsFullAccess 托管式策略。此 IAM 角色允许 Amazon Redshift 为 Amazon IAM 账户中的资源复制、卸载、查询和分析数据。托管式策略提供对以下操作的访问权限:COPYUNLOADCREATE EXTERNAL FUNCTIONCREATE EXTERNAL SCHEMACREATE MODELCREATE LIBRARY。此策略还授予权限,以便为相关 Amazon 服务运行 SELECT 语句,例如Simple Storage Service(Amazon S3)、Amazon CloudWatch Logs、Amazon SageMaker 和 Amazon Glue。

CREATE EXTERNAL FUNCTION、CREATE EXTERNAL SCHEMA、CREATE MODEL 和CREATE LIBRARY 命令都有 default 关键字。对于这些命令的此关键字,Amazon Redshift 使用在命令运行时与集群关联的默认 IAM 角色。您可以运行 DEFAULT_IAM_ROLE 命令来检查附加至集群的当前默认 IAM 角色。

要控制已有 IAM 角色(设置为 Redshift 集群默认角色)的访问权限,请使用 AUSMEROLE 权限。当数据库用户和组运行前面列出的命令时,此访问控制适用于这些数据库用户和组。向用户或组授予 IAM 角色的 ASSUMEROLE 权限后,该用户或组可以在运行命令时代入该角色。ASSUMEROLE 权限允许您根据需要授予用户相应命令的访问权限。

您可以使用 Amazon Redshift 控制台执行以下操作:

AmazonRedshiftAllCommandsFullAccess 托管式策略的权限

以下示例显示了 AmazonRedshiftAllCommandsFullAccess 中的权限:托管式策略允许对集群默认的角色(IAM 角色)执行某些操作。附加了权限策略的 IAM 角色可以授权用户或组进行某些操作,以及不允许某些操作。使用这些权限,您可以从 Simple Storage Service(Amazon S3)运行 COPY 命令、运行 UNLOAD,然后使用 CREATE MODEL 命令。

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

以下示例显示了 AmazonRedshiftAllCommandsFullAccess 中的权限:托管式策略允许对集群默认的角色(IAM 角色)执行某些操作。附加了权限策略的 IAM 角色可以授权用户或组进行某些操作,以及不允许某些操作。如果有以下权限,您可以运行 CREATE EXTERNAL FUNCTION 命令。

{ "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:*:*:function:*redshift*" }

以下示例显示了 AmazonRedshiftAllCommandsFullAccess 中的权限:托管式策略允许对集群默认的角色(IAM 角色)执行某些操作。附加了权限策略的 IAM 角色可以授权用户或组进行某些操作,以及不允许某些操作。如果具有以下权限,您可以运行 Amazon Redshift Spectrum 所需的 CREATE EXTERNAL SCHEMA 和 CREATE EXTERNAL TABLE 命令。

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

以下示例显示了 AmazonRedshiftAllCommandsFullAccess 中的权限:托管式策略允许对集群默认的角色(IAM 角色)执行某些操作。附加了权限策略的 IAM 角色可以授权用户或组进行某些操作,以及不允许某些操作。如果具有以下权限,您可以使用联合查询运行 CREATE EXTERNAL SCHEMA 命令。

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

使用控制台管理为集群创建的 IAM 角色

要创建、修改和删除从 Amazon Redshift 控制台创建的 IAM 角色,请使用控制台上的 Clusters(集群)部分。

默认创建 IAM 角色

在控制台上,您可以为集群创建一个 IAM 角色,并自动为该角色附上 AmazonRedshiftAllCommandsFullAccess 策略。这个新角色让 Amazon Redshift 能够在您的 IAM 角色中复制、加载、查询和分析 Amazon 资源的数据。

一个集群只能有一个默认的 IAM 角色。如果现有 IAM 角色已设置为默认角色,当您创建另一个 IAM 角色并设置为集群默认角色时,新的 IAM 角色将替换现有的 IAM 角色成为默认角色。

创建新集群和 IAM 角色,并设置 IAM 角色为新集群的默认角色。
  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Redshift 控制台:https://console.aws.amazon.com/redshiftv2/

  2. 在导航菜单上,选择 Clusters(集群)。列出您的账户在当前 Amazon Web Services 区域 区域中的集群。列表中的各个列中显示了每个集群的一部分属性。

  3. 选择创建集群以创建集群。

  4. 按照控制台页面上的说明进行操作,为集群配置输入属性。有关这一步骤的更多信息,请参阅创建集群

  5. (可选)选择 Load sample data(加载示例数据),将示例数据集加载到您的 Amazon Redshift 集群,以便开始使用查询编辑器查询数据。

    如果您在防火墙的后面,则数据库端口必须是接受入站连接的开放端口。

  6. 按照控制台页面上的说明操作,为 Cluster configuration(集群配置)输入属性。

  7. Cluster permissions(集群权限)下,从 Manage IAM roles(管理 IAM 角色)选择 Create IAM role(创建 IAM 角色)。

  8. 指定一个 Simple Storage Service(Amazon S3)存储桶,让 IAM 角色通过以下方法访问:

    • 选择 No additional Simple Storage Service(Amazon S3)bucket [没有额外 Simple Storage Service(Amazon S3)存储桶],在不指定特定 Simple Storage Service(Amazon S3)存储桶的情况下创建 IAM 角色。

    • 选择 Any Simple Storage Service(Amazon S3)bucket [任何 Simple Storage Service(Amazon S3)存储桶],允许有权限访问您的 Amazon Redshift 集群的用户,也可以访问在您的 Amazon Web Services 账户 中的任何 Simple Storage Service(Amazon S3)存储桶及其内容。

    • 选择 Specific Simple Storage Service(Amazon S3)buckets [特定 Simple Storage Service(Amazon S3)存储桶],为创建的 IAM 角色指定一个或多个 Simple Storage Service(Amazon S3)存储桶以供访问。然后从表中选择一个或多个 Simple Storage Service(Amazon S3)存储桶。

  9. 选择创建 IAM 角色作为默认角色。Amazon Redshift 会自动创建 IAM 角色并将其设置为集群的默认角色。

  10. 选择 Create cluster(创建集群)以创建集群。集群可能需要几分钟才可以使用。

从集群中删除 IAM 角色

您可以从集群中移除一个或多个 IAM 角色。

从集群中删除 IAM 角色
  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Redshift 控制台:https://console.aws.amazon.com/redshiftv2/

  2. 在导航菜单上,选择 Clusters(集群)。列出您的账户在当前 Amazon Web Services 区域 区域中的集群。列表中的各个列中显示了每个集群的一部分属性。

  3. 选择要从中删除的 IAM 角色的集群的名称。

  4. Cluster permissions(集群权限)下,选择要从集群中删除的一个或多个 IAM 角色。

  5. Manage IAM roles(管理 IAM 角色)中选择 Remove IAM roles(删除 IAM 角色)。

将 IAM 角色与集群关联

您可以将一个或多个 IAM 角色与集群关联。

将 IAM 角色与您的集群关联
  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Redshift 控制台:https://console.aws.amazon.com/redshiftv2/

  2. 在导航菜单上,选择 Clusters(集群)。列出您的账户在当前 Amazon Web Services 区域 区域中的集群。列表中的各个列中显示了每个集群的一部分属性。

  3. 选择 IAM 角色需要关联的集群。

  4. Cluster permissions(集群权限)下,选择要与集群关联的一个或多个 IAM 角色。

  5. Manage IAM roles(管理 IAM 角色)中选择 Associate IAM roles(关联 IAM 角色)。

  6. 选择一个或多个 IAM 角色并与您的集群关联。

  7. 选择 Associate IAM role(关联 IAM 角色)。

将 IAM 角色设置为默认角色

您可以将 IAM 角色设置为集群的默认角色。

将 IAM 角色设置为集群的默认角色
  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Redshift 控制台:https://console.aws.amazon.com/redshiftv2/

  2. 在导航菜单上,选择 Clusters(集群)。列出您的账户在当前 Amazon Web Services 区域 区域中的集群。列表中的各个列中显示了每个集群的一部分属性。

  3. 选择要为其设置默认 IAM 角色的集群。

  4. Cluster permissions(集群权限)下,从 Associated IAM roles(关联 IAM 角色)中选择要设置为集群默认角色的 IAM 角色。

  5. Set default(设置默认值)下选择 Make default(设为默认)。

  6. 系统提示时,选择 Set default(设置默认值)以确认设置指定的 IAM 角色为默认角色。

将 IAM 角色设置为不再是集群的默认角色

您可以使 IAM 角色不再成为集群的默认角色。

清除 IAM 角色作为集群默认角色的设置
  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Redshift 控制台:https://console.aws.amazon.com/redshiftv2/

  2. 在导航菜单上,选择 Clusters(集群)。列出您的账户在当前 Amazon Web Services 区域 区域中的集群。列表中的各个列中显示了每个集群的一部分属性。

  3. 选择 IAM 角色需要关联的集群。

  4. Cluster permissions(集群权限)下,从 Associated IAM roles(关联 IAM 角色)中选择要设置为集群默认角色的 IAM 角色。

  5. Set default(设置默认值)下,选择 Clear default(清除默认值)。

  6. 系统提示时,选择 Clear default(清除默认值)以确指定的 IAM 角色不再是默认角色。

使用 Amazon CLI 管理在集群上创建的 IAM 角色

您可以使用 Amazon CLI 管理在集群上创建的 IAM 角色

创建默认设置为 IAM 角色的 Amazon Redshift 集群

要创建 Amazon Redshift 集群并将 IAM 角色设为其默认角色,请使用 aws redshift create-cluster Amazon CLI 命令。

以下 Amazon CLI 命令创建一个 Amazon Redshift 集群和名为 myrole1 的 IAM 角色。这个 Amazon CLI 命令还将 myrole1 设置为集群的默认值。

aws redshift create-cluster \ --node-type dc2.large \ --number-of-nodes 2 \ --master-username adminuser \ --master-user-password TopSecret1 \ --cluster-identifier mycluster \ --iam-roles 'arn:aws:iam::012345678910:role/myrole1' 'arn:aws:iam::012345678910:role/myrole2' \ --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole1'

以下代码片段是一个反应示例。

{ "Cluster": { "ClusterIdentifier": "mycluster", "NodeType": "dc2.large", "MasterUsername": "adminuser", "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "IamRoles": [ { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "ApplyStatus": "adding" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "ApplyStatus": "adding" } ] ... } }

向 Amazon Redshift 集群添加一个或多个 IAM 角色

要添加与集群关联的一个或多个 IAM 角色,请使用 aws redshift modify-cluster-iam-roles Amazon CLI 命令。

以下 Amazon CLI 命令将 myrole3myrole4 添加到集群。

aws redshift modify-cluster-iam-roles \ --cluster-identifier mycluster \ --add-iam-roles 'arn:aws:iam::012345678910:role/myrole3' 'arn:aws:iam::012345678910:role/myrole4'

以下代码片段是一个反应示例。

{ "Cluster": { "ClusterIdentifier": "mycluster", "NodeType": "dc2.large", "MasterUsername": "adminuser", "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "IamRoles": [ { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole3", "ApplyStatus": "adding" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole4", "ApplyStatus": "adding" } ], ... } }

从 Amazon Redshift 集群中删除一个或多个 IAM 角色

要删除与集群关联的一个或多个 IAM 角色,请使用 aws redshift modify-cluster-iam-roles Amazon CLI 命令。

以下 Amazon CLI 命令从集群中删除 myrole3myrole4

aws redshift modify-cluster-iam-roles \ --cluster-identifier mycluster \ --remove-iam-roles 'arn:aws:iam::012345678910:role/myrole3' 'arn:aws:iam::012345678910:role/myrole4'

以下代码片段是一个反应示例。

{ "Cluster": { "ClusterIdentifier": "mycluster", "NodeType": "dc2.large", "MasterUsername": "adminuser", "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "IamRoles": [ { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole3", "ApplyStatus": "removing" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole4", "ApplyStatus": "removing" } ], ... } }

将关联的 IAM 角色设置为集群的默认角色

要将关联的 IAM 角色设置为集群的默认角色,请使用 aws redshift modify-cluster-iam-roles Amazon CLI 命令。

以下 Amazon CLI 命令集设置 myrole2 为集群默认角色。

aws redshift modify-cluster-iam-roles \ --cluster-identifier mycluster \ --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole2'

以下代码片段是一个反应示例。

{ "Cluster": { "ClusterIdentifier": "mycluster", "NodeType": "dc2.large", "MasterUsername": "adminuser", "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "IamRoles": [ { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "ApplyStatus": "in-sync" } ], ... } }

将未关联的 IAM 角色设置为集群的默认角色

要将未关联的 IAM 角色设置为集群的默认角色,请使用 aws redshift modify-cluster-iam-roles Amazon CLI 命令。

以下 Amazon CLI 命令把 myrole2 添加到 Amazon Redshift 集群,然后将其设置为集群的默认角色。

aws redshift modify-cluster-iam-roles \ --cluster-identifier mycluster \ --add-iam-roles 'arn:aws:iam::012345678910:role/myrole3' \ --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole3'

以下代码片段是一个反应示例。

{ "Cluster": { "ClusterIdentifier": "mycluster", "NodeType": "dc2.large", "MasterUsername": "adminuser", "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole3", "IamRoles": [ { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole3", "ApplyStatus": "adding" } ], ... } }

从快照还原集群,并将 IAM 角色设置为其默认角色

从快照还原集群时,您可以关联现有 IAM 角色,也可以创建一个新角色并将其设置为集群的默认角色。

要从快照还原 Amazon Redshift 集群,并将 IAM 角色设置为集群默认角色,请使用 aws redshift restore-from-cluster-snapshot Amazon CLI 命令。

以下 Amazon CLI 命令从快照还原集群,并将 myrole2 设置为集群默认角色。

aws redshift restore-from-cluster-snapshot \ --cluster-identifier mycluster-clone \ --snapshot-identifier my-snapshot-id --iam-roles 'arn:aws:iam::012345678910:role/myrole1' 'arn:aws:iam::012345678910:role/myrole2' \ --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole1'

以下代码片段是一个反应示例。

{ "Cluster": { "ClusterIdentifier": "mycluster-clone", "NodeType": "dc2.large", "MasterUsername": "adminuser", "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "IamRoles": [ { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "ApplyStatus": "adding" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "ApplyStatus": "adding" } ], ... } }