使用 IAM 角色授权 COPY、UNLOAD、CREATE EXTERNAL FUNCTION 和 CREATE EXTERNAL SCHEMA 操作 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 IAM 角色授权 COPY、UNLOAD、CREATE EXTERNAL FUNCTION 和 CREATE EXTERNAL SCHEMA 操作

您可使用 COPY 命令将数据加载(或导入)到 Amazon Redshift,使用 UNLOAD 命令从 Amazon Redshift 卸载(或导出)数据。您可以使用 CREATE EXTERNAL FUNCTION 命令创建用户定义的函数,这些函数从 Amazon Lambda 调用函数。

在使用 Amazon Redshift Spectrum 时,您要使用 CREATE EXTERNAL SCHEMA 命令来指定包含您的数据的 Amazon S3 存储桶的位置。当您运行 COPY、UNLOAD 或 CREATE EXTERNAL SCHEMA 命令时,会提供安全凭证。这些凭证授权您的 Amazon Redshift 集群在目标目的地(如 Amazon S3 存储桶)中读取或写入数据。

运行 CREATE EXTERNAL FUNCTION 时,您可以使用 IAM 角色参数提供安全凭证。这些凭证授权您的 Amazon Redshift 集群从 Amazon Lambda 调用 Lambda 函数。提供安全凭证的首选方法是指定一个 Amazon Identity and Access Management (IAM) 角色。对于 COPY 和 UNLOAD,您可以提供 Amazon 访问密钥。有关创建 IAM 角色的信息,请参阅授权 Amazon Redshift 代表您访问其他 Amazon 服务

使用 IAM 角色的步骤如下所示:

  • 创建要与您的 Amazon Redshift 集群结合使用的 IAM 角色。

  • 将 IAM 角色与集群关联。

  • 在调用 COPY、UNLOAD、CREATE EXTERNAL SCHEMA 或 CREATE EXTERNAL FUNCTION 命令时包含 IAM 角色的 ARN。

在本主题中,您将了解如何将 IAM 角色与 Amazon Redshift 集群关联。

将 IAM 角色与集群相关联

在您创建一个 IAM 角色以授权 Amazon Redshift 为您访问其他 Amazon 服务,必须将该角色与 Amazon Redshift 集群关联。在使用角色加载或卸载数据之前,您必须执行此操作。

将 IAM 角色与集群关联所需的权限

要将 IAM 角色与集群关联,IAM 用户必须具有针对该 IAM 角色的 iam:PassRole 权限。此权限允许管理员限制用户可关联到 Amazon Redshift 集群的 IAM 角色。

以下示例显示了一个 IAM 策略,该策略可附加到 IAM 用户以允许该用户执行以下操作:

  • 获取用户的账户拥有的所有 Amazon Redshift 集群的详细信息。

  • 将三个 IAM 角色中的任一角色与两个 Amazon Redshift 集群中的任一集群关联。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "redshift:DescribeClusters", "Resource": "*" }, { "Effect": "Allow", "Action": [ "redshift:ModifyClusterIamRoles", "redshift:CreateCluster" ], "Resource": [ "arn:aws:redshift:us-east-1:123456789012:cluster:my-redshift-cluster", "arn:aws:redshift:us-east-1:123456789012:cluster:my-second-redshift-cluster" ] }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::123456789012:role/MyRedshiftRole", "arn:aws:iam::123456789012:role/SecondRedshiftRole", "arn:aws:iam::123456789012:role/ThirdRedshiftRole" ] } ] }

当 IAM 用户具有相应的权限后,该用户可以将 IAM 角色与 Amazon Redshift 集群关联。随后,IAM 角色可以与 COPY 或 UNLOAD 命令或其他 Amazon Redshift 命令一起使用。

有关 IAM 策略的更多信息,请参阅 IAM 用户指南中的 IAM 策略概览

管理 IAM 角色与集群的关联

您可以在创建集群时将该 IAM 角色与 Amazon Redshift 集群关联。或者您可以修改现有集群并添加或删除一个或多个 IAM 角色关联。

请注意以下事项:

  • 您最多可将 10 个 IAM 角色与一个 Amazon Redshift 集群关联。

  • 一个 IAM 角色可与多个 Amazon Redshift 集群关联。

  • 仅当 IAM 角色和集群都归同一 Amazon 账户拥有时,该角色才能与 Amazon Redshift 集群关联。

使用控制台管理 IAM 角色关联

您可通过以下程序,借助控制台管理集群的 IAM 角色关联。

注意

Amazon Redshift 有新的控制台可用。根据您使用的控制台,选择新控制台原始控制台说明。默认情况下会打开新控制台说明。

要管理 IAM 角色关联

  1. 登录到 Amazon Web Services Management Console并打开 Amazon Redshift 控制台,网址:https://console.aws.amazon.com/redshift/

  2. 在导航菜单上,选择 CLUSTERS(集群),然后选择要更新的集群。

  3. 对于 Actions(操作),选择 Manage IAM roles(管理 IAM 角色)以显示与集群关联的当前列表 IAM 角色。

  4. Manage IAM roles(管理 IAM 角色)页面上,选择要添加的可用 IAM 角色,然后选择 Add IAM role(添加 IAM 角色)。

  5. 选择 Done(完成)以保存您的更改。

