

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

# 创建一个 IAM 角色作为 Amazon Redshift 的默认角色
<a name="default-iam-role"></a>

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

## 在控制台中创建的 IAM 角色
<a name="default-iam-role-overview"></a>

当您使用 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 角色来进行对 AWS 资源的访问。

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

您通过控制台为集群创建的 IAM 角色具有自动附加的 `AmazonRedshiftAllCommandsFullAccess` 托管式策略。此 IAM 角色允许 Amazon Redshift 为 AWS IAM 账户中的资源复制、卸载、查询和分析数据。托管式策略提供对以下操作的访问权限：[COPY](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-authorization.html)、[UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html)、[CREATE EXTERNAL FUNCTION](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html)、[CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)、[CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html) 和 [CREATE LIBRARY](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_LIBRARY.html)。此策略还授予权限，以便为相关 AWS 服务运行 SELECT 语句，例如 Amazon S3、Amazon CloudWatch Logs、Amazon SageMaker AI 和 AWS Glue。

CREATE EXTERNAL FUNCTION、CREATE EXTERNAL SCHEMA、CREATE MODEL 和CREATE LIBRARY 命令都有 `default` 关键字。对于这些命令的此关键字，Amazon Redshift 使用在命令运行时与集群关联的默认 IAM 角色。您可以运行 [DEFAULT\$1IAM\$1ROLE](https://docs.aws.amazon.com/redshift/latest/dg/r_DEFAULT_IAM_ROLE.html) 命令来检查附加至集群的当前默认 IAM 角色。

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

您可以使用 Amazon Redshift 控制台执行以下操作：
+ [默认创建 IAM 角色](#create-iam)
+ [从集群中删除 IAM 角色](#remove-iam)
+ [将 IAM 角色与集群关联](#associate-iam)
+ [将 IAM 角色设置为默认角色](#set-default-iam)
+ [将 IAM 角色设置为不再是集群的默认角色](#clear-default-iam)

## AmazonRedshiftAllCommandsFullAccess 托管式策略的权限
<a name="default-iam-role-permissions"></a>

以下示例显示了 `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 角色
<a name="managing-iam-role-console"></a>

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

### 默认创建 IAM 角色
<a name="create-iam"></a>

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

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

**创建新集群和 IAM 角色，并设置 IAM 角色为新集群的默认角色。**

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

1. 在导航菜单上，选择**集群**。列出您的账户在当前 AWS 区域 区域中的集群。列表中的各个列中显示了每个集群的一部分属性。

1. 选择**创建集群**以创建集群。

1. 按照控制台页面上的说明进行操作，为**集群配置**输入属性。有关这一步骤的更多信息，请参阅[创建集群](create-cluster.md)。

1. （可选）选择 **Load sample data**（加载示例数据），将示例数据集加载到您的 Amazon Redshift 集群，以便开始使用查询编辑器查询数据。

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

1. 按照控制台页面上的说明操作，为 **Cluster configuration**（集群配置）输入属性。

1. 在 **Cluster permissions**（集群权限）下，从 **Manage IAM roles**（管理 IAM 角色）选择 **Create IAM role**（创建 IAM 角色）。

1. 指定一个 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 集群的用户，也可以访问在您的 AWS 账户 中的任何 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）存储桶。

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

1. 选择 **Create cluster**（创建集群）以创建集群。集群可能需要几分钟才可以使用。

### 从集群中删除 IAM 角色
<a name="remove-iam"></a>

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

**从集群中删除 IAM 角色**

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

1. 在导航菜单上，选择**集群**。列出您的账户在当前 AWS 区域 区域中的集群。列表中的各个列中显示了每个集群的一部分属性。

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

1. 在 **Cluster permissions**（集群权限）下，选择要从集群中删除的一个或多个 IAM 角色。

1. 从 **Manage IAM roles**（管理 IAM 角色）中选择 **Remove IAM roles**（删除 IAM 角色）。

### 将 IAM 角色与集群关联
<a name="associate-iam"></a>

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

**将 IAM 角色与您的集群关联**

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

1. 在导航菜单上，选择**集群**。列出您的账户在当前 AWS 区域 区域中的集群。列表中的各个列中显示了每个集群的一部分属性。

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

1. 在 **Cluster permissions**（集群权限）下，选择要与集群关联的一个或多个 IAM 角色。

1. 从 **Manage IAM roles**（管理 IAM 角色）中选择 **Associate IAM roles**（关联 IAM 角色）。

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

1. 选择 **Associate IAM role**（关联 IAM 角色）。

### 将 IAM 角色设置为默认角色
<a name="set-default-iam"></a>

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

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

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

1. 在导航菜单上，选择**集群**。列出您的账户在当前 AWS 区域 区域中的集群。列表中的各个列中显示了每个集群的一部分属性。

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

1. 在 **Cluster permissions**（集群权限）下，从 **Associated IAM roles**（关联 IAM 角色）中选择要设置为集群默认角色的 IAM 角色。

1. 在 **Set default**（设置默认值）下选择 **Make default**（设为默认）。

1. 系统提示时，选择 **Set default**（设置默认值）以确认设置指定的 IAM 角色为默认角色。

### 将 IAM 角色设置为不再是集群的默认角色
<a name="clear-default-iam"></a>

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

**清除 IAM 角色作为集群默认角色的设置**

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

1. 在导航菜单上，选择**集群**。列出您的账户在当前 AWS 区域 区域中的集群。列表中的各个列中显示了每个集群的一部分属性。

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

1. 在 **Cluster permissions**（集群权限）下，从 **Associated IAM roles**（关联 IAM 角色）中选择要设置为集群默认角色的 IAM 角色。

1. 在 **Set default**（设置默认值）下，选择 **Clear default**（清除默认值）。

1. 系统提示时，选择 **Clear default**（清除默认值）以确指定的 IAM 角色不再是默认角色。

## 使用 AWS CLI 管理在集群上创建的 IAM 角色
<a name="managing-iam-role-association-with-cluster-cli"></a>

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

### 创建默认设置为 IAM 角色的 Amazon Redshift 集群
<a name="create-cluster-iam"></a>

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

以下 AWS CLI 命令创建一个 Amazon Redshift 集群和名为 myrole1 的 IAM 角色。这个 AWS 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 角色
<a name="modify-cluster-add-iam"></a>

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

以下 AWS CLI 命令将 `myrole3` 和`myrole4` 添加到集群。

```
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 角色
<a name="modify-cluster-remove-iam"></a>

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

以下 AWS CLI 命令从集群中删除 `myrole3` 和 `myrole4`。

```
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 角色设置为集群的默认角色
<a name="modify-cluster-default-iam-associated"></a>

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

以下 AWS 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 角色设置为集群的默认角色
<a name="modify-cluster-default-iam-not-associated"></a>

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

以下 AWS 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 角色设置为其默认角色
<a name="restore-cluster-iam"></a>

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

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

以下 AWS 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"
            }
        ],
        ...
    }
}
```