

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

# 共享快照
<a name="working-with-snapshot-share-snapshot"></a>

您可以授权其他 Amazon 客户账户访问现有手动快照，以与其共享该快照。对于每个快照，最多可以授权 20 个客户账户；对于每个 Amazon Key Management Service (Amazon KMS) 密钥，则最多可以授权 100 个。例如，如果您有 10 个快照，它们使用了一个 KMS 密钥加密，那么您可以授权 10 个 Amazon 账户来还原每个快照，或者是其他组合：总共 100 账户以及每个快照不超过 20 个账户。然后，以用户身份登录其中一个已授权账户的人可以对快照加以说明，也可以还原快照以在其账户下创建一个新的 Amazon Redshift 集群。例如，如果您针对生产和测试使用不同的 Amazon 客户账户，则用户可以使用生产账户登录并与使用测试账户的用户共享快照。然后，以测试账户用户身份登录的人可以还原快照以创建一个新的集群，该集群由测试账户所有，用于测试或诊断工作。

手动快照由在其下创建该快照的 Amazon 客户账户永久所有。只有拥有相应快照的账户中的用户可以授权其他账户访问该快照或撤消授权。已授权账户中的用户只能对与其共享的任何快照加以说明或还原相应快照；他们无法复制或删除与其共享的快照。授权在快照所有者将其撤消之前保持有效。如果所有者撤消授权，则之前已获授权的用户将无法再看到相应快照，也无法再启动任何引用该快照的新操作。如果在所有者撤消授权时相应账户正在还原快照，则该还原操作会运行完成。您无法删除具有活跃授权的快照；必须先撤消所有授权。

Amazon 客户账户始终能够访问相应账户所有的快照。如果尝试授予或撤消对所有者账户的访问权限，则会收到一条错误消息。您无法还原由非活动 Amazon 客户账户所有的快照，也无法对其加以说明。

