

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 将 IAM 角色与集群相关联
<a name="copy-unload-iam-role-associating-with-clusters"></a>

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

## 将 IAM 角色与集群关联所需的权限
<a name="copy-unload-iam-role-associating-with-clusters-perms"></a>

要将 IAM 角色与集群关联，用户必须具有对该 IAM 角色的 `iam:PassRole` 权限。此权限允许管理员限制用户可关联到 Amazon Redshift 集群的 IAM 角色。作为最佳实践，我们建议将权限策略附加到 IAM 角色，然后根据需要将其分配给用户和组。有关更多信息，请参阅 [Amazon Redshift 中的 Identity and Access Management](https://docs.amazonaws.cn/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)。

以下示例显示了一个 IAM policy，该策略可附加到用户以允许该用户执行以下操作：
+ 获取用户的账户拥有的所有 Amazon Redshift 集群的详细信息。
+ 将三个 IAM 角色中的任一角色与两个 Amazon Redshift 集群中的任一集群关联。

------
#### [ JSON ]

****  

```
{
    "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 角色与 Amazon Redshift 集群关联。随后，IAM 角色可以与 COPY 或 UNLOAD 命令或其他 Amazon Redshift 命令一起使用。

有关 IAM 策略的更多信息，请参阅 *IAM 用户指南*中的 [IAM 策略概览](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html)。

## 管理 IAM 角色与集群的关联
<a name="managing-iam-role-association-with-cluster"></a>

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

请注意以下事项：
+ 您可以关联的最大 IAM 角色数量受配额限制。
+ 一个 IAM 角色可与多个 Amazon Redshift 集群关联。
+ 仅当 IAM 角色和集群都归同一 Amazon 账户拥有时，该角色才能与 Amazon Redshift 集群关联。

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

**要管理 IAM 角色关联**

1. 登录到 Amazon Web Services 管理控制台并打开 Amazon Redshift 控制台，网址：[https://console.aws.amazon.com/redshiftv2/](https://console.amazonaws.cn/redshiftv2/)。

1. 在导航菜单上，选择 **Clusters（集群）**,然后选择要更新的集群。

1. 对于 **Actions**（操作），选择 **Manage IAM roles**（管理 IAM 角色）以显示与集群关联的当前列表 IAM 角色。

1. 在 **Manage IAM roles**（管理 IAM 角色）页面上，选择要添加的可用 IAM 角色，然后选择 **Add IAM role**（添加 IAM 角色）。

1. 选择 **Done**（完成）以保存您的更改。

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

要在创建集群后将 IAM 角色与其关联，请在 `--iam-role-arns` 命令的 `create-cluster` 参数中指定 IAM 角色的 Amazon Resource Name (ARN)。调用 `create-cluster` 命令时可以添加的最大 IAM 角色数量受配额限制。

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

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

```
aws redshift create-cluster \
    --cluster-identifier "my-redshift-cluster" \
    --node-type "ra3.4xlarge" \
    --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` 命令时可以添加的最大 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"
```

要取消 IAM 角色与集群的关联，请在 `modify-cluster-iam-roles` 命令的 `--remove-iam-roles` 参数中指定 IAM 角色的 ARN。`modify-cluster-iam-roles`调用 `modify-cluster-iam-roles` 命令时可以删除的最大 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 角色关联
<a name="w2aac37c30c30c35c31b7b9c29"></a>

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

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

```
{
    "Clusters": [
        {
            "ClusterIdentifier": "my-redshift-cluster",
            "NodeType": "ra3.4xlarge",
            "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": "ra3.4xlarge",
            "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 用户指南](https://docs.amazonaws.cn/cli/latest/userguide/cli-chap-welcome.html)*。