

 从补丁 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/)。

# 管理 Amazon Redshift 资源的访问权限的概览
<a name="redshift-iam-access-control-overview"></a>

每个 AWS 资源都归某个 AWS 账户所有，创建或访问这些资源的权限由权限策略控制。账户管理员可以向 IAM 身份（即：用户、组和角色）附加权限策略，某些服务（如 AWS Lambda）也支持向资源附加权限策略。

**注意**  
*账户管理员*（或管理员用户）是具有管理员权限的用户。有关更多信息，请参阅 *IAM 用户指南*中的 [IAM 最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

在授予权限时，您要决定谁获得权限，获得对哪些资源的权限，以及您允许对这些资源执行的具体操作。

## Amazon Redshift 资源和操作
<a name="redshift-iam-accesscontrol.actions-and-resources"></a>

Amazon Redshift 提供服务特定的资源、操作和条件上下文键以在 IAM 权限策略中使用。

### Amazon Redshift、Amazon Redshift Serverless、Amazon Redshift 数据 API 和Amazon Redshift 查询编辑器 v2 访问权限
<a name="redshift-policy-resources.resource-permissions"></a>

在设置 [访问控制](redshift-iam-authentication-access-control.md#redshift-iam-accesscontrol) 时，您编写可附加到 IAM 身份的权限策略（基于身份的策略）。有关详细参考信息，请参阅《服务授权参考》**中的以下主题：
+ 对于 Amazon Redshift，请参阅 [Amazon Redshift 的操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html)，它们使用 `redshift:` 前缀。
+ 对于 Amazon Redshift Serverless，请参阅 [Amazon Redshift Serverless 的操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshiftserverless.html)，它们使用 `redshift-serverless:` 前缀。
+ 对于 Amazon Redshift 数据 API，请参阅 [Amazon Redshift 数据 API 的操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshiftdataapi.html)，它们使用 `redshift-data:` 前缀。
+ 对于 Amazon Redshift 查询编辑器 v2，请参阅 [AWS SQL Workbench（Amazon Redshift 查询编辑器 v2）的操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssqlworkbench.html)，它们使用 `sqlworkbench:` 前缀。

  查询编辑器 v2 包括仅限权限操作，这些操作不会直接响应 API 操作。《Service Authorization Reference》**中用 `[permission only]` 指明了这些操作。

《服务授权参考》**包含有关可在 IAM 策略中使用的 API 操作的信息。它还包括您可以授予权限的 AWS 资源以及您可以针对细粒度访问控制包含的条件键。有关条件的更多信息，请参阅“[使用 IAM 策略条件进行精细访问控制](#redshift-policy-resources.conditions)”。

您需要在策略的 `Action` 字段中指定操作、在策略的 `Resource` 字段中指定资源值、在策略的 `Condition` 字段中指定条件。要为 Amazon Redshift 指定操作，请在 API 操作名称之前使用 `redshift:` 前缀（例如 `redshift:CreateCluster`）。

## 了解资源所有权
<a name="redshift-iam-access-control-resource-ownership"></a>

*资源所有者*是创建资源的 AWS 账户。也就是说，资源拥有者是 *主体实体*（根账户、IAM 用户或 IAM 角色）的 AWS 账户，该账户会对创建资源的请求进行身份验证。以下示例说明了它的工作原理：
+ 如果您使用 AWS 账户的根账户凭证创建数据库集群，则您的 AWS 账户即为该 Amazon Redshift 资源的拥有者。
+ 如果您在您的 AWS 账户中创建具有创建 Amazon Redshift 资源的权限的 IAM 角色，则能够担任该角色的任何人都可以创建 Amazon Redshift 资源。该角色所属的您的 AWS 账户拥有这些 Amazon Redshift 资源。
+ 如果您在 AWS 账户中创建 IAM 用户并对该用户授予创建 Amazon Redshift 资源的权限，则该用户也可以创建 Amazon Redshift 资源。但是，该用户所属的 AWS 账户拥有这些 Amazon Redshift 资源。在大多数情况下，不建议使用此方法。我们建议创建 IAM 角色并向该角色附加权限，然后将该角色分配给用户。

## 管理对资源的访问
<a name="redshift-iam-accesscontrol-managingaccess"></a>

*权限策略*规定谁可以访问哪些内容。下一节介绍创建权限策略时的可用选项。

**注意**  
本节讨论如何在 Amazon Redshift 范围内使用 IAM。这里不提供有关 IAM 服务的详细信息。有关完整的 IAM 文档，请参阅 *IAM 用户指南*中的[什么是 IAM？](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。有关 IAM 策略语法和说明的信息，请参阅 *IAM 用户指南*中的 [AWS IAM 策略参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

附加到 IAM 身份的策略称作*基于身份* 的策略（IAM 策略），附加到资源的策略称作*基于资源* 的策略。Amazon Redshift 只支持基于身份的策略（IAM 策略）。

### 基于身份的策略（IAM 策略）
<a name="redshift-iam-manage-access-identity-based"></a>

您可以通过将策略附加到 IAM 角色，然后将该角色分配给用户或组来分配权限。下面的示例策略包含为您的 AWS 账户创建、删除、修改和重启 Amazon Redshift 集群的权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowManageClusters",
      "Effect":"Allow",
      "Action": [
        "redshift:CreateCluster",
        "redshift:DeleteCluster",
        "redshift:ModifyCluster",
        "redshift:RebootCluster"
      ],
      "Resource":"*"
    }
  ]
}
```

------

有关将基于身份的策略与 Amazon Redshift 结合使用的更多信息，请参阅[将基于身份的策略（IAM 策略）用于 Amazon Redshift](redshift-iam-access-control-identity-based.md)。有关用户、组、角色和权限的更多信息，请参阅 *IAM 用户指南*中的[身份（用户、组和角色）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。

### 基于资源的策略
<a name="redshift-iam-access-control-resource-based"></a>

其他服务（如 Amazon S3）还支持基于资源的权限策略。例如，您可以将策略附加到 S3 桶以管理对该桶的访问权限。Amazon Redshift 不支持基于资源的策略。

## 指定策略元素：操作、效果、资源和主体
<a name="redshift-iam-access-control-specify-actions"></a>

对于每个 Amazon Redshift 资源（请参阅 [Amazon Redshift 资源和操作](#redshift-iam-accesscontrol.actions-and-resources)），该服务都定义了一组 API 操作（请参阅[操作](https://docs.aws.amazon.com/redshift/latest/APIReference/API_Operations.html)）。为授予这些 API 操作的权限，Amazon Redshift 定义了一组您可以在策略中指定的操作。执行一个 API 操作可能需要多个操作的权限。

以下是基本的策略元素：
+ **资源** - 在策略中，您可以使用 Amazon 资源名称（ARN）标识策略应用到的资源。有关更多信息，请参阅 [Amazon Redshift 资源和操作](#redshift-iam-accesscontrol.actions-and-resources)。
+ **操作** – 您可以使用操作关键字标识要允许或拒绝的资源操作。例如，`redshift:DescribeClusters` 权限允许执行 Amazon Redshift `DescribeClusters` 操作的用户权限。
+ **效果** — 您可以指定当用户请求特定操作（可以是允许或拒绝）时的效果。如果没有显式授予（允许）对资源的访问权限，则隐式拒绝访问。您也可显式拒绝对资源的访问，这样可确保用户无法访问该资源，即使有其他策略授予了访问权限的情况下也是如此。
+ **主体**：在基于身份的策略（IAM 策略）中，附加了策略的用户是隐式主体。对于基于资源的策略，您可以指定要接收权限的用户、账户、服务或其他实体 (仅适用于基于资源的策略)。Amazon Redshift 不支持基于资源的策略。

有关 IAM 策略语法和描述的更多信息，请参阅 *IAM 用户指南*中的 [AWS IAM 策略参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

有关显示所有 Amazon Redshift API 操作及其适用的资源的表，请参阅[Amazon Redshift、Amazon Redshift Serverless、Amazon Redshift 数据 API 和Amazon Redshift 查询编辑器 v2 访问权限](#redshift-policy-resources.resource-permissions)。



## 在策略中指定条件
<a name="redshift-policy-resources.specifying-conditions"></a>

当您授予权限时，可使用访问策略语言来指定规定策略何时生效的条件。例如，您可能希望策略仅在特定日期后应用。有关使用访问策略语言指定条件的更多信息，请参阅 *IAM 用户指南*中的 [IAM JSON 策略元素：条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。

要确定权限策略适用的条件，请在 IAM 权限策略中包含元素 `Condition`。例如，您可以创建一个策略，允许用户使用 `redshift:CreateCluster` 操作来创建集群，也可以添加 `Condition` 元素来限制用户只能在特定的区域中创建集群。有关详细信息，请参阅[使用 IAM 策略条件进行精细访问控制](#redshift-policy-resources.conditions)。有关所有条件键值及其适用的 Amazon Redshift 操作和资源的列表，请参阅[Amazon Redshift、Amazon Redshift Serverless、Amazon Redshift 数据 API 和Amazon Redshift 查询编辑器 v2 访问权限](#redshift-policy-resources.resource-permissions)。

### 使用 IAM 策略条件进行精细访问控制
<a name="redshift-policy-resources.conditions"></a>

在 Amazon Redshift 中，您可以根据资源的标签使用条件键来限制对资源的访问。以下是常见的 Amazon Redshift 条件键。


| 条件键 | 描述 | 
| --- | --- | 
| `aws:RequestTag` | 要求用户在创建资源时添加标签密钥（名称）和值。有关更多信息，请参阅 *IAM 用户指南*中的 [aws:RequestTag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)。 | 
| `aws:ResourceTag` | 根据特定标签密钥和值限制用户对资源的访问。有关更多信息，请参阅 *IAM 用户指南*中的 [aws:ResourceTag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag)。 | 
| `aws:TagKeys` | 使用此键可将请求中的标签键与您在策略中指定的键进行比较。有关更多信息，请参阅 *IAM 用户指南*中的 [aws:TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys)。 | 

有关标签的信息，请参阅[在 Amazon Redshift 中为资源添加标签](amazon-redshift-tagging.md)。

有关支持 `redshift:RequestTag` 和 `redshift:ResourceTag` 条件键的 API 操作的列表，请参阅 [Amazon Redshift、Amazon Redshift Serverless、Amazon Redshift 数据 API 和Amazon Redshift 查询编辑器 v2 访问权限](#redshift-policy-resources.resource-permissions)。

以下条件键可用于 Amazon Redshift GetClusterCredentials 操作。


| 条件键 | 描述 | 
| --- | --- | 
| `redshift:DurationSeconds` | 限制可为持续时间指定的秒数。 | 
| `redshift:DbName` | 限制可指定的数据库名称。 | 
| `redshift:DbUser` | 限制可指定的数据库用户名。 | 

#### 示例 1：使用 aws:ResourceTag 条件键限制访问
<a name="redshift-policy-resources.resource-permissions-example1"></a>

使用以下 IAM 策略，仅允许用户针对位于 `us-west-2` 区域的特定 AWS 账户修改标签名为 `environment`、值为 `test` 的 Amazon Redshift 集群。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid":"AllowModifyTestCluster",
        "Effect": "Allow",
        "Action": "redshift:ModifyCluster",
        "Resource": "arn:aws:redshift:us-west-2:123456789012:cluster:*",
        "Condition": {
            "StringEquals": {
                "aws:ResourceTag/environment": "test"
            }
        }
    }
}
```

------

#### 示例 2：使用 aws:RequestTag 条件键限制访问
<a name="redshift-policy-resources.resource-permissions-example2"></a>

使用以下 IAM 策略，仅允许用户在创建集群的命令包含名为 `usage`、值为 `production` 的标签时创建 Amazon Redshift 集群。带有 `aws:TagKeys` 和 `ForAllValues` 修饰符的条件指定只能在请求中指定 `costcenter` 和 `usage` 键。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid":"AllowCreateProductionCluster",
        "Effect": "Allow",
        "Action": [
            "redshift:CreateCluster",
            "redshift:CreateTags"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:RequestTag/usage": "production"
            },
            "ForAllValues:StringEquals": {
                "aws:TagKeys": [
                    "costcenter",
                    "usage"
                ]
            }
        }
    }
}
```

------