当您获得访问 Amazon 客户账户的授权之后，该账户中便没有任何用户可以针对相应快照执行任何操作，除非他们代入的角色具有允许他们这样做的策略。
+ 快照拥有者账户中的用户只能在以下情况下授予和撤消快照访问权限：此类用户代入的角色具有相应的 IAM 策略，允许他们通过包含该快照的资源规范执行此类操作。例如，以下策略允许 Amazon 账户（`012345678912`）中的用户或角色授权其他账户访问名为 `my-snapshot20130829` 的快照：

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement":[
      {
        "Effect":"Allow",
        "Action":[
            "redshift:AuthorizeSnapshotAccess",
            "redshift:RevokeSnapshotAccess"
            ],
        "Resource":[
             "arn:aws:redshift:us-east-1:012345678912:snapshot:*/my-snapshot20130829"
            ]
      }
    ]
  }
  ```

------
+ 与其共享快照的 Amazon 账户中的用户无法针对该快照执行操作，除非他们具有相应的权限允许他们执行这些操作。为此，您可以将策略分配给角色并代入该角色。
  + 要列出快照或对其加以说明，相应用户必须具有相应的 IAM 策略，允许他们执行 `DescribeClusterSnapshots` 操作。下方代码显示了一个示例：

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

****  

    ```
    {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
        {
          "Effect":"Allow",
          "Action":[
              "redshift:DescribeClusterSnapshots"
              ],
          "Resource":[
               "*"
              ]
        }
      ]
    }
    ```

------
  + 要还原快照，用户必须代入角色，该角色具有相应的 IAM 策略允许他们执行 `RestoreFromClusterSnapshot` 操作，且该策略要有一个资源元素，同时涵盖他们尝试创建的集群以及相应快照。例如，如果账户 `012345678912` 中的用户与账户 `219876543210` 共享了快照 `my-snapshot20130829`，则为了通过还原快照来创建集群，账户 `219876543210` 中的用户必须代入具有如下策略的角色：

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

****  

    ```
    {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
        {
          "Effect":"Allow",
          "Action":[
              "redshift:RestoreFromClusterSnapshot"
              ],
          "Resource":[
               "arn:aws:redshift:us-east-1:012345678912:snapshot:*/my-snapshot20130829",
               "arn:aws:redshift:us-east-1:219876543210:cluster:from-another-account"
              ]
        }
      ]
    }
    ```

------
  + 在撤销 Amazon 账户对快照的访问权限后，该账户中的所有用户均无法访问该快照。即使这些账户具有允许对以前共享的快照资源执行操作的 IAM 策略，也是如此。

## 使用控制台共享集群快照
<a name="snapshot-share"></a>

在控制台上，您可以授权其他用户访问您拥有的手动快照，随后在不再需要时撤消该访问权限。

**要与另一个账户共享快照**

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

1. 在导航菜单上，选择**集群**、**快照**，然后选择要共享的手动快照。

1. 对于**操作**，选择**手动快照设置**以显示手动快照的属性。

1. 在**管理访问权限**部分中输入要与之共享的一个或多个账户，然后选择**保存**。

## 共享加密快照的安全注意事项
<a name="snapshot-share-access-kms-key"></a>

 当您提供对加密快照的访问权限时，Redshift 要求用于创建快照的 Amazon KMS 客户托管式密钥与执行恢复的一个或多个账户共享。如果密钥未共享，尝试恢复快照将导致拒绝访问错误。接收账户不需要任何额外权限即可还原共享快照。当您授予快照访问权限并共享密钥时，授予访问权限的身份必须对用于加密快照的密钥具有 `kms:DescribeKey` 权限。有关此权限的更多详细信息，请参阅 [Amazon KMS 权限](https://docs.amazonaws.cn/kms/latest/developerguide/kms-api-permissions-reference.html)。有关更多信息，请参阅 Amazon Redshift API 参考文档中的 [DescribeKey](https://docs.amazonaws.cn/kms/latest/APIReference/API_DescribeKey.html)。

客户托管的密钥策略可以通过编程方式或在 Amazon Key Management Service 控制台中更新。

**注意**  
如果您使用默认 KMS 密钥，则无需在 Amazon KMS 中采取任何操作或进行任何更改即可共享快照。

### 允许访问加密快照的 Amazon KMS 密钥
<a name="snapshot-share-access-kms-key-allowing-access"></a>

共享加密快照的 Amazon KMS 客户托管式密钥，请执行以下步骤更新密钥策略：

1. 使用 KMS 密钥策略中作为 `Principal` 共享的 Amazon 账户的 Amazon 资源名称（ARN）更新 KMS 密钥策略。

1.  允许 `kms:Decrypt` 操作。

在下面的密钥策略示例中，用户 `111122223333` 是 KMS 密钥的所有者，而用户 `444455556666` 是与之共享密钥的账户。通过包含用户 `444455556666` 的根 Amazon 账户身份的 ARN 作为策略的 `Principal`，以及通过允许 `kms:Decrypt` 操作，此密钥策略为 Amazon 账户提供了访问 KMS 密钥的权限。

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

****  

```
{
    "Id": "key-policy-1",
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/KeyUser",
                    "arn:aws:iam::444455556666:root"
                ]
            },
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*"
        }
    ]
}
```

------

授予客户托管式 KMS 密钥访问权限后，恢复加密快照的账户必须创建 Amazon Identity and Access Management (IAM) 角色或用户（如果用户尚未拥有该角色）。此外，该 Amazon 账户还必须将 IAM 策略附加到该 IAM 角色或用户，以允许他们使用您的 KMS 密钥恢复加密的数据库集群快照。

要详细了解如何提供对 Amazon KMS 密钥的访问权限，请参阅《Amazon Key Management Service 开发人员指南》中的[允许其他账户中的用户使用 KMS 密钥](https://docs.amazonaws.cn/kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console)。

有关密钥策略的概览，请参阅 [Amazon Redshift 如何使用 Amazon KMS](https://docs.amazonaws.cn/kms/latest/developerguide/services-redshift.html)。