

 从补丁 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="zero-etl-using.redshift-iam"></a>

要将数据从集成源复制到 Amazon Redshift 数据仓库中，您必须首先添加以下两个实体：
+ *已授权的主体* – 标识可以在数据仓库中创建零 ETL 集成的用户或角色。
+ *已授权的集成源* – 标识可以更新数据仓库的源数据库。

您可以从 Amazon Redshift 控制台的**资源策略**选项卡或者使用 Amazon Redshift `PutResourcePolicy` API 操作，配置授权主体和授权集成源。

## 添加已授权的主体
<a name="zero-etl-using.redshift-iam-ap"></a>

要在您的 Redshift Serverless 工作组或预置集群中创建零 ETL 集成，需要授予对关联命名空间或预置集群的访问权限。

如果满足以下两个条件，则可以跳过此步骤：
+ 拥有 Redshift Serverless 工作组或预置集群的 AWS 账户也拥有源数据库。
+ 该主体与基于身份的 IAM 策略相关联，该策略使其有权在此 Redshift Serverless 命名空间或预置集群中创建零 ETL 集成。

### 将已授权的主体添加到 Amazon Redshift Serverless 命名空间
<a name="iam-ap-serverless"></a>

1. 在 Amazon Redshift 控制台的左侧导航窗格中，选择 **Redshift Serverless**。

1. 选择**命名空间配置**，选择您的命名空间，然后转到**资源策略**选项卡。

1. 选择**添加已授权的主体**。

1. 对于要添加的每个已授权的主体，输入您想要授予访问权限的 AWS 用户或角色的 ARN，或者 AWS 账户的 ID，以便他们能在命名空间中创建零 ETL 集成。账户 ID 存储为 ARN。

1. 选择**保存更改**。

### 向 Amazon Redshift 预置集群添加已授权的主体
<a name="iam-ap-cluster"></a>

1. 在 Amazon Redshift 控制台的左侧导航窗格中，选择**预置集群控制面板**。

1. 选择**集群**，然后选择集群并转到**资源策略**选项卡。

1. 选择**添加已授权的主体**。

1. 对于要添加的每个已授权的主体，输入您想要授予访问权限的 AWS 用户或角色的 ARN，或者 AWS 账户的 ID，以便他们能在集群中创建零 ETL 集成。账户 ID 存储为 ARN。

1. 选择**保存更改**。

## 添加已授权的集成源
<a name="zero-etl-using.redshift-iam-air"></a>

要允许您的源更新 Amazon Redshift 数据仓库，您必须将其作为已授权的集成源添加到命名空间。

### 向 Amazon Redshift Serverless 命名空间添加已授权的集成源
<a name="iam-air-serverless"></a>

1. 在 Amazon Redshift 控制台中，转到**无服务器控制面板**。

1. 选择命名空间的名称。

1. 转到**资源策略**选项卡。

1. 选择**添加已授权的集成源**。

1. 指定用于零 ETL 集成的源的 ARN。

**注意**  
移除已授权的集成源会阻止数据复制到命名空间。此操作会停用从该源到此命名空间的所有零 ETL 集成。

### 向 Amazon Redshift 预置集群添加已授权的集成源
<a name="iam-air-cluster"></a>

1. 在 Amazon Redshift 控制台中，转到**预置集群控制面板**。

1. 选择预置集群的名称。

1. 转到**资源策略**选项卡。

1. 选择**添加已授权的集成源**。

1. 指定作为零 ETL 集成的数据来源的源 ARN。

**注意**  
移除已授权的集成源会阻止数据复制到预置集群。此操作会停用从该源到此 Amazon Redshift 预置集群的所有零 ETL 集成。

## 使用 Amazon Redshift API 配置授权
<a name="zero-etl-using.resource-policies"></a>

您可以使用 Amazon Redshift API 操作来配置用于零 ETL 集成的资源策略。

要控制可以在命名空间中创建入站集成的源，请创建资源策略并将其附加到命名空间。使用资源策略，您可以指定有权访问集成的源。资源策略附加到目标数据仓库的命名空间，以允许源创建入站集成，将数据从源中复制到 Amazon Redshift。

以下是资源策略示例。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "redshift.amazonaws.com"
      },
      "Action": "redshift:AuthorizeInboundIntegration",
      "Resource": "arn:aws:redshift:*:*:integration:*",
      "Condition": {
        "StringEquals": {
          "aws:SourceArn": "arn:aws:rds:*:111122223333:cluster:*"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
       "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": "redshift:CreateInboundIntegration",
      "Resource": "arn:aws:redshift:*:*:integration:*"
    }
  ]
}
```

------

以下总结了可用于为集成配置资源策略的 Amazon Redshift API 操作：
+ 使用 [PutResourcePolicy](https://docs.aws.amazon.com/redshift/latest/APIReference/API_PutResourcePolicy.html) API 操作来使资源策略生效。当您提供其他资源策略时，将替换该资源上之前的资源策略。使用前面的资源策略示例，该策略授予执行以下操作的权限：
  + `CreateInboundIntegration` – 允许源主体创建入站集成，以便将数据从源复制到目标数据仓库。
  + `AuthorizeInboundIntegration` – 允许 Amazon Redshift 持续验证目标数据仓库是否能够接收从源 ARN 复制的数据。
+ 使用 [GetResourcePolicy](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetResourcePolicy.html) API 操作可查看现有资源策略。
+ 使用 [DeleteResourcePolicy](https://docs.aws.amazon.com/redshift/latest/APIReference/API_DeleteResourcePolicy.html) API 操作可从资源中移除资源策略。

要更新资源策略，您也可以使用 [put-resource-policy](https://docs.aws.amazon.com/cli/latest/reference/redshift/put-resource-policy.html) AWS CLI 命令。例如，要在 DynamoDB 源的 Amazon Redshift 命名空间 ARN 上设置资源策略，请运行类似于以下内容的 AWS CLI 命令。

```
aws redshift put-resource-policy \
--policy file://rs-rp.json \
--resource-arn "arn:aws:redshift-serverless:us-east-1:123456789012:namespace/cc4ffe56-ad2c-4fd1-a5a2-f29124a56433"
```

其中 `rs-rp.json` 包含：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "redshift.amazonaws.com"
            },
            "Action": "redshift:AuthorizeInboundIntegration",
            "Resource": "arn:aws:redshift-serverless:us-east-1:123456789012:namespace/cc4ffe56-ad2c-4fd1-a5a2-f29124a56433",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:dynamodb:us-east-1:123456789012:table/test_ddb"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "redshift:CreateInboundIntegration",
            "Resource": "arn:aws:redshift-serverless:us-east-1:123456789012:namespace/cc4ffe56-ad2c-4fd1-a5a2-f29124a56433"
        }
    ]
}
```

------