要管理 IAM 角色关联

  1. 登录到 Amazon Web Services Management Console并打开 Amazon Redshift 控制台,网址:https://console.aws.amazon.com/redshift/

  2. 在导航窗格中,选择 Clusters

  3. 在列表中,选择要为其管理 IAM 角色的集群。

  4. 选择 See IAM Roles(请参阅 IAM 角色)。

  5. 要将 IAM 角色与集群关联,请选择 Available roles(可用角色)的 IAM 角色。如果您看到在列表中未包含 IAM 角色(例如,如果尚未创建 IAM 角色),您也可以手动输入 IAM 角色。

  6. 要解除 IAM 角色与集群的关联,请为要解除关联的 IAM 角色选择 X

  7. 在修改完集群的 IAM 角色关联后,选择 Apply Changes 以更新与集群关联的 IAM 角色。

Manage IAM Roles 面板将显示您的集群 IAM 角色关联的状态。已与集群关联的角色将显示状态 in-sync。正在与集群关联的角色将显示状态 adding。正与集群解除关联的角色将显示状态 removing

使用 Amazon CLI 管理 IAM 角色关联

您可以使用以下方法,通过 Amazon CLI 管理集群的 IAM 角色关联。

使用 Amazon CLI 将 IAM 角色与集群关联

要在创建集群后将 IAM 角色与其关联,请在 --iam-role-arns 命令的 create-cluster 参数中指定 IAM 角色的 Amazon Resource Name (ARN)。您可在调用 create-cluster 命令时指定最多 10 个要添加的 IAM 角色。

将 IAM 角色与 Amazon Redshift 集群关联和解除两者之间的关联是一个异步过程。您可通过调用 describe-clusters 命令获取所有 IAM 角色集群关联的状态。

以下示例将两个 IAM 角色与新创建的名为 my-redshift-cluster 的集群关联。

aws redshift create-cluster \ --cluster-identifier "my-redshift-cluster" \ --node-type "dc1.large" \ --number-of-nodes 16 \ --iam-role-arns "arn:aws:iam::123456789012:role/RedshiftCopyUnload" \ "arn:aws:iam::123456789012:role/SecondRedshiftRole"

要将 IAM 角色与现有 Amazon Redshift 集群关联,请在 modify-cluster-iam-roles 命令的 --add-iam-roles 参数中指定 IAM 角色的 Amazon Resource Name (ARN)。您可在调用 modify-cluster-iam-roles 命令时指定最多 10 个要添加的 IAM 角色。

以下示例将一个 IAM 角色与名为 my-redshift-cluster 的现有集群关联。

aws redshift modify-cluster-iam-roles \ --cluster-identifier "my-redshift-cluster" \ --add-iam-roles "arn:aws:iam::123456789012:role/RedshiftCopyUnload"
使用 Amazon CLI 将 IAM 角色与集群取消关联

要解除 IAM 角色与集群的关联,请在 --remove-iam-roles 命令的 modify-cluster-iam-roles 参数中指定 IAM 角色的 ARN。您可在调用 modify-cluster-iam-roles 命令时指定最多 10 个要删除的 IAM 角色。

以下示例从名为 123456789012 的集群中删除 my-redshift-cluster Amazon 账户的 IAM 角色的关联。

aws redshift modify-cluster-iam-roles \ --cluster-identifier "my-redshift-cluster" \ --remove-iam-roles "arn:aws:iam::123456789012:role/RedshiftCopyUnload"
使用 Amazon CLI 列出集群的 IAM 角色关联

要列出与 Amazon Redshift 集群关联的所有 IAM 角色以及 IAM 角色关联的状态,请调用 describe-clusters 命令。与集群关联的每个 IAM 角色的 ARN 将在 IamRoles 列表中返回,如以下示例输出所示。

已与集群关联的角色将显示状态 in-sync。正在与集群关联的角色将显示状态 adding。正与集群解除关联的角色将显示状态 removing

{ "Clusters": [ { "ClusterIdentifier": "my-redshift-cluster", "NodeType": "dc1.large", "NumberOfNodes": 16, "IamRoles": [ { "IamRoleArn": "arn:aws:iam::123456789012:role/MyRedshiftRole", "IamRoleApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::123456789012:role/SecondRedshiftRole", "IamRoleApplyStatus": "in-sync" } ], ... }, { "ClusterIdentifier": "my-second-redshift-cluster", "NodeType": "dc1.large", "NumberOfNodes": 10, "IamRoles": [ { "IamRoleArn": "arn:aws:iam::123456789012:role/MyRedshiftRole", "IamRoleApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::123456789012:role/SecondRedshiftRole", "IamRoleApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::123456789012:role/ThirdRedshiftRole", "IamRoleApplyStatus": "in-sync" } ], ... } ] }

有关使用 Amazon CLI 的更多信息,请参阅 Amazon CLI 用户指南