

 从补丁 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 中的安全性
安全性

AWS的云安全性的优先级最高。作为 AWS 客户，您将从专为满足大多数安全敏感型企业的要求而打造的数据中心和网络架构中受益。

安全性是 AWS 和您的共同责任。[责任共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)将其描述为云*的*安全性和云*中*的安全性：
+ **云的安全性** – AWS 负责保护在 AWS 云中运行 AWS 服务的基础设施。AWS 还向您提供可安全使用的服务。作为 [AWS 合规计划](https://aws.amazon.com/compliance/programs/)的一部分，我们的安全有效性会定期由第三方审核员进行测试和验证。要了解适用于 Amazon Redshift 的合规性计划，请参阅[合规性计划范围内的 AWS 服务](https://aws.amazon.com/compliance/services-in-scope/)。
+ **云中的安全性** - 您的责任由您使用的 AWS 服务决定。您还需要对其他因素负责，包括您的数据的敏感性、您组织的要求以及适用的法律法规。

您可以在以下四个级别控制对 Amazon Redshift 资源的访问：
+ **集群管理 –** 创建、配置和删除集群的能力由授予给与您的 AWS 安全凭证关联的用户或账户的权限进行控制。具有适当权限的用户可以使用 AWS 管理控制台、AWS Command Line Interface（CLI）或 Amazon Redshift 应用程序编程接口（API）来管理其集群。可以借助 IAM 策略对这种访问加以管理。
**重要**  
Amazon Redshift 提供了有关管理权限、身份和安全访问的一系列最佳实践。我们建议您在开始使用 Amazon Redshift 时熟悉这些内容。有关更多信息，请参阅 [Amazon Redshift 中的 Identity and Access Management](redshift-iam-authentication-access-control.md)。
+ **集群连接 –** Amazon Redshift 安全组用于指定有权连接到无类别域间路由 (CIDR) 格式的 Amazon Redshift 集群的 AWS 实例。有关创建 Amazon Redshift、Amazon EC2 和 Amazon VPC 安全组以及将其与集群关联的信息，请参阅[Amazon Redshift 安全组](security-network-isolation.md#working-with-security-groups)。
+  **数据库访问 –** 访问数据库对象（如表和视图）的能力由 Amazon Redshift 数据库中的数据库用户账户控制。用户只能访问其用户账户有权访问的数据库中的资源。您可以创建这些 Amazon Redshift 用户账户并使用 [CREATE USER](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_USER.html)、[CREATE GROUP](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_GROUP.html)、[GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html) 和 [REVOKE](https://docs.aws.amazon.com/redshift/latest/dg/r_REVOKE.html) SQL 语句管理权限。有关更多信息，请参阅 Amazon Redshift 数据库开发人员指南中的[管理数据库安全](https://docs.aws.amazon.com/redshift/latest/dg/r_Database_objects.html)。
+ **临时数据库凭证和单点登录 –**除了使用 SQL 命令（如 CREATE USER 和 ALTER USER）创建和管理数据库用户之外，您还可以使用自定义 Amazon Redshift JDBC 或 ODBC 驱动程序配置 SQL 客户端。这些驱动程序将创建数据库用户和临时密码的过程作为数据库登录过程的一部分进行管理。

  这些驱动程序将基于 AWS Identity and Access Management (IAM) 身份验证来验证数据库用户的身份。如果您已在 AWS 外部管理用户身份，则可以使用符合 SAML 2.0 标准的身份提供者 (IdP) 来管理对 Amazon Redshift 资源的访问。您使用 IAM 角色将 IdP 和 AWS 配置为允许联合身份用户生成临时数据库凭证并登录 Amazon Redshift 数据库。有关更多信息，请参阅 [使用 IAM 身份验证生成数据库用户凭证](generating-user-credentials.md)。

此文档将帮助您了解如何在使用 Amazon Redshift 时应用责任共担模式。以下主题说明如何配置 Amazon Redshift 以实现您的安全性和合规性目标。您还会了解如何使用其他 AWS 服务以帮助您监控和保护 Amazon Redshift 资源。

**Topics**
+ [

# Amazon Redshift 中的数据保护
](security-data-protection.md)
+ [

# Amazon Redshift 中的 Identity and Access Management
](redshift-iam-authentication-access-control.md)
+ [

# 使用 AWS Secrets Manager 管理 Amazon Redshift 管理员密码
](redshift-secrets-manager-integration.md)
+ [

# Amazon Redshift 中的日志记录和监控
](security-incident-response.md)
+ [

# Amazon Redshift 的合规性验证
](security-compliance.md)
+ [

# Amazon Redshift 中的恢复能力
](security-disaster-recovery-resiliency.md)
+ [

# Amazon Redshift 中的基础设施安全性
](security-network-isolation.md)
+ [

# Amazon Redshift 中的配置和漏洞分析
](security-vulnerability-analysis-and-management.md)

# Amazon Redshift 中的数据保护
数据保护

AWS [责任共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)适用于 Amazon Redshift 中的数据保护。如该模式中所述，AWS 负责保护运行所有 AWS Cloud 的全球基础设施。您负责维护对托管在此基础结构上的内容的控制。您还负责您所使用的 AWS 服务 的安全配置和管理任务。有关数据隐私的更多信息，请参阅[数据隐私常见问题](https://aws.amazon.com/compliance/data-privacy-faq/)。有关欧洲数据保护的信息，请参阅 *AWS Security Blog* 上的 [AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

出于数据保护目的，建议您保护 AWS 账户 凭证并使用 AWS IAM Identity Center 或 AWS Identity and Access Management（IAM）设置单个用户。这样，每个用户只获得履行其工作职责所需的权限。还建议您通过以下方式保护数据：
+ 对每个账户使用多重身份验证（MFA）。
+ 使用 SSL/TLS 与 AWS 资源进行通信。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 使用 AWS CloudTrail 设置 API 和用户活动日记账记录。有关使用 CloudTrail 跟踪来捕获 AWS 活动的信息，请参阅《AWS CloudTrail 用户指南》**中的[使用 CloudTrail 跟踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用 AWS 加密解决方案以及 AWS 服务中的所有默认安全控制。
+ 使用高级托管安全服务（例如 Amazon Macie），它有助于发现和保护存储在 Amazon S3 中的敏感数据。
+ 如果在通过命令行界面或 API 访问 AWS 时需要经过 FIPS 140-3 验证的加密模块，请使用 FIPS 端点。有关可用的 FIPS 端点的更多信息，请参阅《美国联邦信息处理标准（FIPS）第 140-3 版》[https://aws.amazon.com/compliance/fips/](https://aws.amazon.com/compliance/fips/)。

强烈建议您切勿将机密信息或敏感信息（如您客户的电子邮件地址）放入标签或自由格式文本字段（如**名称**字段）。这包括当您通过控制台、API、AWS CLI 或 AWS SDK 使用 Amazon Redshift 或其他 AWS 服务时。在用于名称的标签或自由格式文本字段中输入的任何数据都可能会用于计费或诊断日志。如果您向外部服务器提供 URL，强烈建议您不要在网址中包含凭证信息来验证对该服务器的请求。

# 数据加密
数据加密

数据保护指在数据传输（发往和离开 Amazon Redshift 时）和处于静态（存储在 Amazon Redshift 数据中心的磁盘上时）期间保护数据。可以使用 SSL 或使用客户端加密保护传输中的数据。您可以通过以下选项在 Amazon Redshift 中保护静态数据。
+ **使用服务器端加密** – 您请求 Amazon Redshift 在将数据保存到数据中心的磁盘上之前加密对象，并在下载对象时进行解密。
+ **使用客户端加密** – 您可以在客户端加密数据并将加密的数据上载到 Amazon Redshift。在这种情况下，您需要管理加密过程、加密密钥和相关的工具。

# 静态加密
静态加密

服务器端加密是静态数据加密，即，Amazon Redshift 在将数据写入其数据中心时选择性地对其进行加密，并在您访问时进行解密。只要您验证了您的请求并且拥有访问权限，您访问加密和未加密数据的方式就没有区别。

Amazon Redshift 通过加密为静态数据提供保护。（可选）您可以通过高级加密标准 AES-256，为存储在集群中磁盘上的所有数据以及 Amazon S3 中的所有备份提供保护。

要管理用于加密和解密 Amazon Redshift 资源的密钥，您可以使用 [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/)。AWS KMS 将安全、高度可用的硬件和软件结合起来，提供可扩展到云的密钥管理系统。利用 AWS KMS，您可创建加密密钥并定义控制这些密钥的使用方式的策略。AWS KMS 支持 AWS CloudTrail，因此，您可审核密钥使用情况以验证密钥是否使用得当。您可将 AWS KMS 密钥与 Amazon Redshift 和支持的 AWS 服务结合使用。有关支持 AWS KMS 的服务的列表，请参阅《AWS Key Management Service 开发人员指南》**中的 [AWS 服务如何使用 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services.html)。

如果您选择使用 AWS Secrets Manager 来管理预置集群或无服务器命名空间的管理员密码，Amazon Redshift 还可接受额外的 AWS KMS 密钥，可供 AWS Secrets Manager 用于加密您的凭证。此额外的密钥可以是从 AWS Secrets Manager 自动生成的密钥，也可以是您提供的自定义密钥。

Amazon Redshift 查询编辑器 v2 安全存储输入到查询编辑器中的信息，如下所示：
+ 用于加密查询编辑器 v2 数据的 KMS 密钥的 Amazon 资源名称 (ARN)。
+ 数据库连接信息。
+ 文件和文件夹的名称和内容。

Amazon Redshift 查询编辑器 v2 使用 KMS 密钥或服务账户 KMS 密钥的数据块级加密来加密信息。Amazon Redshift 数据的加密由 Amazon Redshift 集群属性控制。

**Topics**
+ [

# Amazon Redshift 数据库加密
](working-with-db-encryption.md)

# Amazon Redshift 数据库加密
数据库加密

在 Amazon Redshift 中，默认对数据库进行加密以保护静态数据。数据库加密将应用于集群及其快照。

您可以修改未加密的集群以使用 AWS Key Management Service（AWS KMS）加密。为此，您可以使用 AWS 拥有的密钥或客户托管式密钥。当您修改集群以启用 AWS KMS 加密时，Amazon Redshift 会自动将您的数据迁移到新加密的集群。从加密集群创建的快照也会被加密。您还可以通过修改集群和更改 **Encrypt database**（加密数据库）选项将加密的集群迁移到未加密的集群。有关更多信息，请参阅 [更改集群加密](changing-cluster-encryption.md)。

尽管在创建集群后，您仍可以将默认加密集群转换为未加密集群，但建议您将包含敏感数据的集群保持加密状态。此外，根据管理数据的准则或法规，您可能需要使用加密。例如，支付卡行业数据安全标准 (PCI DSS)、萨班斯-奥克斯利法 (SOX)、健康保险流通与责任法案 (HIPAA) 以及其他此类法规为处理特定类型数据提供了准则。

Amazon Redshift 使用加密密钥层次结构来加密数据库。您可以使用 AWS Key Management Service (AWS KMS) 或硬件安全模块 (HSM) 来管理该层次结构中的顶级加密密钥。Amazon Redshift 用于加密的流程因您管理密钥的方式而异。Amazon Redshift 自动集成了 AWS KMS 但没有集成 HSM。当您使用 HSM 时，必须使用客户端和服务器证书在 Amazon Redshift 和 HSM 之间配置受信任的连接。

**重要**  
 禁用客户自主管理型 KMS 密钥后，Amazon Redshift 可能会失去对预置集群或无服务器命名空间的 KMS 密钥的访问权限。在这些情况下，Amazon Redshift 对 Amazon Redshift 数据仓库进行备份，并将其置于 `inaccessible-kms-key` 状态达 14 天。如果您在这段时间内恢复 KMS 密钥，Amazon Redshift 将恢复访问权限，仓库将正常运行。如果 14 天的期限结束时没有恢复 KMS 密钥，Amazon Redshift 将删除该数据仓库。当仓库处于 `inaccessible-kms-key` 状态时，仓库具有以下特征：  
 不能对数据仓库运行任何查询。
 如果数据仓库是数据共享的生产者仓库，则无法从使用者仓库对其运行数据共享查询。
 无法创建跨区域快照副本。
有关恢复已禁用的 KMS 密钥的信息，请参阅《AWS Key Management Service Developer Guide》**中的 [Enable and disable keys](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html)。如果删除了仓库的 KMS 密钥，则可以在删除 `inaccessible-kms-key` 状态的仓库之前使用备份创建新的数据仓库。

## 改进加密过程以提高性能和可用性


### 使用 RA3 节点加密


 对 RA3 节点加密过程的更新大幅改进了体验。读取和写入查询都可以在此过程中运行，而加密对性能的影响较小。此外，加密完成的速度要快得多。更新的过程步骤包括还原操作，以及将集群元数据迁移到目标集群的操作。例如，改进的体验适用于诸如 AWS KMS 的加密类型。当您拥有 PB 级的数据量时，操作时间从几周缩短到几天。

在加密集群之前，如果您计划继续运行数据库工作负载，则可以通过添加具有弹性大小调整功能的节点来提高性能并加快此过程。在加密过程中不能使用弹性大小调整功能，因此，请在加密之前执行此操作。请注意，添加节点通常会导致成本增加。

### 使用其他节点类型加密


当您加密使用 DC2 节点的集群时，您无法像使用 RA3 节点那样运行写入查询。只能运行读取查询。

### 使用 RA3 节点进行加密的用法说明


以下见解和资源有助于您做好准备进行加密并监控整个加密过程。
+ **开始加密后运行查询** - 加密开始后，大约十五分钟内即可进行读取和写入。完成完整加密过程需要的时间取决于集群上的数据量和工作负载级别。
+ **加密需要多长时间？** – 加密数据的时间取决于多个因素：包括正在运行的工作负载数量、所用的计算资源、节点的数量，以及节点的类型。我们建议您首先在测试环境中执行加密。根据经验，如果您处理的数据量达到 PB 级，则可能需要 1-3 天才能完成加密。
+ **我如何知道加密已完成？** – 启用加密功能后，第一张快照的完成即确认加密已完成。
+ **回滚加密** - 如果您需要回滚加密操作，最好是从加密启动之前进行的最新备份中还原。在最后一次备份之后，必须重新应用任何新的更新（更新/删除/插入）。
+ **执行表还原** – 请注意，您无法将表从未加密集群还原到加密集群。
+ **加密单节点集群** – 加密单节点集群具有性能限制。此过程所花的时间比多节点集群加密要长。
+ **加密后创建备份** – 加密集群中的数据时，只有在集群完全加密后才会创建备份。此过程所需的时间量可能会有所不同。备份所需的时间可能为数小时到数天，具体取决于集群大小。加密完成后，可能有一段延迟，然后才会创建备份。

  注意，由于在加密过程中发生备份和还原操作，因此不会保留使用 `BACKUP NO` 创建的任何表或实体化视图。有关更多信息，请参阅 [CREATE TABLE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html) 或 [CREATE MATERIALIZED VIEW](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-create-sql-command.html)。

**Topics**
+ [

## 改进加密过程以提高性能和可用性
](#resize-classic-encryption)
+ [

## 使用 AWS KMS 的加密
](#working-with-aws-kms)
+ [

## 使用硬件安全模块的加密
](#working-with-HSM)
+ [

## 加密密钥轮换
](#working-with-key-rotation)
+ [

# 更改集群加密
](changing-cluster-encryption.md)
+ [

# 迁移到 HSM 加密的集群
](migrating-to-an-encrypted-cluster.md)
+ [

# 轮换加密密钥
](manage-key-rotation-console.md)

## 使用 AWS KMS 的加密


当您选择 AWS KMS 对 Amazon Redshift 进行密钥管理时，加密密钥层次结构有四层。按层次顺序，这些密钥是根密钥、集群加密密钥（CEK）、数据库加密密钥（DEK）和数据加密密钥。

当您启动集群时，Amazon Redshift 会返回 Amazon Redshift 或您的 AWS 账户所创建或有权在 AWS KMS 中使用的 AWS KMS keys 的列表。在加密层次结构中选择要用作根密钥的 KMS 密钥。

默认情况下，Amazon Redshift 会选择自动生成的 AWS 拥有的密钥作为您的 AWS 账户的根密钥，以便在 Amazon Redshift 中使用。

如果不希望使用默认密钥，在 Amazon Redshift 中启动集群之前，您必须在 AWS KMS 中单独拥有（或创建）一个客户托管式 KMS 密钥。客户托管式密钥可为您提供更大灵活度，包括创建、转动、禁用、定义访问控制，以及审计用于保护数据的加密密钥的能力。有关创建 KMS 密钥的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

如果您希望使用其他 AWS 账户中的 AWS KMS 密钥，则您必须有权使用该密钥并在 Amazon Redshift 中指定其 Amazon Resource Name (ARN)。有关在 AWS KMS 中访问密钥的更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[控制对您的密钥的访问](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)。

当您选择根密钥之后，Amazon Redshift 会请求 AWS KMS 生成数据密钥，并使用所选的根密钥对其进行加密。此数据密钥在 Amazon Redshift 中用作 CEK。AWS KMS 将已加密的 CEK 导出到 Amazon Redshift 中，该 CEK 以及对 KMS 密钥的授权和 CEK 的加密上下文在独立于该集群的网络中的磁盘内部存储。只有加密的 CEK 才会导出到 Amazon Redshift；KMS 密钥仍保留在 AWS KMS 中。Amazon Redshift 还会通过安全通道将已加密的 CEK 传递到集群中，并将其加载到内存中。然后，Amazon Redshift 会调用 AWS KMS 以解密 CEK，并将已解密的 CEK 加载到内存中。有关授予、加密上下文和其他 AWS KMS 相关概念，请参阅 *AWS Key Management Service 开发人员指南*中的[概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)。

接着，Amazon Redshift 会随机生成一个密钥以用作 DEK，并将其加载到集群的内存中。已解密的 CEK 用于加密 DEK，然后，Amazon Redshift 便会通过安全通道从该集群传递 DEK，以使其在独立于该集群的网络中的磁盘内部存储。与 CEK 一样，DEK 的加密版本和解密版本都会加载到集群中的内存中。然后，DEK 的解密版本将用于加密为数据库中的每个数据块随机生成的各个加密密钥。

当该集群重启时，Amazon Redshift 先使用内部存储的加密版 CEK 和 DEK，将其重新加载到内存中，然后调用 AWS KMS 以再次使用 KMS 密钥解密 CEK，以便其加载到内存中。然后使用解密的 CEK 再次解密 DEK，并将解密的 DEK 加载到内存中，并根据需要用于加密和解密数据块密钥。

有关创建使用 AWS KMS 密钥加密的 Amazon Redshift 集群的更多信息，请参阅[创建集群](create-cluster.md)。

### 将 AWS KMS 加密的快照复制到另一个 AWS 区域


AWS KMS 密钥特定于 AWS 区域。如果要允许将 Amazon Redshift 快照从一个加密的源集群复制到另一个 AWS 区域，并为目标中的快照使用您自己的 AWS KMS 密钥，您需要为 Amazon Redshift 配置授予，以便在目标 AWS 区域中使用根密钥。此授予使 Amazon Redshift 能够在目标 AWS 区域中加密快照。如果您希望通过 AWS 区域拥有的密钥对目标中的快照进行加密，则无需在目标 AWS 区域中配置任何授予。有关跨区域快照复制的更多信息，请参阅[将快照复制到其它 AWS 区域](cross-region-snapshot-copy.md)。

**注意**  
如果您启用已加密集群中的快照复制功能，并针对根密钥使用 AWS KMS，则无法重命名集群，因为集群名称是加密上下文的一部分。如果您必须重命名集群，则可以禁用在源 AWS 区域中复制快照，重命名集群，然后再次配置并启用快照复制。

配置复制快照的授权的过程如下所示。

1. 在目标 AWS 区域中，通过执行以下操作创建快照复制授权：
   +  如果您没有 AWS KMS 密钥可用，请创建一个。有关创建 AWS KMS 密钥的更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
   + 指定快照复制授权的名称。此名称必须在您的 AWS 账户的 AWS 区域中唯一。
   + 为您创建的授权指定 AWS KMS 密钥 ID。如果您未指定密钥 ID，则该授予会应用于您的默认密钥。

1. 在源 AWS 区域中，启用快照复制并指定您在目标 AWS 区域中创建的快照复制授权的名称。

前述流程仅适用于您使用 AWS CLI、Amazon Redshift API 或开发工具包启用快照复制功能的情况。如果您使用控制台，在您启用跨区域快照复制时，Amazon Redshift 将提供相应的工作流程以配置授权。有关使用控制台为 AWS KMS 加密的集群配置跨区域快照复制的更多信息，请参阅[为 AWS KMS 加密的集群配置跨区域快照副本](xregioncopy-kms-encrypted-snapshot.md)。

快照复制到目标 AWS 区域之前，Amazon Redshift 使用源 AWS 区域中的根密钥解密快照并使用 Amazon Redshift 内部管理的随机生成的 RSA 密钥临时对其进行重新加密。然后，Amazon Redshift 将快照通过安全通道复制到目标 AWS 区域，使用内部托管式 RSA 密钥解密快照，然后使用目标 AWS 区域中的根密钥重新加密快照。

## 使用硬件安全模块的加密


如果您不使用 AWS KMS 管理密钥，则可以使用硬件安全模块 (HSM) 在 Amazon Redshift 中管理密钥。

**重要**  
DC2 和 RA3 节点类型不支持 HSM 加密。

HSM 是直接控制密钥生成和管理的设备。HSM 使密钥管理独立于应用程序和数据库层，以提供更强的安全性。Amazon Redshift 支持 AWS CloudHSM Classic 进行密钥管理。使用 HSM 管理加密密钥的加密流程与 AWS KMS 不同。

**重要**  
Amazon Redshift 仅支持 AWS CloudHSM Classic。我们不支持较新的 AWS CloudHSM 服务。  
AWS CloudHSM Classic 不对新客户开放。有关更多信息，请参阅 [CloudHSM Classic 定价](https://aws.amazon.com/cloudhsm/pricing-classic/)。AWS CloudHSMClassic 并非在所有 AWS 区域可用。有关可用 AWS 区域的更多信息，请参阅 [AWS 区域列表](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。

当您配置集群以使用 HSM 时，Amazon Redshift 会向 HSM 发出请求，以生成并存储要用作 CEK 的密钥。不过，与 AWS KMS 不同，HSM 不会将 CEK 导出到 Amazon Redshift 中。Amazon Redshift 会在集群中随机生成 DEK，并将其传递到 HSM 中，由 CEK 进行加密。HSM 会将已加密的 DEK 返回到 Amazon Redshift 中，由随机生成的内部根密钥进行加密并在独立于该集群的网络中的磁盘内部存储。Amazon Redshift 还会将解密版 DEK 加载到集群的内存中，以便 DEK 可用于加密和解密数据块的各个密钥。

如果该集群重启，则 Amazon Redshift 会使用内部根密钥解密内部存储的双重加密 DEK，以将内部存储的 DEK 还原为 CEK 加密状态。然后，CEK 加密的 DEK 会传递到 HSM 进行加密并传递回 Amazon Redshift，以便再次加载到内存中用于各个数据块密钥。

### 在 Amazon Redshift 和 HSM 之间配置受信任的连接


如果您选择使用 HSM 管理集群密钥，则需要在 Amazon Redshift 和 HSM 之间配置受信任的网络连接。执行此操作需要配置客户端和服务器证书。在加密和解密操作过程中，受信任的连接用于在 HSM 和 Amazon Redshift 之间传递加密密钥。

Amazon Redshift 会通过随机生成的私有和公有键前缀创建公有客户端证书。这些都进行了加密，并在内部存储。您可以在 HSM 中下载并注册公有客户端证书，并将其分配给适用的 HSM 分区。

您需要为 Amazon Redshift 提供 HSM IP 地址、HSM 分区名称、HSM 分区密码以及公有 HSM 服务器证书，该证书使用内部根密钥进行了加密。Amazon Redshift 会完成配置流程并验证其能否连接到 HSM。如果无法使用，则集群将进入 INCOMPATIBLE\$1HSM 状态，并且不会创建集群。在这种情况下，您必须删除不完整的集群，然后重试。

**重要**  
当您将集群修改为使用其他 HSM 分区时，Amazon Redshift 将验证它是否能连接到新分区，但不会验证是否存在有效的加密密钥。在使用新分区之前，您必须将密钥复制到新分区。如果集群已重新启动，而 Amazon Redshift 无法找到有效密钥，重新启动将失败。有关更多信息，请参阅[在 HSM 中复制密钥](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cli-clone-hapg.html)。

初始配置之后，如果 Amazon Redshift 无法连接到 HSM，则系统会记录一个事件。有关这些事件的更多信息，请参阅 [Amazon Redshift 事件通知](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-event-notifications.html)。

## 加密密钥轮换


在 Amazon Redshift 中，您可以轮换已加密集群的加密密钥。当您启动密钥轮换流程时，Amazon Redshift 会轮换指定集群以及该集群的任何自动或手动快照的 CEK。Amazon Redshift 还会轮换指定集群的 DEK，但不会轮换快照的 DEK，而这些快照在 Amazon Simple Storage Service（Amazon S3）内部存储并使用现有 DEK 进行了加密。

在轮换进行过程中，该集群将处于 ROTATING\$1KEYS 状态一直到轮换完成为止，届时，该集群将还原为 AVAILABLE 状态。Amazon Redshift 会在密钥轮换过程中处理解密和重新加密。

**注意**  
如果没有源集群，则无法轮换快照的密钥。在删除集群之前，请考虑其快照是否依赖密钥轮换。

由于集群在密钥轮换过程中暂时不可用，因此您应该只在数据需求需要时或在怀疑密钥可能已被破坏时轮换密钥。作为最佳实践，您应该查看存储的数据的类型，并计划对该数据进行加密的密钥的轮换频率。轮换密钥的频率取决于贵公司的数据安全策略以及关于敏感数据和监管合规的任何行业标准。确保您的计划平衡安全需求和集群的可用性考虑因素。

有关轮换密钥的更多信息，请参阅[轮换加密密钥](manage-key-rotation-console.md)。

# 更改集群加密
更改集群加密

可以使用 AWS 拥有的密钥或客户自主管理型密钥来修改未加密的集群，以使用 AWS Key Management Service（AWS KMS）加密。当您修改集群以启用 AWS KMS 加密时，Amazon Redshift 会自动将您的数据迁移到新加密的集群。还可以通过使用 AWS CLI（而不是 AWS 管理控制台）修改集群，来将加密的集群迁移到未加密的集群。

在迁移操作过程中，您的集群在只读模式下可用，并且集群状态显示为**调整大小**。

如果您的集群配置为启用跨 AWS 区域快照副本，您必须在更改加密之前将其禁用。有关更多信息，请参阅[将快照复制到其它 AWS 区域](cross-region-snapshot-copy.md)和[为 AWS KMS 加密的集群配置跨区域快照副本](xregioncopy-kms-encrypted-snapshot.md)。您无法通过修改集群启用硬件安全模块 (HSM) 加密。而是创建一个新的 HSM 加密集群，并将您的数据迁移到新集群。有关更多信息，请参阅 [迁移到 HSM 加密的集群](migrating-to-an-encrypted-cluster.md)。

------
#### [ Amazon Redshift console ]

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

1. 在导航菜单上，选择 **Clusters（集群）**，然后选择要修改加密的集群。

1. 选择 **Properties (属性)**。

1. 在 **Database configurations**（数据库配置）部分，选择 **Edit**（编辑），然后选择 **Edit encryption**（编辑加密）。

1. 选择其中一个加密选项，然后选择 **Save changes（保存更改）**。

------
#### [ AWS CLI ]

若要修改未加密的集群以使用 AWS KMS，请运行 `modify-cluster` CLI 命令并指定 `–-encrypted`，如下所示。预设情况下，使用默认 KMS 密钥。要指定客户托管式密钥，请包含 `--kms-key-id` 选项。

```
aws redshift modify-cluster --cluster-identifier <value> --encrypted --kms-key-id <value>
```

要从集群中删除加密，请运行以下 CLI 命令。

```
aws redshift modify-cluster --cluster-identifier <value> --no-encrypted
```

------

# 迁移到 HSM 加密的集群
迁移到 HSM 加密的集群

要将未加密的集群迁移到使用硬件安全模块 (HSM) 加密的集群，请创建新的加密集群并将数据移动到新集群。您不能通过修改集群迁移到 HSM 加密的集群。

要从未加密的集群迁移到 HSM 加密的集群，首先从现有的源集群中卸载数据。然后使用所选的加密设置将数据重新加载到新的目标集群中。有关启动加密集群的更多信息，请参阅[Amazon Redshift 数据库加密](working-with-db-encryption.md)。

在迁移过程中，源集群可用于只读查询，直到最后一步。最后一步是重命名目标集群和源集群，用于切换端点，以便将所有流量路由到新的目标集群。在重命名后重新启动之前，目标集群不可用。在传输数据时，暂停源集群上的所有数据加载和其他写入操作。<a name="prepare-for-migration"></a>

**准备迁移**

1. 确定与 Amazon Redshift 交互的所有关联系统，例如业务情报 (BI) 工具以及提取、转换和加载 (ETL) 系统。

1. 确定用于测试迁移的验证查询。

   例如，您可以使用以下查询来查找用户定义表的数目。

   ```
   select count(*)
   from pg_table_def
   where schemaname != 'pg_catalog';
   ```

   以下查询返回所有用户定义表的列表以及每个表中的行数。

   ```
   select "table", tbl_rows
   from svv_table_info;
   ```

1. 选择迁移的好时机。要查找集群使用率最低的时间，请监控 CPU 利用率和数据库连接数量等集群指标。有关更多信息，请参阅 [查看集群性能数据](performance-metrics-perf.md)。

1. 删除未使用的表。

   要创建表列表和查询每个表的次数，请运行以下查询。

   ```
   select database,
   schema,
   table_id,
   "table",
   round(size::float/(1024*1024)::float,2) as size,
   sortkey1,
   nvl(s.num_qs,0) num_qs
   from svv_table_info t
   left join (select tbl,
   perm_table_name,
   count(distinct query) num_qs
   from stl_scan s
   where s.userid > 1
   and   s.perm_table_name not in ('Internal worktable','S3')
   group by tbl,
   perm_table_name) s on s.tbl = t.table_id
   where t."schema" not in ('pg_internal');
   ```

1. 启动新的加密集群。

   对目标集群使用与源集群相同的端口号。有关启动加密集群的更多信息，请参阅[Amazon Redshift 数据库加密](working-with-db-encryption.md)。

1. 设置卸载和加载过程。

   您可以使用 [Amazon Redshift 卸载/复制实用工具](https://github.com/awslabs/amazon-redshift-utils/tree/master/src/UnloadCopyUtility)来帮助您在集群之间迁移数据。该实用工具会将源集群的数据导出到 Simple Storage Service（Amazon S3）上的某个位置。使用 AWS KMS 加密数据。然后，该实用工具会自动将数据导入到目标中。或者，您可以使用该实用程序在迁移完成后清除 Simple Storage Service（Amazon S3）。

1. 运行测试以验证您的过程并估计必须暂停写入操作的时间。

   在卸载和加载操作期间，通过暂停数据加载和其他写入操作来维护数据一致性。使用最大的表之一，运行卸载和加载过程，以帮助您估计时间。

1. 创建数据库对象，如 schema、视图和表。要帮助您生成必要的数据定义语言 (DDL) 语句，您可以使用 AWS GitHub 存储库中的 [AdminViews](https://github.com/awslabs/amazon-redshift-utils/tree/master/src/AdminViews) 中的脚本。<a name="migration-your-cluster"></a>

**要迁移集群**

1. 停止源集群上的所有 ETL 流程。

   要确认进程中未执行任何写入操作，请使用 Amazon Redshift 管理控制台来监控写入 IOPS。有关更多信息，请参阅 [查看集群性能数据](performance-metrics-perf.md)。

1. 运行您之前确定的验证查询，以便在迁移前收集有关未加密源集群的信息。

1. （可选）创建一个工作负载管理 (WLM) 队列，以使用源集群和目标集群中的最大可用资源。例如，创建名为 `data_migrate` 的队列并将队列配置为内存 95%，并发性为 4。有关更多信息，请参阅 *Amazon Redshift 数据库开发人员指南*中的[基于用户组和查询组将查询路由至队列中](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-wlm-routing-queries-to-queues.html)。

1. 使用 `data_migrate` 队列，运行 UnloadCopyUtility。

   使用 Amazon Redshift 控制台监控 UNLOAD 和 COPY 进程。

1. 再次运行验证查询，并验证结果是否与源集群的结果匹配。

1. 重命名源集群和目标集群以交换端点。为避免中断，请在工作时间以外执行此操作。

1. 验证您是否可以使用所有 SQL 客户端（如 ETL 和报告工具）连接到目标集群。

1. 关闭未加密的源集群。

# 轮换加密密钥


您可以借助 Amazon Redshift 控制台以使用以下过程来轮换加密密钥。

**要为集群轮换加密密钥**

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

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

1. 对于 **Actions**（操作），选择 **Rotate encryption**（轮换加密）以显示 **Rotate encryption keys**（轮换加密密钥）页面。

1. 正在 **Rotate encryption keys（轮换加密密钥）**页面上，选择 **Rotate encryption keys（轮换加密密钥）**。

# 传输中加密
传输中加密

可以配置环境来保护传输中数据的机密性和完整性。

以下详细信息适用于加密在 Amazon Redshift 集群和 SQL 客户端之间通过 JDBC/ODBC 传输的数据：
+ 您可以通过 Java 数据库连接 (JDBC) 和开放式数据库连接 (ODBC) 这两种连接将 SQL 客户端工具连接到 Amazon Redshift 集群。
+ Amazon Redshift 支持安全套接字层 (SSL) 连接来加密数据和服务器证书，以验证客户端连接到的服务器证书。客户端连接到 Amazon Redshift 集群的领导节点。有关更多信息，请参阅 [配置连接的安全选项](connecting-ssl-support.md)。
+ 为了支持 SSL 连接，Amazon Redshift 会在每个集群中创建并安装 AWS Certificate Manager (ACM) 颁发的证书。有关更多信息，请参阅 [将 SSL 连接过渡到 ACM 证书](connecting-transitioning-to-acm-certs.md)。
+ 为保护AWS云中的传输中数据，Amazon Redshift 使用硬件加速的 SSL 与 Amazon S3 或 Amazon DynamoDB 通信以执行 COPY、UNLOAD、备份和还原操作。

以下详细信息适用于加密在 Amazon Redshift 集群与 Amazon S3 或 DynamoDB 之间传输的数据：
+ Amazon Redshift 使用硬件加速的 SSL 与 Amazon S3 或 DynamoDB 通信以执行 COPY、UNLOAD、备份和还原操作。
+ Redshift Spectrum 支持使用受 AWS Key Management Service (KMS) 管理的账户默认密钥的 Amazon S3 服务器端加密 (SSE)。
+ 可以使用 Amazon S3 和 AWS KMS 来加密 Amazon Redshift 加载。有关更多信息，请参阅[使用 Amazon S3 和 AWS KMS 加密您的 Amazon Redshift 加载](https://aws.amazon.com/blogs/big-data/encrypt-your-amazon-redshift-loads-with-amazon-s3-and-aws-kms/)。

以下详细信息适用于对在 AWS CLI、SDK 或 API 客户端与 Amazon Redshift 端点之间传输的数据进行加密和签名：
+ Amazon Redshift 为加密传输中的数据提供了 HTTPS 端点。
+ 为了保护向 Amazon Redshift 出的 API 请求的完整性，API 调用必须由调用者签名。调用由 X.509 证书或客户的 AWS 秘密访问密钥根据前面版本 4 签名流程 (Sigv4) 签名。有关更多信息，请参阅《AWS 一般参考》**中的[签名版本 4 签名流程](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)。
+ 使用 AWS CLI 或 AWS 开发工具包之一向 AWS 发出请求。这些工具会自动使用您在配置工具时指定的访问密钥为您签署请求。

以下详细信息适用于加密在 Amazon Redshift 集群与 Amazon Redshift 查询编辑器 V2 之间传输的数据：
+ 数据通过 TLS-加密通道在查询编辑器 V2 与 Amazon Redshift 集群之间传输。

# 通过 Amazon Redshift 执行 VPC 加密控制功能
VPC 加密控制

Amazon Redshift 支持 [VPC 加密控制](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-encryption-controls.html)，这是一项安全功能，可助您对某个区域中的 VPC 内部以及跨 VPC 的所有流量强制执行传输中加密。本文档介绍如何在 Amazon Redshift 集群和无服务器工作组中执行 VPC 加密控制功能。

VPC 加密控制功能提供了集中化控制能力，以便在您的 VPC 内部监控并强制执行传输中加密。在强制模式下启用此功能后，它可确保所有网络流量都在硬件层（使用 AWS Nitro System）或应用层（使用 TLS/SSL）进行加密。

Amazon Redshift 与 VPC 加密控制功能集成，助您满足医疗保健（HIPAA）、政府（FedRAMP）和金融（PCI DSS）等行业的合规要求。

## VPC 加密控制功能与 Amazon Redshift 的协作方式
工作原理

VPC 加密控制功能在两种模式下运行：
+ 监控模式：可清晰呈现流量的加密状态，并帮助识别允许非加密流量的资源。
+ 强制模式：禁止在 VPC 中创建或使用允许非加密流量的资源。所有流量都必须在硬件层（基于 Nitro 的实例）或应用层（TLS/SSL）进行加密。

## 使用 VPC 加密控制功能的要求
要求

**实例类型要求**

Amazon Redshift 要求使用基于 Nitro 的实例来支持 VPC 加密控制功能。所有现代 Redshift 实例类型都支持必要的加密功能。

**SSL/TLS 要求**

在强制模式下启用 VPC 加密控制功能时，require\$1ssl 参数必须设置为 true 且不能禁用。这可确保所有客户端连接均采用加密的 TLS 连接。

## 迁移到 VPC 加密控制功能
迁移

**对于现有集群和工作组**

在包含现有 Redshift 集群或无服务器工作组的 VPC 上，无法在强制模式下启用 VPC 加密控制功能。如果您已有集群或工作组，请按以下步骤操作来使用加密控制功能：

1. 创建现有集群或命名空间的快照

1. 创建一个新的 VPC，并在强制模式下启用 VPC 加密控制功能

1. 通过使用下列操作之一，从快照还原至新 VPC：
   + 对于预调配集群：使用 `restore-from-cluster-snapshot` 操作
   + 对于无服务器：在工作组上使用 `restore-from-snapshot` 操作

**在 VPC 中创建新的集群或工作组并启用加密控制功能时，必须将 require\$1ssl 参数设置为 true。**

Amazon Redshift 要求使用基于 Nitro 的实例来支持 VPC 加密控制功能。所有现代 Redshift 实例类型都支持必要的加密功能。

**SSL/TLS 要求**

在强制模式下启用 VPC 加密控制功能时，require\$1ssl 参数必须设置为 true 且不能禁用。这可确保所有客户端连接均采用加密的 TLS 连接。

## 注意事项和限制
注意事项

在 Amazon Redshift 中使用 VPC 加密控制功能时，需注意以下几点：

**VPC 状态限制**
+ 当 VPC 加密控制功能处于 `enforce-in-progress` 状态时，集群和工作组创建操作将被阻止
+ 您必须等到 VPC 进入 `enforce` 模式后，再创建新的资源

**SSL 配置**
+ require\$1ssl 参数：对于在已实施加密的 VPC 中创建的集群与工作组，该参数的值必须始终为 `true`
+ 在已实施加密的 VPC 中创建集群或工作组后，`require_ssl` 在其生命周期内不能禁用

**区域可用性**

在以下区域内，Amazon Redshift Serverless 不支持在强制模式下启用 VPC 加密控制功能：
+ 南美洲（圣保罗）
+ 欧洲（苏黎世）

# 密钥管理
密钥管理

您可以配置环境以使用密钥保护数据：
+ Amazon Redshift 自动与 AWS Key Management Service (AWS KMS) 集成以进行密钥管理。AWS KMS 使用信封加密。有关更多信息，请参阅[信封加密](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)。
+ 在 AWS KMS 中管理加密密钥时，Amazon Redshift 使用基于密钥的四层架构进行加密。此架构包括随机生成的 AES-256 数据加密密钥、数据库密钥、集群密钥和根密钥。有关更多信息，请参阅 [Amazon Redshift 如何使用 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-redshift.html)。
+ 您可以在 AWS KMS 中创建自己的客户托管式密钥。有关更多信息，请参阅[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
+ 您也可为新 AWS KMS keys 导入自己的密钥材料。有关更多信息，请参阅[将密钥材料导入 AWS Key Management Service (AWS KMS) 中](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html)。
+ Amazon Redshift 支持在外部硬件安全模块 (HSM) 中管理加密密钥。HSM 可以为本地，也可以为 AWS CloudHSM。当您使用 HSM 时，必须使用客户端和服务器证书在 Amazon Redshift 和 HSM 之间配置受信任的连接。Amazon Redshift 仅支持 AWS CloudHSM Classic 进行密钥管理。有关更多信息，请参阅 [使用硬件安全模块的加密](working-with-db-encryption.md#working-with-HSM)。有关 AWS CloudHSM 的信息，请参阅[什么是 AWS CloudHSM？](https://docs.aws.amazon.com/cloudhsm/latest/userguide/introduction.html) 
+ 您可以轮换已加密集群的加密密钥。有关更多信息，请参阅 [加密密钥轮换](working-with-db-encryption.md#working-with-key-rotation)。

# 数据令牌化
数据令牌化

*令牌化*是为了数据安全目的将实际值替换为不透明值的过程。安全敏感型应用程序使用令牌化来替换敏感数据，如个人身份信息 (PII) 或受保护健康信息 (PHI)，以降低安全风险。*取消令牌化*使用适当的安全策略为授权用户使用实际值来反转令牌。

为了与第三方令牌化服务集成，您可以使用 Amazon Redshift 用户定义的函数 (UDF)，这些函数使用 [AWS Lambda](https://aws.amazon.com/lambda/) 创建。有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [Lambda 用户定义的函数](https://docs.aws.amazon.com/redshift/latest/dg/udf-creating-a-lambda-sql-udf.html)。例如，请参阅 [Protegrity](https://www.protegrity.com/how-we-work/partners/aws-data-protection)。

Amazon Redshift 将令牌化请求发送到通过 REST API 或预定义端点访问的令牌化服务器。两个或多个互补的 Lambda 函数处理令牌化和取消令牌化请求。对于此处理，您可以使用第三方令牌化提供程序提供的 Lambda 函数。您还可以使用在 Amazon Redshift 中注册为 Lambda UDF 的 Lambda 函数。

例如，假设提交的查询在列上调用令牌化或取消令牌化 UDF。Amazon Redshift 集群可以后台处理适用的参数行，并将这些行分批并行发送到 Lambda 函数。Amazon Redshift 计算节点和 Lambda 之间的数据传输是在客户端无法访问的独立隔离网络连接中进行的。Lambda 函数将数据传递到令牌化服务器端点。令牌化服务器根据需要对数据进行令牌化或取消令牌化，并返回数据。然后，Lambda 函数将结果传输到 Amazon Redshift 集群进行进一步处理（如有必要），然后返回查询结果。

# 在 Amazon Redshift 中路由互联网络流量
路由互联网络流量

您可以通过 Amazon Redshift 中的已知私有网络路由来路由流量。本页介绍如何在企业网络上以及同一 AWS 区域的资源之间路由流量。

要在 Amazon Redshift 与公司网络上的客户端和应用程序之间路由流量，请执行以下操作：
+ 在 Virtual Private Cloud (VPC) 和公司网络之间建立私有连接。通过互联网设置 IPsec VPN 连接或使用 Direct Connect 连接设置专用物理连接。Direct Connect 使您可以在本地网络与 Amazon VPC 之间直接建立一个专用虚拟接口，从而在您的网络和 VPC 之间提供一个专用的高带宽网络连接。借助多个虚拟接口，您甚至可以在保持网络隔离性的同时，与多个 VPC 建立专用连接。有关更多信息，请参阅[什么是 AWS Site-to-Site VPN？](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html)和[什么是 Direct Connect？](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 

要在 VPC 中的 Amazon Redshift 集群与相同 AWS 区域中的 Amazon S3 桶之间路由流量，请执行以下操作：
+ 设置 Amazon S3 私有 VPC 端点以从 ETL 负载或分载私密访问 Amazon S3 数据。有关更多信息，请参阅[用于 Amazon S3 的端点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html)。
+ 为 Amazon Redshift 集群启用“增强型 VPC 路由”，指定目标 Amazon S3 VPC 端点。Amazon Redshift COPY、UNLOAD 或 CREATE LIBRARY 命令生成的流量随后路由通过私有端点。有关更多信息，请参阅 [启用增强型 VPC 路由](enhanced-vpc-enabling-cluster.md)。

# Amazon Redshift 中的 Identity and Access Management
身份和访问管理

访问 Amazon Redshift 时需要可供 AWS 用来验证您的请求的凭证。这些凭证必须有权访问 AWS 资源，如 Amazon Redshift 集群。下面几节提供详细信息来说明如何使用 [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 和 Amazon Redshift 控制谁能访问您的资源，从而对这些资源进行保护：
+ [使用身份进行身份验证](#security_iam_authentication)
+ [访问控制](#redshift-iam-accesscontrol)

**重要**  
本主题包含有关管理权限、身份和安全访问的一系列最佳实践。我们建议您熟悉掌握将 IAM 与 Amazon Redshift 结合使用的最佳实践。这些最佳实践包括使用 IAM 角色应用权限。充分了解这些部分有助于您维护更安全的 Amazon Redshift 数据仓库。

## 使用身份进行身份验证


身份验证是您使用身份凭证登录 AWS 的方法。您必须作为 AWS 账户根用户、IAM 用户或通过担任 IAM 角色进行身份验证。

您可以使用来自 AWS IAM Identity Center（IAM Identity Center）等身份源的凭证、单点登录身份验证或 Google/Facebook 凭证，以联合身份进行登录。有关登录的更多信息，请参阅《AWS 登录 用户指南》**中的[如何登录您的 AWS 账户](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

对于编程访问，AWS 提供了 SDK 和 CLI 来对请求进行加密签名。有关更多信息，请参阅*《IAM 用户指南》*中的[适用于 API 请求的 AWS 签名版本 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 账户 根用户


 当您创建 AWS 账户 时，最初使用的是一个对所有 AWS 服务和资源拥有完全访问权限的登录身份（称为 AWS 账户*根用户*）。我们强烈建议不要使用根用户进行日常任务。有关要求根用户凭证的任务，请参阅*《IAM 用户指南》*中的[需要根用户凭证的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### IAM 用户和群组


*[IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*是对某个人员或应用程序具有特定权限的一个身份。建议使用临时凭证，而非具有长期凭证的 IAM 用户。有关更多信息，请参阅*《IAM 用户指南》*中的[要求人类用户使用带有身份提供商的联合身份验证才能使用临时凭证访问 AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)指定一组 IAM 用户，便于更轻松地对大量用户进行权限管理。有关更多信息，请参阅*《IAM 用户指南》*中的 [IAM 用户使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色


*[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*是具有特定权限的身份，可提供临时凭证。您可以通过[从用户切换到 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或调用 AWS CLI 或 AWS API 操作来担任角色。有关更多信息，请参阅《IAM 用户指南》**中的[担任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色对于联合用户访问、临时 IAM 用户权限、跨账户访问、跨服务访问以及在 Amazon EC2 上运行的应用程序非常有用。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

**注意**  
Redshift 中的转发访问会话（FAS，Forward Access Session）的有效期仅为 12 小时。在此期限之后，使用 FAS 与其他服务集成的任何连接会话都必须重建。

# 防止跨服务混淆座席


混淆代理问题是一个安全性问题，即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在 AWS 中，跨服务模拟可能会导致混淆代理问题。一个服务（*呼叫服务*）调用另一项服务（*所谓的服务*）时，可能会发生跨服务模拟。可以操纵调用服务，使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。为防止这种情况，AWS 提供可帮助您保护所有服务的数据的工具，而这些服务中的服务主体有权限访问账户中的资源。有关更多信息，请参阅《IAM 用户指南》**中的[防止跨服务混淆代理](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html#cross-service-confused-deputy-prevention)。

我们建议在基于资源的策略中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件上下文键，以限制 Amazon Redshift 为其它服务提供的资源访问权限。如果 `aws:SourceArn` 值不包含账户 ID，例如 Amazon S3 存储桶 ARN，您必须使用两个全局条件上下文密钥来限制权限。如果同时使用全局条件上下文密钥和包含账户 ID 的 `aws:SourceArn` 值，则 `aws:SourceAccount` 值和 `aws:SourceArn` 值中的账户在同一策略语句中使用时，必须使用相同的账户 ID。

以下示例显示了一个策略，您可以应用该策略来限制 Amazon Redshift 出现混淆代理问题。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": {
    "Sid": "ConfusedDeputyPreventionForRedshift",
    "Effect": "Allow",
    "Principal": {
      "Service": "redshift.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "ArnLike": {
        "aws:SourceArn": "arn:aws:redshift:us-east-1:123456789012:cluster:my-cluster"
      },
      "StringEquals": {
        "aws:SourceAccount": "123456789012"
      }
    }
  }
}
```

## 访问控制


您可以使用有效的凭证来对自己的请求进行身份验证，但您还必须拥有权限才能创建或访问 Amazon Redshift 资源。例如，您必须拥有权限才能创建 Amazon Redshift 集群、创建快照、添加事件订阅等。

下面几节介绍如何管理 Amazon Redshift 的权限。我们建议您先阅读概述。
+ [管理 Amazon Redshift 资源的访问权限的概览](redshift-iam-access-control-overview.md)
+  [将基于身份的策略（IAM 策略）用于 Amazon Redshift](redshift-iam-access-control-identity-based.md) 

# 管理 Amazon Redshift 资源的访问权限的概览
有关管理访问的概述

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

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

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

## Amazon Redshift 资源和操作


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

### Amazon Redshift、Amazon Redshift Serverless、Amazon Redshift 数据 API 和Amazon Redshift 查询编辑器 v2 访问权限
权限参考

在设置 [访问控制](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`）。

## 了解资源所有权


*资源所有者*是创建资源的 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 角色并向该角色附加权限，然后将该角色分配给用户。

## 管理对资源的访问


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

**注意**  
本节讨论如何在 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 策略）


您可以通过将策略附加到 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)。

### 基于资源的策略


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

## 指定策略元素：操作、效果、资源和主体


对于每个 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)。



## 在策略中指定条件


当您授予权限时，可使用访问策略语言来指定规定策略何时生效的条件。例如，您可能希望策略仅在特定日期后应用。有关使用访问策略语言指定条件的更多信息，请参阅 *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 策略条件进行精细访问控制


在 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 条件键限制访问


使用以下 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 条件键限制访问


使用以下 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"
                ]
            }
        }
    }
}
```

------

# 将基于身份的策略（IAM 策略）用于 Amazon Redshift
使用基于身份的策略（IAM 策略）

本主题提供了基于身份的策略的示例，在这些策略中，账户管理员可以向 IAM 身份（即：用户、组和角色）附加权限策略。

**重要**  
我们建议您首先阅读以下介绍性主题，这些主题讲解了管理 Amazon Redshift 资源访问的基本概念和选项。有关更多信息，请参阅 [管理 Amazon Redshift 资源的访问权限的概览](redshift-iam-access-control-overview.md)。

下面介绍权限策略示例。该权限允许用户创建、删除、修改和重启所有集群，但拒绝删除或修改 AWS 区域 `us-west-2` 和 AWS 账户 `123456789012` 中集群标识符以 `production` 开头的任何集群的权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowClusterManagement",
      "Action": [
        "redshift:CreateCluster",
        "redshift:DeleteCluster",
        "redshift:ModifyCluster",
        "redshift:RebootCluster"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"DenyDeleteModifyProtected",
      "Action": [
        "redshift:DeleteCluster",
        "redshift:ModifyCluster"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:cluster:production*"
      ],
      "Effect": "Deny"
    }
  ]
}
```

------

该策略包含两条语句：
+ 第一条语句授予用户创建、删除、修改和重启集群的权限。该语句指定通配符 (\$1) 作为 `Resource` 的值，因此，该策略适用于归根 AWS 账户所有的一切 Amazon Redshift 资源。
+ 第二条语句拒绝删除或修改集群的权限。该语句指定包含通配符 (\$1) 的集群 Amazon 资源名称（ARN）作为 `Resource` 的值。因此，该语句适用于归根 AWS 账户所有的一切 Amazon Redshift 集群（集群标识符以 `production` 开头）。

## 适用于 Amazon Redshift 的 AWS 托管式策略


AWS通过提供由AWS创建和管理的独立 IAM 策略来满足许多常用案例的要求。托管策略可针对常见使用案例授予必要权限，因此，您无需自行调查具体需要哪些权限。有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管式策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

此外，您还可以创建自定义 IAM 策略，以授予账户 Amazon Redshift API 操作和资源访问的权限。您可以将这些自定义策略附加到需要这些权限的 IAM 角色或组。

以下部分描述 Amazon Redshift 特有的 AWS 托管式策略（可附加至您账户中的用户）：

## AWS 托管式策略的 Amazon Redshift 更新
策略更新



查看有关 Amazon Redshift（自从其开始跟踪更新更改以来）的 AWS 托管式策略更新的详细信息。有关此页面更改的自动提示，请订阅 Amazon Redshift 文档历史记录页面上的 RSS 源。




| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
|  [AmazonRedshiftFederatedAuthorization](#redshift-policy-managed-policies-federated-authorization) - 新策略  |   Amazon Redshift 新增了一项易用性策略，用于通过 Amazon Redshift 联合身份验证授权功能执行查询。  | 2025 年 11 月 21 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy)：对现有策略的更新  |   托管式策略增加了 `lakeformation:GetDataAccess` 操作的权限。添加此权限可授予从 AWS Lake Formation 中获取联合目录信息的权限。 操作 `glue:GetCatalog` 和 `glue:GetCatalogs` 的其它条件将添加到托管式策略中。  | 2025 年 3 月 13 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy)：对现有策略的更新  |   操作 `glue:GetCatalog` 和 `glue:GetCatalogs` 的权限将添加到托管式策略中。添加这些权限可授予从 AWS Glue 中获取目录信息的权限。  | 2024 年 12 月 3 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy)：对现有策略的更新  |  托管式策略增加了 `servicequotas:GetServiceQuota` 操作的权限。这为访问配额或限制提供了权限。  | 2024 年 3 月 8 日 | 
|  [AmazonRedshiftQueryEditorV2FullAccess](#redshift-policy-managed-policies-query-editor-V2)：对现有策略的更新  |  操作 `redshift-serverless:ListNamespaces` 和 `redshift-serverless:ListWorkgroups` 的权限将添加到托管式策略中。添加它们可授予在 Amazon Redshift 数据仓库中列出无服务器命名空间和无服务器工作组的权限。  | 2024 年 2 月 21 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing)：对现有策略的更新  |  操作 `redshift-serverless:ListNamespaces` 和 `redshift-serverless:ListWorkgroups` 的权限将添加到托管式策略中。添加它们可授予在 Amazon Redshift 数据仓库中列出无服务器命名空间和无服务器工作组的权限。  | 2024 年 2 月 21 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing)：对现有策略的更新  |  操作 `redshift-serverless:ListNamespaces` 和 `redshift-serverless:ListWorkgroups` 的权限将添加到托管式策略中。添加它们可授予在 Amazon Redshift 数据仓库中列出无服务器命名空间和无服务器工作组的权限。  | 2024 年 2 月 21 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing)：对现有策略的更新  |  操作 `redshift-serverless:ListNamespaces` 和 `redshift-serverless:ListWorkgroups` 的权限将添加到托管式策略中。添加它们可授予在 Amazon Redshift 数据仓库中列出无服务器命名空间和无服务器工作组的权限。  | 2024 年 2 月 21 日 | 
|  [AmazonRedshiftReadOnlyAccess](#redshift-policy-managed-policies-read-only)：对现有策略的更新  |  托管式策略增加了 `redshift:ListRecommendations` 操作的权限。这将授予列出 Amazon Redshift Advisor 建议的权限。  | 2024 年 2 月 7 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy)：对现有策略的更新  |  操作 `ec2:AssignIpv6Addresses` 和 `ec2:UnassignIpv6Addresses` 的权限将添加到托管式策略中。添加这些权限可授予分配和取消分配 IP 地址的权限。  | 2023 年 10 月 31 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing)：对现有策略的更新  |  操作 `sqlworkbench:GetAutocompletionMetadata` 和 `sqlworkbench:GetAutocompletionResource` 的权限将添加到托管式策略中。添加它们可授予生成和检索数据库信息的权限，以便在编辑查询时自动完成 SQL。  | 2023 年 8 月 16 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing)：对现有策略的更新  |  操作 `sqlworkbench:GetAutocompletionMetadata` 和 `sqlworkbench:GetAutocompletionResource` 的权限将添加到托管式策略中。添加它们可授予生成和检索数据库信息的权限，以便在编辑查询时自动完成 SQL。  | 2023 年 8 月 16 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing)：对现有策略的更新  |  操作 `sqlworkbench:GetAutocompletionMetadata` 和 `sqlworkbench:GetAutocompletionResource` 的权限将添加到托管式策略中。添加它们可授予生成和检索数据库信息的权限，以便在编辑查询时自动完成 SQL。  | 2023 年 8 月 16 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy)：对现有策略的更新  |  在托管式策略中增加了在 AWS Secrets Manager 中执行密钥创建和管理操作的权限。添加的权限如下： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)  | 2023 年 8 月 14 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy)：对现有策略的更新  |  现在已从托管式策略删除了在 Amazon EC2 上执行操作以创建和管理安全组和路由规则的权限。这些权限与创建子网和 VPC 有关。移除的权限如下： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html) 它们与 Purpose:RedshiftMigrateToVpc 资源标签有关联。该标签将权限范围限制为从 Amazon EC2 Classic 到 Amazon EC2 VPC 迁移任务。有关更多信息，请参阅[控制对使用标签的 AWS 资源进行访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)。 | 2023 年 5 月 8 日 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access)：对现有策略的更新  |  托管式策略增加了 `redshift:GetClusterCredentialsWithIAM` 操作的权限。增加此权限会授予获取增强型临时凭证以通过指定的 AWS 账户访问 Amazon Redshift 数据库的权限。  | 2023 年 4 月 7 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy)：对现有策略的更新  |  在托管式策略中，现在添加了在 Amazon EC2 上执行操作以创建和管理安全组规则的权限。这些安全组和规则特别关联到 Amazon Redshift `aws:RequestTag/Redshift` 资源标签。这样可以将权限的范围限制为特定 Amazon Redshift 资源。  | 2023 年 4 月 6 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing)：对现有策略的更新  |  托管式策略增加了 `sqlworkbench:GetSchemaInference` 操作的权限。添加此项会授予权限，以获取从文件推断的列和数据类型  | 2023 年 3 月 21 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing)：对现有策略的更新  |  托管式策略增加了 `sqlworkbench:GetSchemaInference` 操作的权限。添加此项会授予权限，以获取从文件推断的列和数据类型  | 2023 年 3 月 21 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing)：对现有策略的更新  |  托管式策略增加了 `sqlworkbench:GetSchemaInference` 操作的权限。添加此项会授予权限，以获取从文件推断的列和数据类型  | 2023 年 3 月 21 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing)：对现有策略的更新  |  托管式策略增加了 `sqlworkbench:AssociateNotebookWithTab` 操作的权限。添加它会授予相关权限，以创建和更新链接到用户自己的笔记本的选项卡。  | 2023 年 2 月 2 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing)：对现有策略的更新  |  托管式策略增加了 `sqlworkbench:AssociateNotebookWithTab` 操作的权限。添加它会授予相关权限，以创建和更新链接到用户自己的笔记本或链接到与其共享的笔记本的选项卡。  | 2023 年 2 月 2 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing)：对现有策略的更新  |  托管式策略增加了 `sqlworkbench:AssociateNotebookWithTab` 操作的权限。添加它会授予相关权限，以创建和更新链接到用户自己的笔记本或链接到与其共享的笔记本的选项卡。  | 2023 年 2 月 2 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing)：对现有策略的更新  |  为了授予使用笔记本的权限，Amazon Redshift 添加了以下操作的权限： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)  | 2022 年 10 月 17 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing)：对现有策略的更新  |  为了授予使用笔记本的权限，Amazon Redshift 添加了以下操作的权限： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)  | 2022 年 10 月 17 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing)：对现有策略的更新  |  为了授予使用笔记本的权限，Amazon Redshift 添加了以下操作的权限： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)  | 2022 年 10 月 17 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy)：对现有策略的更新  |  Amazon Redshift 添加了命名空间 `AWS/Redshift` 以允许向 CloudWatch 发布指标。  | 2022 年 9 月 7 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing)：对现有策略的更新  |  Amazon Redshift 添加了用于执行 `sqlworkbench:ListQueryExecutionHistory` 和 `sqlworkbench:GetQueryExecutionHistory` 操作的权限。这授予了查看查询历史记录的权限。  | 2022 年 8 月 30 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing)：对现有策略的更新  |  Amazon Redshift 添加了用于执行 `sqlworkbench:ListQueryExecutionHistory` 和 `sqlworkbench:GetQueryExecutionHistory` 操作的权限。这授予了查看查询历史记录的权限。  | 2022 年 8 月 30 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing)：对现有策略的更新  |  Amazon Redshift 添加了用于执行 `sqlworkbench:ListQueryExecutionHistory` 和 `sqlworkbench:GetQueryExecutionHistory` 操作的权限。这授予了查看查询历史记录的权限。  | 2022 年 8 月 30 日 | 
|  [AmazonRedshiftFullAccess](#redshift-policy-managed-policies-full-access)：对现有策略的更新  |  Amazon Redshift Serverless 的权限已添加到现有的 AmazonRedshiftFullAccess 托管式策略中。  | 2022 年 7 月 22 日 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access)：对现有策略的更新  |  Amazon Redshift 已将标签 aws:ResourceTag/RedshiftDataFullAccess 权限的 redshift-serverless:GetCredentials 默认作用域条件从 StringEquals 更新为 StringLike，以授予对使用标签键 RedshiftDataFullAccess 和任何标签值标记的资源的访问权限。 | 2022 年 7 月 11 日 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access)：对现有策略的更新  |  Amazon Redshift 添加了新权限，以允许 redshift-serverless:GetCredentials 获得对 Amazon Redshift Serverless 的临时凭证。 | 2022 年 7 月 8 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing)：对现有策略的更新  |  Amazon Redshift 添加了用于执行 `sqlworkbench:GetAccountSettings` 操作的权限。这将授予获取账户设置的权限。  | 2022 年 6 月 15 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing)：对现有策略的更新  |  Amazon Redshift 添加了用于执行 `sqlworkbench:GetAccountSettings` 操作的权限。这将授予获取账户设置的权限。  | 2022 年 6 月 15 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing)：对现有策略的更新  |  Amazon Redshift 添加了用于执行 `sqlworkbench:GetAccountSettings` 操作的权限。这将授予获取账户设置的权限。  | 2022 年 6 月 15 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy)：对现有策略的更新  |  为了允许对新的 Amazon Redshift Serverless 端点进行公有访问，Amazon Redshift 在客户账户中分配弹性 IP 地址并将其关联到 VPC 端点的弹性网络接口。它通过由服务相关角色提供的权限来完成此操作。要启用此使用案例，分配和释放弹性 IP 地址的操作将添加到 Amazon Redshift Serverless 服务相关角色中。  | 2022 年 5 月 26 日 | 
|  [AmazonRedshiftQueryEditorV2FullAccess](#redshift-policy-managed-policies-query-editor-V2)：对现有策略的更新  |  操作 `sqlworkbench:ListTaggedResources` 的权限。它专门适用于 Amazon Redshift 查询编辑器 v2 资源。此策略更新授予仅可通过查询编辑器 v2 调用 `tag:GetResources` 的权限。  | 2022 年 2 月 22 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing)：对现有策略的更新  |  操作 `sqlworkbench:ListTaggedResources` 的权限。它专门适用于 Amazon Redshift 查询编辑器 v2 资源。此策略更新授予仅可通过查询编辑器 v2 调用 `tag:GetResources` 的权限。  | 2022 年 2 月 22 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing)：对现有策略的更新  |  操作 `sqlworkbench:ListTaggedResources` 的权限。它专门适用于 Amazon Redshift 查询编辑器 v2 资源。此策略更新授予仅可通过查询编辑器 v2 调用 `tag:GetResources` 的权限。  | 2022 年 2 月 22 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing)：对现有策略的更新  |  操作 `sqlworkbench:ListTaggedResources` 的权限。它专门适用于 Amazon Redshift 查询编辑器 v2 资源。此策略更新授予仅可通过查询编辑器 v2 调用 `tag:GetResources` 的权限。  | 2022 年 2 月 22 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing)：对现有策略的更新  |  托管式策略增加了 `sqlworkbench:AssociateQueryWithTab` 操作的权限。增加此权限将允许客户创建编辑器选项卡，以链接到与其共享的查询。  | 2022 年 2 月 22 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 对现有策略的更新  |  Amazon Redshift 添加了新操作的权限，允许对 Amazon Redshift 网络和 VPC 资源进行管理。  | 2021 年 11 月 22 日 | 
|  [AmazonRedshiftAllCommandsFullAccess](#redshift-policy-managed-policies-service-linked-role-commands) – 新策略  |  Amazon Redshift 添加了一项新策略，允许使用从 Amazon Redshift 控制台创建的 IAM 角色，并将其设置为默认角色，以便集群从 Amazon S3 运行 COPY、UNLOAD、CREATE EXTERNAL SCHEMA、CREATE EXTERNAL FUNCTION 和 CREATE MODEL 和 CREATE LIBRARY 命令。  | 2021 年 11 月 18 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 对现有策略的更新  |  Amazon Redshift 添加了新操作的权限，允许管理 Amazon Redshift CloudWatch 日志组和日志流，包括审计日志导出。  | 2021 年 11 月 15 日 | 
|  [AmazonRedshiftFullAccess](#redshift-policy-managed-policies-full-access) – 对现有策略的更新  |  Amazon Redshift 添加了新权限。以允许模型可解释性、DynamoDB、Redshift Spectrum 和 Amazon RDS 联合身份验证等功能。 | 2021 年 10 月 7 日 | 
|  [AmazonRedshiftQueryEditorV2FullAccess](#redshift-policy-managed-policies-query-editor-V2) – 新策略  |  Amazon Redshift 添加了一项新策略，允许对 Amazon Redshift 查询编辑器 v2 的完全访问。  | 2021 年 9 月 24 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) – 新策略  |  Amazon Redshift 添加了一项新策略，允许在不共享资源的情况下使用 Amazon Redshift 查询编辑器 v2。  | 2021 年 9 月 24 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) – 新策略  |  Amazon Redshift 添加了一项新策略，允许在 Amazon Redshift 查询编辑器 v2 中进行读取共享。  | 2021 年 9 月 24 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) – 新策略  |  Amazon Redshift 添加了一项新策略，允许在 Amazon Redshift 查询编辑器 v2 中进行读取和更新共享。  | 2021 年 9 月 24 日 | 
|  [AmazonRedshiftFullAccess](#redshift-policy-managed-policies-full-access) – 对现有策略的更新  |  Amazon Redshift 添加了新的权限，以允许 `sagemaker:*Job*`。  | 2021 年 8 月 18 日 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access) – 对现有策略的更新  |  Amazon Redshift 添加了新的权限，以允许 `AuthorizeDataShare`。  | 2021 年 8 月 12 日 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access) – 对现有策略的更新  |  Amazon Redshift 添加了新的权限，以允许 `BatchExecuteStatement`。  | 2021 年 7 月 27 日 | 
|  Amazon Redshift 开始跟踪更改  |  Amazon Redshift 开始跟踪其 AWS 托管式策略的更改。  | 2021 年 7 月 27 日 | 

## AmazonRedshiftReadOnlyAccess


授予 AWS 账户对所有 Amazon Redshift 资源的只读访问权限。

您可以在 IAM 控制台上找到 [AmazonRedshiftReadOnlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftReadOnlyAccess) 策略，可以在《AWS 托管式策略参考指南》**中找到 [AmazonRedshiftReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftReadOnlyAccess.html) 相关信息。

## AmazonRedshiftFullAccess


授予 AWS 账户对所有 Amazon Redshift 资源的完全访问权限。此外，此策略还授予对所有 Amazon Redshift Serverless 资源的完全访问权限。

您可以在 IAM 控制台上找到 [AmazonRedshiftFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftFullAccess) 策略，在《AWS 托管式策略参考指南》**中找到 [AmazonRedshiftFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftFullAccess.html)。

## AmazonRedshiftQueryEditor


授予账户对 Amazon Redshift 控制台查询编辑器的完全访问权限。

您可以在 IAM 控制台上找到 [AmazonRedshiftQueryEditor](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditor) 策略，在《AWS 托管式策略参考指南》**中找到 [AmazonRedshiftQueryEditor](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditor.html)。

## AmazonRedshiftDataFullAccess


授予 AWS 账户对所有 Amazon Redshift 数据 API 操作和资源的完全访问权限。

您可以在 IAM 控制台上找到 [AmazonRedshiftDataFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftDataFullAccess) 策略，在《AWS 托管式策略参考指南》**中找到 [AmazonRedshiftDataFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftDataFullAccess.html)。

## AmazonRedshiftQueryEditorV2FullAccess


授予账户对 Amazon Redshift 查询编辑器 v2 的完全访问权限。此策略还授予访问其它所需服务的权限。

您可以在 IAM 控制台上找到 [AmazonRedshiftQueryEditorV2FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditorV2FullAccess) 策略，在《AWS 托管式策略参考指南》**中找到 [AmazonRedshiftQueryEditorV2FullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditorV2FullAccess.html)。

## AmazonRedshiftQueryEditorV2NoSharing


授予账户使用 Amazon Redshift 查询编辑器 v2 的能力（资源不共享）。此策略还授予访问其它所需服务的权限。使用此策略的主体无法标记其资源（例如查询），因此无法与同一 AWS 账户 中的其它主体共享这些资源。

您可以在 IAM 控制台上找到 [AmazonRedshiftQueryEditorV2NoSharing](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditorV2NoSharing) 策略，在《AWS 托管式策略参考指南》**中找到 [AmazonRedshiftQueryEditorV2NoSharing](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditorV2NoSharing.html)。

## AmazonRedshiftQueryEditorV2ReadSharing


授予账户使用 Amazon Redshift 查询编辑器 v2 的能力（资源共享受限）。此策略还授予访问其它所需服务的权限。使用此策略的主体可以标记其资源（例如查询），以便与同一 AWS 账户 中的其它主体共享这些资源。获得授权的主体可读取其与团队共享的资源，但无法更新。

您可以在 IAM 控制台上找到 [AmazonRedshiftQueryEditorV2ReadSharing](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditorV2ReadSharing) 策略，在《AWS 托管式策略参考指南》**中找到 [AmazonRedshiftQueryEditorV2ReadSharing](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditorV2ReadSharing.html)。

## AmazonRedshiftQueryEditorV2ReadWriteSharing


授予账户使用 Amazon Redshift 查询编辑器 v2 共享资源的能力。此策略还授予访问其它所需服务的权限。使用此策略的主体可以标记其资源（例如查询），以便与同一 AWS 账户 中的其它主体共享这些资源。获得授权的主体可以读取和更新其与团队共享的资源。

您可以在 IAM 控制台上找到 [AmazonRedshiftQueryEditorV2ReadWriteSharing](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditorV2ReadWriteSharing) 策略，在《AWS 托管式策略参考指南》**中找到 [AmazonRedshiftQueryEditorV2ReadWriteSharing](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditorV2ReadWriteSharing.html)。

## AmazonRedshiftServiceLinkedRolePolicy


您无法将 AmazonRedshiftServiceLinkedRolePolicy 策略附加至您的 IAM 实体。把此策略附加至服务相关的角色，该角色允许 Amazon Redshift 访问账户资源。有关更多信息，请参阅[使用面向 Amazon Redshift 的服务相关角色](https://docs.aws.amazon.com/redshift/latest/mgmt/using-service-linked-roles.html)。

您可以在 IAM 控制台上找到 [AmazonRedshiftServiceLinkedRolePolicy](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftServiceLinkedRolePolicy) 策略，在《AWS 托管式策略参考指南》**中找到 [AmazonRedshiftServiceLinkedRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftServiceLinkedRolePolicy.html)。

## AmazonRedshiftAllCommandsFullAccess


授予账户使用从 Amazon Redshift 控制台创建的 IAM 角色的能力，并将其设置为默认角色，以便集群从 Amazon S3 运行 COPY、UNLOAD、CREATE EXTERNAL SCHEMA、CREATE EXTERNAL FUNCTION 和 CREATE MODEL 命令。该策略还授予账户为相关服务运行 SELECT 语句的权限，例如 Amazon S3、CloudWatch Logs、Amazon SageMaker AI 或 AWS Glue。

您可以在 IAM 控制台上找到 [AmazonRedshiftAllCommandsFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftAllCommandsFullAccess) 策略，在《AWS 托管式策略参考指南》**中找到 [AmazonRedshiftAllCommandsFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftAllCommandsFullAccess.html)。

## AmazonRedshiftFederatedAuthorization


 该策略整合了使用 Amazon Redshift 联合身份验证权限对 Glue Data Catalog 数据库运行查询所需的 IAM 操作。此类查询通过 AWS Glue 执行，因此需要对目录对象执行 Get 操作来发现这些对象，并需要对目录对象执行 Create、Update、Rename 和 Delete 操作来修改这些对象。请注意，资源由 Amazon Redshift 管理，因此主体还需获得 Redshift 权限才能完成查询。`glue:FederateAuthorization` 操作允许 AWS Glue 将目录对象的授权决策委派给 Amazon Redshift。

 该策略允许主体使用 Amazon Redshift 联合身份验证权限对目录运行查询，但禁止向 AWS Glue 注册和取消注册 Amazon Redshift 命名空间。请参阅有关介绍 Amazon Redshift 联合身份验证权限设置的 IAM 策略要求的文档。

您可以在 IAM 控制台上找到 [AmazonRedshiftFederatedAuthorization](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftFederatedAuthorization) 策略，在《AWS 托管式策略参考指南》**中找到 [AmazonRedshiftFederatedAuthorization](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftFederatedAuthorization.html)。

此外，您还可以创建自定义 IAM 策略，以授予账户 Amazon Redshift API 操作和资源访问的权限。您可以将这些自定义策略附加到需要这些权限的 IAM 角色或组。





## 使用 Redshift Spectrum 所需的权限


Amazon Redshift Spectrum 需要其他 AWS 服务访问资源的权限。有关 Redshift Spectrum 的 IAM 策略中的权限的详细信息，请参阅 *Amazon Redshift 数据库开发人员指南*中的 [Amazon Redshift Spectrum 的 IAM 策略](https://docs.aws.amazon.com/redshift/latest/dg/c-spectrum-iam-policies.html)。

## 使用 Amazon Redshift 控制台所需的权限


用户若要能够使用 Amazon Redshift 控制台，则必须拥有一组最低的权限来允许用户为自己的 AWS 账户描述 Amazon Redshift 资源。这些权限还必须允许用户描述其他相关信息（包括 Amazon EC2 安全、Amazon CloudWatch、Amazon SNS 和网络信息）。

如果创建比必需的最低权限更为严格的 IAM 策略，对于附加了该 IAM 策略的用户，控制台无法按预期正常运行。要确保这些用户仍可使用 Amazon Redshift 控制台，也可向用户附加 `AmazonRedshiftReadOnlyAccess` 托管式策略。其操作方法，请见[适用于 Amazon Redshift 的 AWS 托管式策略](#redshift-policy-resources.managed-policies)所述。

有关授予用户访问 Amazon Redshift 控制台上的查询编辑器的权限，请参阅[使用 Amazon Redshift 控制台查询编辑器所需的权限](#redshift-policy-resources.required-permissions.query-editor)。

对于只需要调用 AWS CLI 或 Amazon Redshift API 的用户，无需为其提供最低限度的控制台权限。

## 使用 Amazon Redshift 控制台查询编辑器所需的权限


一个用户若要使用 Amazon Redshift 查询编辑器，该用户必须具有一组 Amazon Redshift 和 Amazon Redshift 数据 API 操作的最低权限。要使用密钥连接到数据库，您还必须具有 Secrets Manager 权限。

要授予用户对 Amazon Redshift 控制台上的查询编辑器的访问权限，请附加 `AmazonRedshiftQueryEditor` 和 `AmazonRedshiftReadOnlyAccess` AWS 托管式策略。`AmazonRedshiftQueryEditor` 策略允许用户只检索其自己的 SQL 语句的结果。也就是说，相同 `aws:userid` 提交的语句，如 `AmazonRedshiftQueryEditor` AWS 托管式策略的此部分所示。

```
{
    "Sid":"DataAPIIAMStatementPermissionsRestriction",
    "Action": [
        "redshift-data:GetStatementResult",
        "redshift-data:CancelStatement",
        "redshift-data:DescribeStatement",
        "redshift-data:ListStatements"
    ],
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "redshift-data:statement-owner-iam-userid": "${aws:userid}"
        }
    }
}
```

要允许用户检索同一 IAM 角色中其他用户的 SQL 语句的结果，请创建您自己的策略，而不需要限制对当前用户的访问权限的条件。同时限制管理员更改策略的访问权限。

## 使用查询编辑器 v2 所需的权限


需要使用 Amazon Redshift 查询编辑器 v2 的用户必须拥有一组 Amazon Redshift、查询编辑器 v2 操作和其它操作的最低权限，以及其它 AWS 服务的权限，诸如 AWS Key Management Service、AWS Secrets Manager和标记服务。

要授予用户对查询编辑器 v2 的完全访问权，请附上 `AmazonRedshiftQueryEditorV2FullAccess` AWS 托管式策略。这些 `AmazonRedshiftQueryEditorV2FullAccess` 策略授权用户与同一团队中的其它人共享查询编辑器 v2 资源（例如查询）。有关如何控制查询编辑器 v2 资源访问的详细信息，请参阅 IAM 控制台上查询编辑器 v2 的特定托管式策略的定义。

一些 Amazon Redshift 查询编辑器 v2 AWS 托管式策略在条件中使用 AWS 标签，以限定对资源的访问。在查询编辑器 v2 中，共享查询的基础是附加至主体（IAM 角色）的 IAM 策略中的标签键和值 `"aws:ResourceTag/sqlworkbench-team": "${aws:PrincipalTag/sqlworkbench-team}"`。同样 AWS 账户 的主体具有相同标记值（例如 `accounting-team`），在查询编辑器 v2 中处于同一个团队。您同时只能与一个团队关联。具有管理权限的用户可以在 IAM 控制台上设置团队，方法是为所有团队成员提供相同的 `sqlworkbench-team` 标记值。如果标记值 `sqlworkbench-team` 已为 IAM 用户或 IAM 角色更改，可能要经过延迟后，更改才会反映在共享资源中。如果资源（例如查询）的标记值发生了更改，在更改生效之前可能再次出现延迟。团队成员还必须拥有 `tag:GetResources` 权限才能分享。

**示例：添加 IAM 角色的 `accounting-team` 标签**

1. 登录AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在控制台的导航窗格中，选择**角色**，然后选择要编辑的角色的名称。

1. 选择**标签**选项卡，然后选择**添加**标签。

1. 添加标记密钥 **sqlworkbench-team** 和值 `accounting-team`。

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

   现在，当 IAM 主体（附加了此 IAM 角色）与团队共享查询时，其它具有同样 `accounting-team` 标记值的主体可以查看查询。

有关如何将标签附加至主体（包括 IAM 角色和 IAM 用户）的更多信息，请参阅《IAM 用户指南》**中的[标记 IAM 资源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)部分。

您还可以使用身份提供者 (IdP) 在会话级别设置团队。这允许使用同一 IAM 角色的多个用户拥有不同的团队。IAM 角色信任策略必须允许 `sts:TagSession` 操作。有关更多信息，请参阅《IAM 用户指南》**中的[添加会话标签所需的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_permissions-required)。将主标签属性添加到 IdP 提供的 SAML 断言中。

```
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:sqlworkbench-team">
    <AttributeValue>accounting-team</AttributeValue>
</Attribute>
```

按照身份提供者 (IdP) 提供的说明使用来自目录的内容填充 SAML 属性。有关身份提供者 (IdP) 和 Amazon Redshift 的更多信息，请参阅《IAM 用户指南》* *中的[使用 IAM 身份验证生成数据库用户凭证](generating-user-credentials.md)和[身份提供者和联合身份验证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。

`sqlworkbench:CreateNotebookVersion` 授予在账户上获取笔记本单元格的当前内容和创建笔记本版本的权限。这意味着，在创建版本时，笔记本的当前内容与该版本的内容相同。稍后，在更新当前笔记本时，版本中单元格的内容保持不变。`sqlworkbench:GetNotebookVersion` 授予获取笔记本版本的权限。没有 `sqlworkbench:BatchGetNotebookCell` 权限但拥有笔记本的 `sqlworkbench:CreateNotebookVersion` 和 `sqlworkbench:GetNotebookVersion` 权限的用户可以访问该版本中的笔记本单元格。此用户没有 `sqlworkbench:BatchGetNotebookCell` 权限，但仍然能够通过先创建一个版本，然后获取这个已创建版本来检索笔记本单元格的内容。

## 使用 Amazon Redshift 调度程序所需的权限


使用 Amazon Redshift 计划程序时，您应设置与 Amazon Redshift 计划程序 (**scheduler.redshift.amazonaws.com**) 具有信任关系的 IAM 角色，以便允许该计划程序代表您承担权限。您还可以为要计划的 Amazon Redshift API 操作将策略（权限）附加到角色。

以下示例演示 JSON 格式的策略文档，该策略用于在 Amazon Redshift 调度程序和 Amazon Redshift 之间设置信任关系。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "scheduler.redshift.amazonaws.com",
                    "redshift.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

有关信任实体更多信息，请参阅 *IAM 用户指南*中的[创建向 AWS 服务委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

您还必须为要计划的 Amazon Redshift 操作添加权限。

为使计划程序使用 `ResizeCluster` 操作，请为 IAM 策略添加如下权限。根据您的环境，您可能希望使策略限制更严格。

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

****  

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

------

有关为 Amazon Redshift 调度程序创建角色的步骤，请参阅《IAM 用户指南》**中的[为 AWS 服务创建角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)。在 IAM 控制台中创建角色时，请选择以下选项：
+ 对于**选择将使用此角色的服务**：选择 **Redshift**。
+ 对于**选择您的使用案例**，选择 **Redshift - 计划程序**。
+ 为允许计划的 Amazon Redshift 操作的角色创建或附加策略。选择**创建策略**或修改角色以便附加策略。输入计划操作的 JSON 策略。
+ 在创建角色后，编辑 IAM 角色的**信任关系**以便包含服务 `redshift.amazonaws.com`。

您创建的 IAM 角色具有信任实体 `scheduler.redshift.amazonaws.com` 和 `redshift.amazonaws.com`。它还具有附加策略，该策略允许支持的 Amazon Redshift API 操作，例如 `"redshift:ResizeCluster"`。

## 使用 Amazon EventBridge 调度程序所需的权限


使用 Amazon EventBridge 调度程序时，您应设置与 EventBridge 计划程序 (**events.amazonaws.com**) 具有信任关系的 IAM 角色，以便允许该计划程序代表您承担权限。您还可以为要计划的 Amazon Redshift 数据 API 操作将策略（权限）附加到角色，并附加 Amazon EventBridge 操作的策略。

当您使用控制台上的 Amazon Redshift 查询编辑器创建计划查询时，您可以使用 EventBridge 调度程序。

您可以创建 IAM 角色以在 IAM 控制台上运行计划查询。在此 IAM 角色中，附加 `AmazonEventBridgeFullAccess` 和 `AmazonRedshiftDataFullAccess`。

以下示例演示 JSON 格式的策略文档，该策略用于设置与EventBridge 调度程序的信任关系。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "events.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

有关信任实体更多信息，请参阅 *IAM 用户指南*中的[创建向 AWS 服务委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

有关为 EventBridge 调度程序创建角色的步骤，请参阅《IAM 用户指南》**中的[为 AWS 服务创建角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)。在 IAM 控制台中创建角色时，请选择以下选项：
+ 在**选择将使用此角色的服务**下，选择 **CloudWatch Events**。
+ 对于**选择您的使用案例**：选择 **CloudWatch Events**。
+ 附加以下权限策略：`AmazonEventBridgeFullAccess` 和 `AmazonRedshiftDataFullAccess`。

您创建的 IAM 角色具有信任实体 `events.amazonaws.com`。它还具有附加策略，该策略允许支持的 Amazon Redshift 数据 API 操作，例如 `"redshift-data:*"`。

## 使用 Amazon Redshift 机器学习 (ML) 所需的权限


接下来，您可以找到使用 Amazon Redshift 机器学习 (ML) 所需权限的描述（针对不同的使用案例）。

为了让用户在 Amazon SageMaker AI 中使用 Amazon Redshift ML，请创建一个 IAM 角色，该角色拥有的策略比默认策略更具限制性。您可以使用以下策略。您还可以修改此策略以满足您的需求。

以下策略显示了从 Amazon Redshift 运行 SageMaker AI Autopilot（具备模型可解释性）所需的权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreateTrainingJob",
                "sagemaker:CreateAutoMLJob",
                "sagemaker:CreateCompilationJob",
                "sagemaker:CreateEndpoint",
                "sagemaker:DescribeAutoMLJob",
                "sagemaker:DescribeTrainingJob",
                "sagemaker:DescribeCompilationJob",
                "sagemaker:DescribeProcessingJob",
                "sagemaker:DescribeTransformJob",
                "sagemaker:ListCandidatesForAutoMLJob",
                "sagemaker:StopAutoMLJob",
                "sagemaker:StopCompilationJob",
                "sagemaker:StopTrainingJob",
                "sagemaker:DescribeEndpoint",
                "sagemaker:InvokeEndpoint",
                "sagemaker:StopProcessingJob",
                "sagemaker:CreateModel",
                "sagemaker:CreateProcessingJob"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:model/*redshift*",
                "arn:aws:sagemaker:*:*:training-job/*redshift*",
                "arn:aws:sagemaker:*:*:automl-job/*redshift*",
                "arn:aws:sagemaker:*:*:compilation-job/*redshift*",
                "arn:aws:sagemaker:*:*:processing-job/*redshift*",
                "arn:aws:sagemaker:*:*:transform-job/*redshift*",
                "arn:aws:sagemaker:*:*:endpoint/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/Endpoints/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/ProcessingJobs/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TrainingJobs/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TransformJobs/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": [
                        "SageMaker",
                        "/aws/sagemaker/Endpoints",
                        "/aws/sagemaker/ProcessingJobs",
                        "/aws/sagemaker/TrainingJobs",
                        "/aws/sagemaker/TransformJobs"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetAuthorizationToken",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        },
        {
            "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*/*"
            ]
        },
        {
            "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": "*",
            "Condition": {
                "StringEqualsIgnoreCase": {
                    "s3:ExistingObjectTag/Redshift": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "redshift.amazonaws.com",
                        "sagemaker.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

以下策略显示了允许访问 Amazon DynamoDB、Redshift Spectrum 和 Amazon RDS 联合身份验证的完全最低权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreateTrainingJob",
                "sagemaker:CreateAutoMLJob",
                "sagemaker:CreateCompilationJob",
                "sagemaker:CreateEndpoint",
                "sagemaker:DescribeAutoMLJob",
                "sagemaker:DescribeTrainingJob",
                "sagemaker:DescribeCompilationJob",
                "sagemaker:DescribeProcessingJob",
                "sagemaker:DescribeTransformJob",
                "sagemaker:ListCandidatesForAutoMLJob",
                "sagemaker:StopAutoMLJob",
                "sagemaker:StopCompilationJob",
                "sagemaker:StopTrainingJob",
                "sagemaker:DescribeEndpoint",
                "sagemaker:InvokeEndpoint",
                "sagemaker:StopProcessingJob",
                "sagemaker:CreateModel",
                "sagemaker:CreateProcessingJob"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:model/*redshift*",
                "arn:aws:sagemaker:*:*:training-job/*redshift*",
                "arn:aws:sagemaker:*:*:automl-job/*redshift*",
                "arn:aws:sagemaker:*:*:compilation-job/*redshift*",
                "arn:aws:sagemaker:*:*:processing-job/*redshift*",
                "arn:aws:sagemaker:*:*:transform-job/*redshift*",
                "arn:aws:sagemaker:*:*:endpoint/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/Endpoints/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/ProcessingJobs/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TrainingJobs/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TransformJobs/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": [
                        "SageMaker",
                        "/aws/sagemaker/Endpoints",
                        "/aws/sagemaker/ProcessingJobs",
                        "/aws/sagemaker/TrainingJobs",
                        "/aws/sagemaker/TransformJobs"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetAuthorizationToken",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        },
        {
            "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*/*"
            ]
        },
        {
            "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": "*",
            "Condition": {
                "StringEqualsIgnoreCase": {
                    "s3:ExistingObjectTag/Redshift": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:Scan",
                "dynamodb:DescribeTable",
                "dynamodb:Getitem"
            ],
            "Resource": [
                "arn:aws:dynamodb:*:*:table/*redshift*",
                "arn:aws:dynamodb:*:*:table/*redshift*/index/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ListInstances"
            ],
            "Resource": [
                "arn:aws:elasticmapreduce:*:*:cluster/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ListInstances"
            ],
            "Resource": "*",
            "Condition": {
                "StringEqualsIgnoreCase": {
                    "elasticmapreduce:ResourceTag/Redshift": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": "arn:aws:lambda:*:*:function:*redshift*"
        },
        {
            "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*"
            ]
        },
        {
            "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"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "redshift.amazonaws.com",
                        "glue.amazonaws.com",
                        "sagemaker.amazonaws.com",
                        "athena.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

或者，要使用 AWS KMS 密钥用于加密，将以下权限添加到策略中。

```
{
    "Effect": "Allow",
    "Action": [
        "kms:CreateGrant",
        "kms:Decrypt",
        "kms:DescribeKey",
        "kms:Encrypt",
        "kms:GenerateDataKey*"
    ],
    "Resource": [
        "arn:aws:kms:<your-region>:<your-account-id>:key/<your-kms-key>"
    ]
}
```

要支持 Amazon Redshift 和 SageMaker AI 代入先前的 IAM 角色以便与其它服务交互，请将以下信任策略添加到 IAM 角色中。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "redshift.amazonaws.com",
          "sagemaker.amazonaws.com",
          "forecast.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

先前的 Amazon S3 桶 `redshift-downloads/redshift-ml/`，是存储用于其他步骤和示例的示例数据的位置。如果您不需要从 Amazon S3 加载数据，您可以将桶删除。或者，将其替换为用于将数据加载到 Amazon Redshift 的其它 Amazon S3 桶。

**your-account-id**、**your-role** 和 **your-s3-bucket** 值是您在 CREATE MODEL（创建模型）命令中指定的账户 ID、角色和桶。

（可选）如果您为使用 Amazon Redshift ML 指定了一个 AWS KMS 密钥，请使用示例策略的 AWS KMS 密钥部分。**your-kms-key** 值是作为 CREATE MODEL 命令一部分使用的键。

如果您为超参数优化任务指定了一个私有的 Virtual Private Cloud (VPC)，请添加以下权限：

```
{
            "Effect": "Allow",
            "Action": [
            "ec2:CreateNetworkInterface",
            "ec2:CreateNetworkInterfacePermission",
            "ec2:DeleteNetworkInterface",
            "ec2:DeleteNetworkInterfacePermission",
            "ec2:DescribeNetworkInterfaces",
            "ec2:DescribeVpcs",
            "ec2:DescribeDhcpOptions",
            "ec2:DescribeSubnets",
            "ec2:DescribeSecurityGroups"
            ]
}
```

要使用模型解释，请确保您具备调用 SageMaker AI API 操作的权限。建议使用 `AmazonSageMakerFullAccess` 托管式策略。如果您要使用更具限制性的策略创建 IAM 角色，您可以使用以下策略。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateEndpoint",
        "sagemaker:CreateEndpointConfig",
        "sagemaker:DeleteEndpoint",
        "sagemaker:DeleteEndpointConfig",
        "sagemaker:DescribeEndpoint",
        "sagemaker:DescribeEndpointConfig",
        "sagemaker:DescribeModel",
        "sagemaker:InvokeEndpoint",
        "sagemaker:ListTags"
      ],
      "Resource": "*"
    }
  ]
}
```

------

有关 `AmazonSageMakerFullAccess` 托管式策略的更多信息，请参阅《Amazon SageMaker AI 开发人员指南》**中的 [AmazonSageMakerFullAccess](https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonSageMakerFullAccess)。

如果您想创建预测模型，我们建议您使用 `AmazonForecastFullAccess` 托管式策略。如果您要使用更具限制性的策略，请将以下策略添加到您的 IAM 角色中。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "forecast:CreateAutoPredictor",
                "forecast:CreateDataset",
                "forecast:CreateDatasetGroup",
                "forecast:CreateDatasetImportJob",
                "forecast:CreateForecast",
                "forecast:CreateForecastExportJob",
                "forecast:DeleteResourceTree",
                "forecast:DescribeAutoPredictor",
                "forecast:DescribeDataset",
                "forecast:DescribeDatasetGroup",
                "forecast:DescribeDatasetImportJob",
                "forecast:DescribeForecast",
                "forecast:DescribeForecastExportJob",
                "forecast:StopResource",
                "forecast:TagResource",
                "forecast:UpdateDatasetGroup"
             ],
             "Resource": "*"
         }
    ]
}
```

------

如果您想创建 Amazon Bedrock 模型，我们建议您使用 `AmazonBedrockFullAccess` 托管式策略。如果您要使用更具限制性的策略，请将以下策略添加到您的 IAM 角色中。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "bedrock:InvokeModel",
            "Resource": [
                "*",
                "arn:aws:bedrock:us-east-1::foundation-model/*"
            ]
        }
    ]
}
```

------

有关 Amazon Redshift ML 的更多信息，请参阅[在 Amazon Redshift 中使用机器学习](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning.html)、[CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html) 或 [CREATE EXTERNAL MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_create_external_model.html)。

## 串流摄取的权限


串流摄取适用于两项服务。这两项服务是 Kinesis Data Streams 和 Amazon MSK。

### 在 Kinesis Data Streams 中使用串流摄取所需的权限


有关托管式策略示例的过程，请参阅[开始使用 Amazon Kinesis Data Streams 串流摄取](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started.html)。

### 在 Amazon MSK 中使用串流摄取所需的权限


有关托管式策略示例的过程，请参阅[开始使用 Amazon Managed Streaming for Apache Kafka 串流摄取](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started-MSK.html)。

## 使用数据共享 API 操作所需的权限


要控制对数据共享 API 操作的访问，请使用基于 IAM 操作的策略。有关如何管理 IAM 策略的信息，请参阅《IAM 用户指南》**中的[管理 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)。

当创建者集群管理员需要使用 `AuthorizeDataShare` 调用来授权 AWS 账户 账户外数据共享出口的时候，更是如此。在这种情况下，您可以设置基于 IAM 操作的策略来授予此权限。使用 `DeauthorizeDataShare` 调用以撤消出口。

使用基于 IAM 操作的策略时，您还可以在策略中指定 IAM 资源，例如 `DataShareARN`。下面显示了 `DataShareARN` 的格式和示例。

```
arn:aws:redshift:region:account-id:datashare:namespace-guid/datashare-name
arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/SalesShare
```

您可以通过在 IAM 策略中指定数据更新名称来限制对特定数据共享的 `AuthorizeDataShare` 访问权限。

```
{
  "Statement": [
    {
      "Action": [
        "redshift:AuthorizeDataShare",
      ],
      "Resource": [
        "arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/SalesShare"
      ],
      "Effect": "Deny"
    }
  ]
}
```

您还可以将 IAM 策略限制为特定创建器集群拥有的所有数据共享。若要执行此操作，请将策略中的 **datashare-name** 值替换为通配符或星号。保留集群的 `namespace-guid` 值。

```
arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/*
```

以下 IAM 策略防止实体面向特定创建者集群拥有的数据共享调用 `AuthorizeDataShare`。

```
{
  "Statement": [
    {
      "Action": [
        "redshift:AuthorizeDataShare",
      ],
      "Resource": [
        "arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/*"
      ],
      "Effect": "Deny"
    }
  ]
}
```

`DataShareARN` 会根据数据共享名称和所拥有的全局唯一的集群命名空间 ID (GUID) 来限制访问。它通过将名称指定为星号来完成此操作。

## GetClusterCredentials 的资源策略


要使用 IAM 数据库凭证通过 JDBC 或 ODBC 连接来连接到集群数据库，或以编程方式调用 `GetClusterCredentials` 操作，您需要拥有调用 `redshift:GetClusterCredentials` 操作的权限以及对 `dbuser` 资源的访问权限。

如果使用 JDBC 或 ODBC 连接，您可以指定 `server` 和 `port` 来代替 `cluster_id` 和 `region`，为此，您的策略必须允许能够访问 `redshift:DescribeClusters` 资源的 `cluster` 操作。

如果您使用可选参数 `Autocreate`、`DbGroups` 和 `DbName` 调用 `GetClusterCredentials` 操作，您还必须允许这些操作，并允许访问下表中列出的资源。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)

有关资源的更多信息，请参阅 [Amazon Redshift 资源和操作](redshift-iam-access-control-overview.md#redshift-iam-accesscontrol.actions-and-resources)。

您还可以在策略中包括以下条件：
+ `redshift:DurationSeconds`
+ `redshift:DbName`
+ `redshift:DbUser`

**重要**  
对于 SAML SSO 集成，您可能需要使用 `${redshift:DbUser}` 变量指定 IAM 策略。在此类情况下，我们强烈建议您使用条件语句，以确保调用方无法获取与其 AWS userid 不匹配的用户的凭证。例如，`"StringEquals": {"aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}"}"`。请参阅[示例 8：使用 GetClusterCredentials 的 IAM 策略](#redshift-policy-examples-getclustercredentials)。有关条件的更多信息，请参阅[在策略中指定条件](redshift-iam-access-control-overview.md#redshift-policy-resources.specifying-conditions) 

## 客户管理型策略示例


本节的用户策略示例介绍如何授予各 Amazon Redshift 操作的权限。当您使用 Amazon Redshift API、AWS 开发工具包或 AWS CLI 时，可以使用这些策略。

**注意**  
所有示例都使用美国西部（俄勒冈州）区域 (`us-west-2`) 并且包含虚构的账户 ID。

### 示例 1：为用户授予所有 Amazon Redshift 操作和资源的完全访问权限


以下策略允许访问所有资源上的所有 Amazon Redshift 操作。

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

****  

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

------

`Action` 元素中的 `redshift:*` 值指示 Amazon Redshift 中的所有操作。

### 示例 2：拒绝用户访问一组 Amazon Redshift 操作


默认情况下，所有权限都将被拒绝。不过，有时您需要明确拒绝对某个或某组操作的访问。以下策略允许访问所有 Amazon Redshift 操作，但明确拒绝对名称以 `Delete` 开头的任何 Amazon Redshift 操作的访问。该策略适用于 `us-west-2` 中的所有 Amazon Redshift 资源。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowUSWest2Region",
      "Action": [
        "redshift:*"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:redshift:us-east-1:111122223333:*"
    },
   {
     "Sid":"DenyDeleteUSWest2Region",
     "Action": [
        "redshift:Delete*"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:redshift:us-east-1:111122223333:*"
   }
  ]
}
```

------

### 示例 3：允许用户管理集群


以下策略允许用户创建、删除、修改和重启所有集群，但拒绝删除名称以 `protected` 开头的任何集群的权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowClusterManagement",
      "Action": [
        "redshift:CreateCluster",
        "redshift:DeleteCluster",
        "redshift:ModifyCluster",
        "redshift:RebootCluster"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"DenyDeleteProtected",
      "Action": [
        "redshift:DeleteCluster"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:cluster:protected*"
      ],
      "Effect": "Deny"
    }
  ]
}
```

------

### 示例 4：允许用户授予和撤销快照访问权限


以下策略允许用户（如用户 A）执行以下操作：
+ 授予对从名为 `shared` 的集群中创建的任何快照的访问权限。
+ 撤消对从快照名称以 `shared` 开头的 `revokable` 集群中创建的任何快照的访问权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowSharedSnapshots",
      "Action": [
        "redshift:AuthorizeSnapshotAccess"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:shared/*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"AllowRevokableSnapshot",
      "Action": [
        "redshift:RevokeSnapshotAccess"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:snapshot:*/revokable*"
      ],
      "Effect": "Allow"
    }
  ]
}
```

------

如果用户 A 允许用户 B 访问快照，则用户 B 必须拥有以下某项策略才能从该快照还原集群。以下策略允许用户 B 描述集群、从快照还原集群以及创建集群。这些集群的名称必须以 `from-other-account` 开头。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowDescribeSnapshots",
      "Action": [
        "redshift:DescribeClusterSnapshots"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"AllowUserRestoreFromSnapshot",
      "Action": [
        "redshift:RestoreFromClusterSnapshot"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:snapshot:*/*",
        "arn:aws:redshift:us-west-2:444455556666:cluster:from-other-account*"
      ],
      "Effect": "Allow"
    }
  ]
}
```

------

### 示例 5：允许用户复制集群快照以及从快照中还原集群


以下策略允许用户复制从名为 `big-cluster-1` 的集群中创建的任何快照，以及还原名称以 `snapshot-for-restore` 开头的任何快照。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowCopyClusterSnapshot",
      "Action": [
        "redshift:CopyClusterSnapshot"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:snapshot:big-cluster-1/*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"AllowRestoreFromClusterSnapshot",
      "Action": [
        "redshift:RestoreFromClusterSnapshot"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:snapshot:*/snapshot-for-restore*",
        "arn:aws:redshift:us-west-2:123456789012:cluster:*"
      ],
      "Effect": "Allow"
    }
  ]
}
```

------

### 示例 6：允许用户访问 Amazon Redshift 以及相关 AWS 服务的常见操作和资源


 以下示例策略允许访问 Amazon Redshift、Amazon Simple Notification Service (Amazon SNS) 和 Amazon CloudWatch 的所有操作和资源。它还允许对账户下的所有相关 Amazon EC2 资源执行指定的操作。

**注意**  
 此示例策略中指定的 Amazon EC2 操作不支持资源级权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowRedshift",
      "Effect": "Allow",
      "Action": [
        "redshift:*"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid":"AllowSNS",
      "Effect": "Allow",
        "Action": [
          "sns:*"
        ],
        "Resource": [
          "*"
        ]
      },
    {
      "Sid":"AllowCloudWatch",
      "Effect": "Allow",
      "Action": [
        "cloudwatch:*"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid":"AllowEC2Actions",
      "Effect": "Allow",
      "Action": [
        "ec2:AllocateAddress",
        "ec2:AssociateAddress",
        "ec2:AttachNetworkInterface",
        "ec2:DescribeAccountAttributes",
        "ec2:DescribeAddresses",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeInternetGateways",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSubnets",
        "ec2:DescribeVpcs"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

### 示例 7：允许用户使用 Amazon Redshift 控制台标记资源


以下示例策略允许用户使用 AWS Resource Groups 通过 Amazon Redshift 控制台对资源进行标记。此策略可附加到调用新的或原始 Amazon Redshift 控制台的用户角色。有关标记的更多信息，请参阅[在 Amazon Redshift 中为资源添加标签](amazon-redshift-tagging.md)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid":"TaggingPermissions",
            "Effect": "Allow",
            "Action": [
                "redshift:DeleteTags",
                "redshift:CreateTags",
                "redshift:DescribeTags",
                "tag:UntagResources",
                "tag:TagResources"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 示例 8：使用 GetClusterCredentials 的 IAM 策略


以下策略使用这些示例参数值：
+ 区域：`us-west-2`
+ AWS 账户：`123456789012`
+ 集群名称：`examplecluster`

以下策略启用 `GetCredentials`、`CreateClusterUser` 和 `JoinGroup` 操作。仅在 AWS 用户 ID 与 `"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com"` 匹配时，该策略才使用条件键以允许 `GetClusterCredentials` 和 `CreateClusterUser` 操作。IAM 访问权限仅对 `"testdb"` 数据库是必需的。该策略还允许用户参与名为 `"common_group"` 的组。

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

****  

```
{
"Version":"2012-10-17",		 	 	 
  "Statement": [
    {
     "Sid":"GetClusterCredsStatement",
      "Effect": "Allow",
      "Action": [
        "redshift:GetClusterCredentials"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/${redshift:DbUser}",
        "arn:aws:redshift:us-west-2:123456789012:dbname:examplecluster/testdb",
        "arn:aws:redshift:us-west-2:123456789012:dbgroup:examplecluster/common_group"
      ],
        "Condition": {
           "StringEquals": {
           "aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com"
           }
        }
    },
    {
      "Sid":"CreateClusterUserStatement",
      "Effect": "Allow",
      "Action": [
        "redshift:CreateClusterUser"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/${redshift:DbUser}"
      ],
      "Condition": {
        "StringEquals": {
          "aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com"
        }
      }
    },
    {
      "Sid":"RedshiftJoinGroupStatement",
      "Effect": "Allow",
      "Action": [
        "redshift:JoinGroup"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:dbgroup:examplecluster/common_group"
      ]
    }
  ]
}
```

------

以下示例显示允许 IAM 角色调用 `GetClusterCredentials` 操作的策略。该策略指定，对于名为 ` examplecluster` 的集群上的名为 ` temp_creds_user` 的数据库用户，Amazon Redshift `dbuser` 资源为其授予角色访问权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "redshift:GetClusterCredentials",
    "Resource": "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/temp_creds_user"
  }
}
```

------

您可使用通配符 (\$1) 替换完整或部分集群名称、用户名和数据库组名称。以下示例允许指定账户中的任何集群上所有以 `temp_` 开头的用户名调用。

**重要**  
以下示例中的语句指定通配符 (\$1) 作为资源的值，以便策略允许以指定字符开头的任何资源。在 IAM 策略使用通配符可能过于宽松。作为最佳实践，我们建议对您的业务应用程序使用最严格的可行策略。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "redshift:GetClusterCredentials",
    "Resource": "arn:aws:redshift:us-west-2:123456789012:dbuser:*/temp_*"
  }
}
```

------

以下示例显示一个允许 IAM 角色调用 `GetClusterCredentials` 操作的策略，并提供了自动创建新用户和指定用户在登录时加入的组的选项。`"Resource": "*" `子句向角色授予对任何资源 (包括集群、数据库用户或用户组) 的访问权限。

**重要**  
以下示例中的语句指定通配符（\$1）作为给定操作的资源，使策略能够允许访问任何集群和数据库用户，并支持创建任何用户。在 IAM 策略使用通配符可能过于宽松。作为最佳实践，我们建议对您的业务应用程序使用最严格的可行策略。

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

****  

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

------

有关更多信息，请参阅 [Amazon Redshift ARN 语法](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-redshift)。

# Amazon Redshift 的原生身份提供者 (IdP) 联合身份验证
原生身份提供者（IdP）联合身份验证

借助原生身份提供者联合身份验证，管理 Amazon Redshift 的身份和权限变得更加容易，因为它利用现有身份提供者来简化身份验证和管理权限。它可以通过使身份提供者向 Redshift 共享身份元数据来实现这一目标。对于此功能的第一次迭代，受支持的身份提供者是 [Microsoft Azure Active Directory (Azure AD)](https://azure.microsoft.com/en-us/services/active-directory/)。

要将 Amazon Redshift 配置为对来自第三方身份提供者的身份进行身份验证，您可以向 Amazon Redshift 注册身份提供者。这样做可以让 Redshift 对身份提供者定义的用户和角色进行身份验证。这样，您可以避免必须同时在第三方身份提供者和 Amazon Redshift 中执行精细的身份管理，因为身份信息是共享的。

有关使用从身份提供者 (IdP) 组转移的会话角色的信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [PG\$1GET\$1SESSION\$1ROLES](https://docs.aws.amazon.com/redshift/latest/dg/PG_GET_SESSION_ROLES.html) 。

## 原生身份提供者（IdP）联合身份验证
原生身份提供者（IdP）联合身份验证

 要完成身份提供者和 Amazon Redshift 之间的初步设置，您需要执行以下几个步骤：首先，向身份提供者注册 Amazon Redshift 作为第三方应用程序，同时请求必要的 API 权限。然后在身份提供者中创建用户和组。最后，您可以使用 SQL 语句向 Amazon Redshift 注册身份提供者，这些语句设置身份提供者特有的身份验证参数。在向 Redshift 注册身份提供者的过程中，您分配一个命名空间以确保正确地对用户和角色进行分组。

 在向 Amazon Redshift 注册身份提供者后，Redshift 和身份提供者之间就建立了通信。然后，客户端可以作为身份提供者实体传递令牌并向 Redshift 进行身份验证。Amazon Redshift 使用 IdP 组成员资格信息来映射到 Redshift 角色。如果用户之前不存在于 Redshift 中，则会创建该用户。创建映射到身份提供者组的角色（如果它们不存在）。Amazon Redshift 管理员授予对角色的权限，而用户可以运行查询和执行其他数据库任务。

以下步骤概述当用户登录时原生身份提供者联合身份验证的工作方式：

1. 当用户从客户端使用原生 IdP 选项登录时，身份提供者令牌将从客户端发送到驱动程序。

1. 对用户进行身份验证。如果 Amazon Redshift 中不存在此用户，则将创建一个新用户。Redshift 将用户的身份提供者组映射到 Redshift 角色。

1. 权限是根据用户的 Redshift 角色分配的。管理员将这些权限授予用户和角色。

1. 用户可以查询 Redshift。

## 桌面客户端工具
桌面客户端工具连接到 Amazon Redshift

有关如何使用原生身份提供者联合身份验证通过 Power BI 连接到 Amazon Redshift 的说明，请参阅博客文章[将 Amazon Redshift 原生 IdP 联合身份验证与 Microsoft Azure Active Directory (AD) 和 Power BI 集成](https://aws.amazon.com/blogs/big-data/integrate-amazon-redshift-native-idp-federation-with-microsoft-azure-ad-and-power-bi/)。它介绍了使用 Azure AD 实施 Amazon Redshift 原生 IdP 设置的按步骤过程。它详细介绍了为 Power BI 桌面或 Power BI 服务设置客户端连接的步骤。这些步骤包括应用程序注册、配置权限和配置凭证。

要了解如何使用 Power BI 桌面和 JDBC 客户端 SQL WorkBench/J 将 Amazon Redshift 原生 IdP 联合身份验证与 Azure AD 集成，请观看以下视频：

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/S3MQLvZ-NiI/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/S3MQLvZ-NiI)


有关如何使用原生身份提供者联合身份验证通过 SQL 客户端（特别是 DBEaver 或 SQL WorkBench/J）连接到 Amazon Redshift 的说明，请参阅博客文章[使用 SQL 客户端将 Amazon Redshift 原生 IdP 联合身份验证与 Microsoft Azure AD 集成](https://aws.amazon.com/blogs/big-data/integrate-amazon-redshift-native-idp-federation-with-microsoft-azure-ad-using-a-sql-client/)。

## 限制
限制

以下限制适用：
+  Amazon Redshift 驱动程序从以下版本开始支持 `BrowserIdcAuthPlugin`：
  +  Amazon Redshift JDBC 驱动程序 v2.1.0.30 
  +  Amazon Redshift ODBC 驱动程序 v2.1.3 
  +  Amazon Redshift Python 驱动程序 v2.1.3 
+  Amazon Redshift 驱动程序从以下版本开始支持 `IdpTokenAuthPlugin`：
  +  Amazon Redshift JDBC 驱动程序 v2.1.0.19 
  +  Amazon Redshift ODBC 驱动程序 v2.0.0.9 
  +  Amazon Redshift Python 驱动程序 v2.0.914 
+ **不支持增强型 VPC** – 使用 AWS IAM Identity Center 配置 Redshift 可信身份传播时，不支持增强型 VPC。有关增强型 VPC 的更多信息，请参阅 [Amazon Redshift 中的增强型 VPC 路由](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html)。
+  **AWS IAM Identity Center 缓存** – AWS IAM Identity Center 会缓存会话信息。当您尝试通过 Redshift 查询编辑器 v2 连接到 Redshift 数据库时，这可能会导致无法预测的访问问题。这是因为查询编辑器 v2 中相关联的 AWS IAM Identity Center 会话即使在数据库用户退出 AWS 控制台的情况下仍然有效。缓存会在一小时后过期，这通常可以解决任何问题。

# 在 Amazon Redshift 上设置身份提供者
在 Amazon Redshift 上设置身份提供者

本节介绍配置身份提供者和 Amazon Redshift 以便为原生身份提供者联合身份验证建立通信的步骤。您需要身份提供者的有效账户。在配置 Amazon Redshift 之前，您可以向身份提供者注册 Redshift 作为应用程序，并授予管理员同意。

在 Amazon Redshift 中，完成以下步骤：

1. 运行 SQL 语句来注册身份提供者，包括 Azure 应用程序元数据的说明。要在 Amazon Redshift 中创建身份提供者，请在替换参数值 *issuer*、*client\$1id*、*client\$1secret* 和 *audience* 后运行以下命令。这些参数特定于 Microsoft Azure AD。将身份提供者名称替换为您选择的名称，然后用唯一名称替换命名空间，以包含来自身份提供者目录中的用户和角色。

   ```
   CREATE IDENTITY PROVIDER oauth_standard TYPE azure
   NAMESPACE 'aad'
   PARAMETERS '{
   "issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/",
   "client_id":"<client_id>",
   "client_secret":"BUAH~ewrqewrqwerUUY^%tHe1oNZShoiU7",
   "audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"]
   }'
   ```

   类型 `azure` 表示该提供商特意加强了与 Microsoft Azure AD 的通信。这是目前唯一受支持的第三方身份提供者。
   + *issuer* - 收到令牌时要信任的发布者 ID。*tenant\$1id* 的唯一标识符附加到发布者之后。
   + *client\$1id* - 向身份提供者注册的应用程序的唯一公有标识符。这可以称为应用程序 ID。
   + *client\$1secret* - 只有身份提供者和注册的应用程序才知道的秘密标识符或密码。
   + *audience* - 在 Azure 中分配给应用程序的应用程序 ID。

   

   您可以在创建身份提供者时设置参数来指定证书、私有密钥和私有密钥密码，而不使用共享客户端密钥。

   ```
   CREATE IDENTITY PROVIDER example_idp TYPE azure 
   NAMESPACE 'example_aad' 
   PARAMETERS '{"issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/", 
   "client_id":"<client_id>", 
   "audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"], 
   "client_x5t":"<certificate thumbprint>", 
   "client_pk_base64":"<private key in base64 encoding>", 
   "client_pk_password":"test_password"}';
   ```

   私有密钥密码 *client\$1pk\$1password* 为可选项。

1. 可选：在 Amazon Redshift 中运行 SQL 命令以预先创建用户和角色。这有助于提前授予权限。Amazon Redshift 中的角色名称如下所示：*<Namespace>:<GroupName on Azure AD>*。例如，当您在 Microsoft Azure AD 中创建一个名为 `rsgroup` 的组和一个名为 `aad` 的命名空间时，角色名称为 `aad:rsgroup`。从身份提供者命名空间中的这些用户名和组成员资格定义 Amazon Redshift 中的用户和角色名称。

   角色和用户的映射包括验证他们的 `external_id` 值，以确保它是最新的。外部 ID 将映射到身份提供者中组或用户的标识符。例如，角色的外部 ID 将映射到相应的 Azure AD 组 ID。同样，每个用户的外部 ID 都将映射到他们在身份提供者中的 ID。

   ```
   create role "aad:rsgroup";
   ```

1. 根据您的要求向角色授予相关权限。例如：

   ```
   GRANT SELECT on all tables in schema public to role "aad:rsgroup";
   ```

1. 您还可向特定用户授予权限。

   ```
   GRANT SELECT on table foo to aad:alice@example.com
   ```

   请注意，对于联合身份验证的外部用户，其角色成员资格仅在该用户的会话中可用。这对创建数据库对象有影响。例如，当联合身份验证的外部用户创建任何视图或存储过程时，同一个用户无法将这些对象的权限委托给其他用户和角色。

**命名空间的解释**

命名空间将用户或角色映射到特定身份提供者。例如，在 AWS IAM 中创建的用户的前缀是 `iam:`。此前缀可防止用户名冲突，并使支持多个身份存储成为可能。如果用户 alice@example.com 来自向 *aad* 命名空间注册的身份源，则当此用户登录时，会在 Redshift 中创建用户 `aad:alice@example.com`（如果此用户尚未存在）。请注意，用户和角色命名空间与 Amazon Redshift 集群命名空间具有不同的功能，后者是与集群关联的唯一标识符。

# 自动为身份提供者创建 Amazon Redshift 角色
自动为身份提供者创建角色

借助此特征，您可以根据身份提供者（IdP）的组成员资格在 Redshift 中自动创建角色。自动创建角色支持具有本机 IdP 集成的 Azure Active Directory。

自动创建角色有几个好处。自动创建角色时，Redshift 会在您的 IdP 中创建具有组成员资格的角色，因此您可以避免繁琐的手动角色创建和维护。还可以选择筛选映射到 Redshift 角色的组。

## 工作原理


当您以 IdP 用户身份登录 Redshift 时，会发生以下一系列事件：

1. Redshift 从 IdP 那里检索您的组成员资格。

1. Redshift 使用角色格式 `idp_namespace:rolename` 自动创建映射到这些组的角色。

1. Redshift 授予您使用映射角色的权限。

每次用户登录时，都会自动创建目录中不存在但该用户所属的每个组。您可以选择设置包括和排除筛选条件，从而控制哪些 IdP 组已创建 Redshift 角色。

## 配置自动创建角色


使用 `CREATE IDENTITY PROVIDER` 和 `ALTER IDENTITY PROVIDER` 命令启用和配置自动角色创建。

```
-- Create a new IdP with auto role creation enabled
CREATE IDENTITY PROVIDER <idp_name> TYPE azure
  NAMESPACE '<namespace>' 
  APPLICATION_ARN 'app_arn'
  IAM_ROLE 'role_arn'
  AUTO_CREATE_ROLES TRUE; 

-- Enable on existing IdP 
ALTER IDENTITY PROVIDER <idp_name>
  AUTO_CREATE_ROLES TRUE;

-- Disable  
ALTER IDENTITY PROVIDER <idp_name>
  AUTO_CREATE_ROLES FALSE;
```

## 筛选组


您可以选择使用 `INCLUDE` 和 `EXCLUDE` 模式筛选映射到 Redshift 角色的 IdP 组。当模式冲突时，`EXCLUDE` 优先于 `INCLUDE`。

```
-- Only create roles for groups with 'dev' 
CREATE IDENTITY PROVIDER <idp_name> TYPE azure
  ...
  AUTO_CREATE_ROLES TRUE
  INCLUDE GROUPS LIKE '%dev%';
    
-- Exclude 'test' groups
ALTER IDENTITY PROVIDER <idp_name> 
  AUTO_CREATE_ROLES TRUE
  EXCLUDE GROUPS LIKE '%test%';
```

## 示例


以下示例说明了如何启用自动创建角色而不进行筛选。

```
CREATE IDENTITY PROVIDER prod_idc TYPE azure ...
  AUTO_CREATE_ROLES TRUE;
```

以下示例包括开发组，不包括测试组。

```
ALTER IDENTITY PROVIDER prod_idc
  AUTO_CREATE_ROLES TRUE
  INCLUDE GROUPS LIKE '%dev%'
  EXCLUDE GROUPS LIKE '%test%';
```

## 最佳实践


为角色启用自动创建功能时，请考虑遵循以下最佳实践：
+ 使用 `INCLUDE` 和 `EXCLUDE` 筛选条件来控制哪些组获得角色。
+ 定期审核角色并清理未使用的角色。
+ 利用 Redshift 角色层次结构来简化权限管理。

# 将 Redshift 与 AWS IAM Identity Center 连接来提供单点登录体验
单点登录体验

您可以通过可信身份传播来管理用户和组对 Amazon Redshift 数据仓库的访问权限。

[Trusted identity propagation](https://docs.aws.amazon.com//singlesignon/latest/userguide/trustedidentitypropagation-overview.html) 是一项 AWS IAM Identity Center 功能，已连接的 AWS 服务的管理员可以使用它来授予和审计对服务数据的访问权限。对这些数据的访问权限基于用户属性，例如组关联。设置可信身份传播要求已连接的 AWS 服务的管理员和 IAM Identity Center 管理员之间进行协作。有关更多信息，请参阅 [Prerequisites and considerations](https://docs.aws.amazon.com//singlesignon/latest/userguide/trustedidentitypropagation-overall-prerequisites.html)。

以一个端到端案例来说明，您可以使用 Amazon Quick 控制面板或 Amazon Redshift 查询编辑器 v2 来访问 Redshift。在这种情况下，访问权限基于 AWS IAM Identity Center 组。Redshift 可以确定用户的身份以及他们的组成员资格。AWSIAM Identity Center 还允许通过 Okta 或 PingOne 等第三方身份提供者 (IdP) 连接和管理身份。

管理员设置 Redshift 与 AWS IAM Identity Center 之间的连接后，他们可以根据身份提供者的组来配置精细访问权限，以授权用户访问数据。

**重要**  
从 AWS IAM Identity Center 或连接的身份提供者（IdP）目录中删除用户时，该用户不会自动从 Amazon Redshift 目录中删除。要从 Amazon Redshift 目录中手动删除用户，请运行 `DROP USER` 命令以完全删除已从 AWS IAM Identity Center 或 IdP 中移除的用户。有关如何删除用户的更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [DROP USER](https://docs.aws.amazon.com/redshift/latest/dg/r_DROP_USER.html)。

## Redshift 与 AWS IAM Identity Center 集成的优势
Redshift 与 AWS IAM Identity Center 集成的优势

将 AWS IAM Identity Center 与 Redshift 结合使用，可以在以下方面为企业带来益处：
+  Amazon Quick 中的控制面板作者无需重新输入密码，也无需要求管理员设置具有复杂权限的 IAM 角色，即可连接 Redshift 数据来源。
+  AWS IAM Identity Center 为您在 AWS 中的员工用户提供了一个中心位置。您可以直接在 AWS IAM Identity Center 创建用户和群，也可以连接您在基于标准的身份提供者中管理的现有用户和组，例如 Okta、PingOne 或 Microsoft Entra ID（Azure AD）。AWSIAM Identity Center 将身份验证定向到您为用户和组选择的信任源，并维护一个用户和组的目录以供 Redshift 访问。有关更多信息，请参阅《AWS IAM Identity Center 用户指南》**中的[管理您的身份源](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source.html)和[支持的身份提供者](https://docs.aws.amazon.com/singlesignon/latest/userguide/supported-idps.html)。
+ 通过简单的自动发现和连接功能，您便可与多个 Redshift 集群和工作组共享一个 AWS IAM Identity Center 实例。这样可以快速添加集群，而无需额外地为每个集群配置 AWS IAM Identity Center 连接，还可确保所有集群和工作组都能一致地查看用户、其属性和组。请注意，您企业的 AWS IAM Identity Center 实例必须与要连接的任意 Redshift 数据共享位于同一区域。
+ 由于用户身份已知并与数据访问记录在一起，因此您可以通过在 AWS CloudTrail 中审计用户的访问，更轻松地满足合规性监管要求。

## 用于连接应用程序的管理员角色
用于连接应用程序的管理员角色

在将分析应用程序连接到 AWS IAM Identity Center 托管的 Redshift 应用程序的过程中，以下角色非常关键：
+ **应用程序管理员** – 创建应用程序并配置要与哪些服务启用身份令牌交换。此管理员还需要指定哪些用户或组有权访问应用程序。
+ **数据管理员** – 配置对数据的精细访问权限。AWS IAM Identity Center 中的用户和组可以映射到特定权限。

## 使用 AWS IAM Identity Center 通过 Amazon Quick 连接到 Amazon Redshift
使用 AWS IAM Identity Center 通过 Amazon Quick 连接到 Amazon Redshift

以下内容演示在连接到 Redshift 并通过 AWS IAM Identity Center 管理访问权限时，如何使用 Quick 通过 Redshift 进行身份验证：[授权从 Quick 到 Amazon Redshift 集群的连接](https://docs.aws.amazon.com/quick/latest/userguide/enabling-access-redshift.html)。这些步骤也适用于 Amazon Redshift Serverless。

## 使用 AWS IAM Identity Center 通过 Amazon Redshift 查询编辑器 v2 连接到 Amazon Redshift
通过 Amazon Redshift 查询编辑器 v2 连接到 Amazon Redshift

完成设置 AWS IAM Identity Center 与 Redshift 连接的步骤后，用户可以通过基于 AWS IAM Identity Center 且以命名空间为前缀的身份，访问数据库以及数据库中的相应对象。有关使用查询编辑器 v2 登录身份连接到 Redshift 数据库的更多信息，请参阅[使用查询编辑器 v2 查询数据库使用 Amazon Redshift 查询编辑器 v2 查询数据库](query-editor-v2.md)。



## 跨多个 AWS 区域使用 AWS IAM Identity Center
跨多个 AWS 区域使用 AWS IAM Identity Center

Amazon Redshift 在多个 AWS 区域中支持 AWS IAM Identity Center。您可以将 AWS IAM Identity Center 从您的主 AWS 区域扩展到其它区域，从而通过靠近用户和提高可靠性来提高性能。在 AWS IAM Identity Center 中添加新区域后，您无需从主区域中复制身份，即可在新区域中创建 Redshift IAM Identity Center 应用程序。您可以在新区域中使用 AWS IAM Identity Center 设置 Amazon Redshift 联合权限，在该新区域中，您可以启用行级、列级和掩蔽控件。有关在多个区域中开始使用 AWS IAM Identity Center 的更多详细信息，请参阅《AWS IAM Identity Center 用户指南》**中的[在多个 AWS 区域中管理 AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/multi-region-iam-identity-center.html)。

## 使用 AWS IAM Identity Center 连接到 Amazon Redshift 的优势
限制

使用 AWS IAM Identity Center 单点登录时，请考虑以下限制：


+  **不支持增强型 VPC**：当您对 Amazon Redshift 使用 AWS IAM Identity Center 单点登录时，不支持增强型 VPC。有关增强型 VPC 的更多信息，请参阅 [Amazon Redshift 中的增强型 VPC 路由](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html)。

# 设置 AWS IAM Identity Center 与 Amazon Redshift 的集成
设置 AWS IAM Identity Center 与 Amazon Redshift 的集成

您的 Amazon Redshift 集群管理员或 Amazon Redshift Serverless 管理员必须执行多个步骤，以将 Redshift 配置为启用了 AWS IAM Identity Center 的应用程序。这样，Redshift 便可以自动发现并连接到 AWS IAM Identity Center 来获取登录和用户目录服务。在此之后，当 Redshift 管理员创建集群或工作组时，他们可以允许新的数据仓库使用 AWS IAM Identity Center 来管理数据库访问。

启用 Redshift 作为 AWS IAM Identity Center 托管应用程序的意义在于，您可以从 AWS IAM Identity Center 中或与之集成的第三方身份提供者控制用户和组的权限。当数据库用户（例如分析师或数据科学家）登录 Redshift 数据库时，服务会在 AWS IAM Identity Center 中检查他们所属的组，这些组与 Redshift 中的角色名称相匹配。通过这种方式，举例而言，定义了 Redshift 数据库角色名称的组可以访问一组表以便进行销售分析。以下部分将介绍如何完成此设置。

## 先决条件
先决条件

将 AWS IAM Identity Center 与 Amazon Redshift 集成的先决条件如下所示：
+ *账户配置* – 如果您计划使用跨账户应用场景，或者如果您在具有相同 AWS IAM Identity Center 实例的不同账户中使用 Redshift 集群，则必须在 AWS Organizations 管理账户中配置 AWS IAM Identity Center。这包括配置您的身份源。有关更多信息，请参阅**《AWS IAM Identity Center 用户指南》中的[入门](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)、[员工身份](https://docs.aws.amazon.com/singlesignon/latest/userguide/identities.html)和[支持的身份提供者](https://docs.aws.amazon.com/singlesignon/latest/userguide/supported-idps.html)。您必须确保已在 AWS IAM Identity Center 中创建用户或组，或者已从您的身份源同步用户和组，然后才能在 Redshift 中将他们指定到 Redshift 中的数据。
**注意**  
您可以选择使用 AWS IAM Identity Center 的账户实例，前提是 Redshift 和 AWS IAM Identity Center 位于同一个账户中。在创建和配置 Redshift 集群或工作组时，您可以使用小组件创建此实例。
+ *配置可信令牌发布者* – 在某些情况下，您可能需要使用可信令牌发布者，这是可以发布和验证信任令牌的实体。在执行此操作之前，需要先执行预备步骤，然后配置 AWS IAM Identity Center 集成的 Redshift 管理员才能选择可信令牌发布者，并添加必要的属性以完成配置。这些步骤可能包括在 AWS IAM Identity Center 控制台中，将外部身份提供者配置为可信令牌发布者并添加其属性。要完成这些步骤，请参阅 [Using applications with a trusted token issuer](https://docs.aws.amazon.com/singlesignon/latest/userguide/using-apps-with-trusted-token-issuer.html#setuptrustedtokenissuer)。
**注意**  
并非所有外部连接都需要设置可信令牌发布者。使用 Amazon Redshift 查询编辑器 v2 连接到您的 Redshift 数据库时，不需要配置可信令牌发布者。但可能需要对第三方应用程序进行配置，例如通过您的身份提供者进行身份验证的控制面板或自定义应用程序。
+ *配置 IAM 角色* – 后面的部分提到了必须配置的权限。您必须按照 IAM 最佳实践添加权限。后面的步骤将会详细介绍具体权限。

有关更多信息，请参阅 [Getting Started with AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-enable-identity-center.html)。

## 配置您的身份提供者以使用 AWS IAM Identity Center
配置您的身份提供者以使用 AWS IAM Identity Center

控制用户和组身份管理的第一步是连接到 AWS IAM Identity Center 并配置您的身份提供者。您可以使用 AWS IAM Identity Center 本身作为身份提供者，也可以连接第三方身份存储，例如 Okta。有关设置与身份提供者的连接和进行配置的更多信息，请参阅**《AWS IAM Identity Center 用户指南》中的[连接到外部身份提供者](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source-idp.html)。请确保在此过程结束时，您已将一小批用户和组添加到 AWS IAM Identity Center 以用于测试目的。

### 管理权限
管理权限

#### Redshift/AWS IAM Identity Center 应用程序生命周期管理所需的权限


您必须创建一个 IAM 身份供 Redshift 管理员用来配置 Redshift，以便与 AWS IAM Identity Center 结合使用。常见的做法是，创建一个具有相应权限的 IAM 角色，并根据需要将其分配给其他身份。该角色必须具有执行以下操作的权限。

**创建 Redshift/AWS IAM Identity Center 应用程序**
+ `sso:PutApplicationAssignmentConfiguration` – 用于安全设置。
+ `sso:CreateApplication` – 用于创建 AWS IAM Identity Center 应用程序。
+ `sso:PutApplicationAuthenticationMethod` – 授予 Redshift 身份验证访问权限。
+ `sso:PutApplicationGrant` – 用于更改可信令牌发布者信息。
+ `sso:PutApplicationAccessScope` – 用于 Redshift AWS IAM Identity Center 应用程序设置。这包括用于 AWS Lake Formation 和用于 [Amazon S3 Access Grants](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-get-started.html)。
+ `redshift:CreateRedshiftIdcApplication` – 用于创建 Redshift AWS IAM Identity Center 应用程序。

**描述 Redshift/AWS IAM Identity Center 应用程序**
+ `sso:GetApplicationGrant` – 用于列出可信令牌发布者信息。
+ `sso:ListApplicationAccessScopes` – 用于 Redshift AWS IAM Identity Center 应用程序设置以列出下游集成，例如用于 AWS Lake Formation 和 S3 Access Grants。
+ `redshift:DescribeRedshiftIdcApplications` – 用于描述现有 AWS IAM Identity Center 应用程序。

**更改 Redshift/AWS IAM Identity Center 应用程序**
+ `redshift:ModifyRedshiftIdcApplication` – 用于更改现有的 Redshift 应用程序。
+ `sso:UpdateApplication` – 用于更新 AWS IAM Identity Center 应用程序。
+ `sso:GetApplicationGrant` – 获取可信令牌颁发者信息。
+ `sso:ListApplicationAccessScopes` – 用于 Redshift AWS IAM Identity Center 应用程序设置。
+ `sso:DeleteApplicationGrant` – 删除可信令牌颁发者信息。
+ `sso:PutApplicationGrant` – 用于更改可信令牌发布者信息。
+ `sso:PutApplicationAccessScope` – 用于 Redshift AWS IAM Identity Center 应用程序设置。这包括用于 AWS Lake Formation 和用于 [Amazon S3 Access Grants](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-get-started.html)。
+ `sso:DeleteApplicationAccessScope` – 用于删除 Redshift AWS IAM Identity Center 应用程序设置。这包括用于 AWS Lake Formation 和用于 [Amazon S3 Access Grants](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-get-started.html)。

**删除 Redshift/AWS IAM Identity Center 应用程序**
+ `sso:DeleteApplication` – 用于删除 AWS IAM Identity Center 应用程序。
+ `redshift:DeleteRedshiftIdcApplication` – 提供删除现有 Redshift AWS IAM Identity Center 应用程序的功能。

#### Redshift/查询编辑器 v2 应用程序生命周期管理所需的权限


您必须创建一个 IAM 身份供 Redshift 管理员用来配置 Redshift，以便与 AWS IAM Identity Center 结合使用。常见的做法是，创建一个具有相应权限的 IAM 角色，并根据需要将其分配给其他身份。该角色必须具有执行以下操作的权限。

**创建查询编辑器 v2 应用程序**
+ `redshift:CreateQev2IdcApplication` – 用于创建 QEV2 应用程序。
+ `sso:CreateApplication` – 提供创建 AWS IAM Identity Center 应用程序的功能。
+ `sso:PutApplicationAuthenticationMethod` – 授予 Redshift 身份验证访问权限。
+ `sso:PutApplicationGrant` – 用于更改可信令牌发布者信息。
+ `sso:PutApplicationAccessScope` – 用于 Redshift AWS IAM Identity Center 应用程序设置。这包括查询编辑器 v2。
+ `sso:PutApplicationAssignmentConfiguration` – 用于安全设置。

**描述查询编辑器 v2 应用程序**
+ `redshift:DescribeQev2IdcApplications` – 用于描述 AWS IAM Identity Center QEV2 应用程序。

**更改查询编辑器 v2 应用程序**
+ `redshift:ModifyQev2IdcApplication` – 用于更改 AWS IAM Identity Center QEV2 应用程序。
+ `sso:UpdateApplication` – 用于更改 AWS IAM Identity Center QEV2 应用程序。

**删除查询编辑器 v2 应用程序**
+ `redshift:DeleteQev2IdcApplication` – 用于删除 QEV2 应用程序。
+ `sso:DeleteApplication` – 用于删除 QEV2 应用程序。

**注意**  
在 Amazon Redshift 开发工具包中，以下 API 不可用：  
CreateQev2IdcApplication
DescribeQev2IdcApplications
ModifyQev2IdcApplication
DeleteQev2IdcApplication
这些操作专门用于在 AWS 控制台中执行 AWS IAM Identity Center 与 Redshift QEV2 的集成。有关更多信息，请参阅 [Amazon Redshift 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html#amazonredshift-actions-as-permissions)。

#### 数据库管理员在控制台中连接新资源所需的权限


在创建过程中，需要这些权限才能连接新预置的集群或 Amazon Redshift Serverless 工作组。如果您具有这些权限，则控制台中会显示一个选项，供您选择连接到 AWS IAM Identity Center 托管的 Redshift 应用程序。
+ `redshift:DescribeRedshiftIdcApplications`
+ `sso:ListApplicationAccessScopes`
+ `sso:GetApplicationAccessScope`
+ `sso:GetApplicationGrant`

作为最佳实践，我们建议将权限策略附加到 IAM 角色，然后根据需要将其分配给用户和组。有关更多信息，请参阅 [Amazon Redshift 中的 Identity and Access Management](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)。

## 使用 AWS IAM Identity Center 将 Redshift 设置为 AWS 托管应用程序
使用 AWS IAM Identity Center 将 Redshift 设置为 AWS 托管应用程序

Redshift 管理员必须完成以下步骤，使 Redshift 成为 AWS IAM Identity Center 托管应用程序，然后 AWS IAM Identity Center 才能管理 Amazon Redshift 预置集群或 Amazon Redshift Serverless 工作组的身份：

1. 在 Amazon Redshift 或 Amazon Redshift Serverless 控制台菜单中选择 **AWS IAM Identity Center 集成**，然后选择**连接到 AWS IAM Identity Center**。在其中，您可以逐步完成一系列选择来填充 AWS IAM Identity Center 集成的属性。

1. 为 Redshift 的 AWS Identity Center 托管应用程序选择显示名称和唯一名称。

1. 为您的组织指定命名空间。这通常是组织名称的缩写。它已作为前缀添加到 Redshift 数据库中 AWS IAM Identity Center 管理的用户和角色。

1. 选择要使用的 IAM 角色。此 IAM 角色应与用于 Redshift 的其他角色分开，建议不要将该角色其用于其他目的。所需的特定策略权限如下所示：
   + `sso:DescribeApplication` – 需要在目录中创建身份提供者 (IdP) 条目。
   + `sso:DescribeInstance` – 用于手动创建 IdP 联合身份验证角色或用户。

1. 配置客户端连接和可信令牌发布者。配置可信令牌发布者，通过设置与外部身份提供者的关系来协调可信身份的传播。例如，通过身份传播，用户可以登录一个应用程序并访问另一个应用程序中的特定数据。这样用户便可以更无缝地从不同位置收集数据。在此步骤中，您可以在控制台中为每个可信令牌发布者设置属性。这些属性包括名称和受众群体声明（简写为 *aud claim*），您可能需要从工具或服务的配置属性中获取这些信息。您可能还需要从第三方工具的 JSON Web 令牌 (JWT, JSON Web Token) 提供应用程序名称。
**注意**  
每个第三方工具或服务要求的 `aud claim` 可能会有所不同，具体取决于令牌类型，这些可以是身份提供者发布的访问令牌，也可以是 ID 令牌等其他类型。每个供应商都可能不同。在实施可信身份传播并与 Redshift 集成时，您需要为第三方工具发送到 AWS 的令牌类型提供正确的 *aud* 值。请查看您的工具或服务供应商的建议。

   有关可信身份传播的详细信息，请参阅《AWS IAM Identity Center 用户指南》**中的 [Trusted identity propagation overview](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html)。

Redshift 管理员完成步骤并保存配置后，AWS IAM Identity Center 属性将显示在 Redshift 控制台中。您也可以查询系统视图 [SVV\$1IDENTITY\$1PROVIDERS](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_IDENTITY_PROVIDERS.html) 来验证应用程序的属性。这些属性包括应用程序名称和命名空间。您可以使用命名空间作为与应用程序关联的 Redshift 数据库对象的前缀。完成这些任务后，Redshift 便成为支持 AWS IAM Identity Center 的应用程序。控制台中的属性包括集成状态。集成完成后，它会显示**已启用**。完成此流程后，可以在每个新集群上启用 AWS IAM Identity Center 集成。

完成配置后，您可以在 Redshift 中使用 AWS IAM Identity Center 的用户和组，方法是选择**用户**或**组**选项卡，然后选择**分配**。

## 为 Amazon Redshift 集群或 Amazon Redshift Serverless 工作组启用 AWS IAM Identity Center 集成
为 Amazon Redshift 集群或 Amazon Redshift Serverless 工作组启用 AWS IAM Identity Center 集成

您的数据库管理员配置新的 Redshift 资源，使其与 AWS IAM Identity Center 配合使用，从而简化登录和数据访问。此过程包括在创建预置集群或无服务器工作组的步骤中。任何有权创建 Redshift 资源的人员都可以执行这些 AWS IAM Identity Center 集成任务。当您创建预置集群时，请首先在 Amazon Redshift 控制台中选择**创建集群**。以下步骤显示如何为数据库启用 AWS IAM Identity Center 管理。（其中并未包括创建集群的所有步骤。）

1. 在创建集群步骤中，在 **IAM Identity Center 集成**部分中，选择**为 <您的集群名称> 启用**。

1. 在启用集成时，流程中有一个步骤。您可以在控制台中选择**启用 IAM Identity Center 集成**来完成此步骤。

1. 对于新的集群或工作组，使用 SQL 命令在 Redshift 中创建数据库角色。命令如下：

   ```
   CREATE ROLE <idcnamespace:rolename>;
   ```

   命名空间和角色名称如下：
   + *IAM Identity Center 命名空间前缀* – 这是您在设置 AWS IAM Identity Center 与 Redshift 之间的连接时，定义的命名空间。
   + *角色名称* – 此 Redshift 数据库角色必须与 AWS IAM Identity Center 中的组名匹配。

   Redshift 连接到 AWS IAM Identity Center，然后提取创建数据库角色并将其映射到 AWS IAM Identity Center 组所需的信息。

请注意，创建新的数据仓库时，为 AWS IAM Identity Center 集成指定的 IAM 角色将自动附加到预置集群或 Amazon Redshift Serverless 工作组。完成所需集群元数据的输入和资源创建后，您可以在属性中查看 AWS IAM Identity Center 集成的状态。如果您在 AWS IAM Identity Center 中的组名有空格，则在创建匹配角色时需要在 SQL 中使用引号。

启用 Redshift 数据库并创建角色后，就可以使用 Amazon Redshift 查询编辑器 v2 或 Amazon Quick 连接到数据库。详细信息将在后面的部分中进一步说明。

### 使用 API 设置默认 `RedshiftIdcApplication`
使用 API 设置默认应用程序

由您的身份管理员完成设置。使用 API，您可以创建并填充 `RedshiftIdcApplication`，它代表 AWS IAM Identity Center 中的 Redshift 应用程序。

1. 首先，您可以创建用户，并将这些用户添加到 AWS IAM Identity Center 的组中。您可以在 AWS 控制台中为 AWS IAM Identity Center 执行此操作。

1. 调用 `create-redshift-idc-application` 以创建 AWS IAM Identity Center 应用程序，使其与 Redshift 的使用兼容。您可以通过填充所需的值来创建应用程序。显示名称是在 AWS IAM Identity Center 控制面板上显示的名称。IAM 角色 ARN 是拥有 AWS IAM Identity Center 权限的 ARN，同样也可由 Redshift 代入。

   ```
   aws redshift create-redshift-idc-application
   ––idc-instance-arn 'arn:aws:sso:::instance/ssoins-1234a01a1b12345d'
   ––identity-namespace 'MYCO'
   ––idc-display-name 'TEST-NEW-APPLICATION'
   ––iam-role-arn 'arn:aws:redshift:us-east-1:012345678901:role/TestRedshiftRole'
   ––redshift-idc-application-name 'myredshiftidcapplication'
   ```

   以下示例显示了对 `create-redshift-idc-application` 的调用返回的示例 `RedshiftIdcApplication` 响应。

   ```
   "RedshiftIdcApplication": {
                   "IdcInstanceArn": "arn:aws:sso:::instance/ssoins-1234a01a1b12345d",
                   "RedshiftIdcApplicationName": "test-application-1",
                   "RedshiftIdcApplicationArn": "arn:aws:redshift:us-east-1:012345678901:redshiftidcapplication:12aaa111-3ab2-3ab1-8e90-b2d72aea588b",
                   "IdentityNamespace": "MYCO",
                   "IdcDisplayName": "Redshift-Idc-Application",
                   "IamRoleArn": "arn:aws:redshift:us-east-1:012345678901:role/TestRedshiftRole",
                   "IdcManagedApplicationArn": "arn:aws:sso::012345678901:application/ssoins-1234a01a1b12345d/apl-12345678910",
                   "IdcOnboardStatus": "arn:aws:redshift:us-east-1:123461817589:redshiftidcapplication",
                   "RedshiftIdcApplicationArn": "Completed",
                   "AuthorizedTokenIssuerList": [
                          "TrustedTokenIssuerArn": ...,
                          "AuthorizedAudiencesList": [...]...
                   ]}
   ```

1. 您可以使用 `create-application-assignment`，将特定组或个人用户分配给 AWS IAM Identity Center 中的托管应用程序。采用这种做法，您可以指定通过 AWS IAM Identity Center 管理的组。如果数据库管理员在 Redshift 中创建数据库角色，则 AWS IAM Identity Center 中的组名会映射到 Redshift 中的角色名称。数据库中的角色控制权限。有关更多信息，请参阅[Assign user access to applications in the AWS IAM Identity Center console](https://docs.aws.amazon.com/singlesignon/latest/userguide/assignuserstoapp.html)。

1. 启用应用程序后，调用 `create-cluster` 并附上 AWS IAM Identity Center 中的 Redshift 托管应用程序 ARN。通过这样做，可以将集群与 AWS IAM Identity Center 中的托管应用程序关联起来。

### 将 AWS IAM Identity Center 应用程序与现有集群或工作组关联
将 AWS IAM Identity Center 应用程序与现有集群或工作组关联

如果您要为现有的集群或工作组启用 AWS IAM Identity Center 集成，可以通过运行 SQL 命令来实现。您也可以运行 SQL 命令来更改集成的设置。有关更多信息，请参阅 [ALTER IDENTITY PROVIDER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_IDENTITY_PROVIDER.html)。

还可以删除现有身份提供者。以下示例演示如何对附加到身份提供者的用户和角色执行级联删除。

```
DROP IDENTITY PROVIDER
<provider_name> [ CASCADE ]
```

## 设置用户权限
设置用户权限

管理员根据用户的身份属性和组成员资格，在其身份提供者内部或直接在 AWS IAM Identity Center 中配置对各种资源的权限。例如，身份提供者管理员可以将数据库工程师添加到适合其角色的组中。此组名映射到 Redshift 数据库角色名称。该角色提供或限制对 Redshift 中特定表或视图的访问权限。

# 自动为 AWS IAM Identity Center 创建 Amazon Redshift 角色
自动为 AWS IAM Identity Center 创建角色

此特征与 AWS IAM Identity Center 集成，让您可以根据组成员资格在 Redshift 中自动创建角色。

自动创建角色有几个好处。自动创建角色时，Redshift 会在您的 IdP 中创建具有组成员资格的角色，因此您可以避免繁琐的手动角色创建和维护。您还可以选择使用包括和排除模式来筛选映射到 Redshift 角色的组。

## 工作原理


当您以 IdP 用户身份登录 Redshift 时，会发生以下一系列事件：

1. Redshift 从 IdP 那里检索您的组成员资格。

1. Redshift 使用角色格式 `idp_namespace:rolename` 自动创建映射到这些组的角色。

1. Redshift 授予您使用映射角色的权限。

每次用户登录时，都会自动创建目录中不存在但该用户所属的每个组。您可以选择设置包括和排除筛选条件，从而控制哪些 IdP 组已创建 Redshift 角色。

## 配置自动创建角色


使用 `CREATE IDENTITY PROVIDER` 和 `ALTER IDENTITY PROVIDER` 命令启用和配置自动角色创建。

```
-- Create a new IdP with auto role creation enabled
CREATE IDENTITY PROVIDER <idp_name> TYPE AWSIDC
  NAMESPACE '<namespace>' 
  APPLICATION_ARN 'app_arn'
  IAM_ROLE 'role_arn'
  AUTO_CREATE_ROLES TRUE; 

-- Enable on existing IdP 
ALTER IDENTITY PROVIDER <idp_name>
  AUTO_CREATE_ROLES TRUE;

-- Disable  
ALTER IDENTITY PROVIDER <idp_name>
  AUTO_CREATE_ROLES FALSE;
```

## 筛选组


您可以选择使用 `INCLUDE` 和 `EXCLUDE` 模式筛选映射到 Redshift 角色的 IdP 组。当模式冲突时，`EXCLUDE` 优先于 `INCLUDE`。

```
-- Only create roles for groups with 'dev' 
CREATE IDENTITY PROVIDER <idp_name> TYPE AWSIDC
  ...
  AUTO_CREATE_ROLES TRUE
  INCLUDE GROUPS LIKE '%dev%';
    
-- Exclude 'test' groups
ALTER IDENTITY PROVIDER <idp_name>  
  AUTO_CREATE_ROLES TRUE
  EXCLUDE GROUPS LIKE '%test%';
```

## 示例


以下示例说明了如何启用自动创建角色而不进行筛选。

```
CREATE IDENTITY PROVIDER prod_idc TYPE AWSIDC  ...
  AUTO_CREATE_ROLES TRUE;
```

以下示例包括开发组，不包括测试组。

```
ALTER IDENTITY PROVIDER prod_idc
  AUTO_CREATE_ROLES TRUE
  INCLUDE GROUPS LIKE '%dev%'
  EXCLUDE GROUPS LIKE '%test%';
```

## 最佳实践


为角色启用自动创建功能时，请考虑遵循以下最佳实践：
+ 使用 `INCLUDE` 和 `EXCLUDE` 筛选条件来控制哪些组获得角色。
+ 定期审核角色并清理未使用的角色。
+ 利用 Redshift 角色层次结构来简化权限管理。

# Amazon Redshift 与 Amazon S3 访问权限管控的集成
Amazon S3 访问权限管控

通过与 Amazon S3 访问权限管控集成，可以无缝传播 IAM Identity Center 身份，来控制对 Amazon S3 数据的访问权限。此集成支持您根据 IAM Identity Center 用户和组授权 Amazon S3 数据访问权限。

有关 Amazon S3 访问权限管控的信息，请参阅[使用 S3 访问权限管控管理访问权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html)。

使用 Amazon S3 访问权限管控可为应用程序带来以下优势：
+ 基于 IAM Identity Center 身份，对 Amazon S3 数据进行精细的访问控制。
+ 跨 Amazon Redshift 和 Amazon S3 集中管理 IAM Identity Center 身份。
+ 您可以避免为 Amazon S3 访问权限管理单独的 IAM 权限。

## 工作原理


要将应用程序与 Amazon S3 访问权限管控集成，请执行以下操作：
+ 首先，使用 AWS 管理控制台或 AWS CLI 将 Amazon Redshift 配置为与 Amazon S3 访问权限管控集成。
+ 接下来，具有 IdC 管理员权限的用户使用 Amazon S3 访问权限管控服务，向特定 IdC 用户/组授予对 Amazon S3 存储桶或前缀的访问权限。有关更多信息，请参阅[在 S3 访问权限管控中处理授权](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-grant.html)。
+ 当经过 Redshift 身份验证的 IdC 用户运行访问 S3 的查询（如 COPY、UNLOAD 或 Spectrum 操作）时，Amazon Redshift 会从 Amazon S3 访问权限管控服务中检索该 IdC 身份范围内的临时 S3 访问凭证。
+ 然后，Amazon Redshift 使用检索到的临时凭证，来访问该查询的经授权的 Amazon S3 位置。

## 设置与 Amazon S3 访问权限管控的集成


要为 Amazon Redshift 设置与 Amazon S3 访问权限管控的集成，请执行以下操作：

**Topics**
+ [

### 使用 AWS 管理控制台设置与 Amazon S3 访问权限管控的集成
](#redshift-iam-access-control-sso-s3idc-setup-console)
+ [

### 使用 AWS CLI 启用与 Amazon S3 访问权限管控的集成
](#redshift-iam-access-control-sso-s3idc-setup-cli)

### 使用 AWS 管理控制台设置与 Amazon S3 访问权限管控的集成


1. 打开 Amazon Redshift 控制台。

1. 从**集群**窗格中选择您的集群。

1. 在集群的详细信息页面的**身份提供者集成**部分，启用与 **S3 访问权限管控**服务的集成。
**注意**  
如果您未配置 IAM Identity Center，则不会显示**身份提供者集成**部分。有关更多信息，请参阅 [Enabling AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-set-up-for-idc.html)。

### 使用 AWS CLI 启用与 Amazon S3 访问权限管控的集成


1. 要创建一个启用了 S3 集成的新 Amazon Redshift IdC 应用程序，请执行以下操作：

   ```
   aws redshift create-redshift-idc-application <other parameters> 
     --service-integrations '[ {"S3AccessGrants": [{"ReadWriteAccess": {"Authorization": "Enabled"}}]} ]'
   ```

1. 要修改现有应用程序以启用 S3 访问权限管控集成，请执行以下操作：

   ```
   aws redshift modify-redshift-idc-application <other parameters>
     --service-integrations '[ {"S3AccessGrants": [{"ReadWriteAccess": {"Authorization": "Enabled"}}]} ]'
   ```

1. 要修改现有应用程序以禁用 S3 访问权限管控集成，请执行以下操作：

   ```
   aws redshift modify-redshift-idc-application <other parameters>
     --service-integrations '[ {"S3AccessGrants": [{"ReadWriteAccess": {"Authorization": "Disabled"}}]} ]'
   ```

## 使用与 S3 访问权限管控的集成


配置 S3 访问权限管控集成后，访问 S3 数据的查询（例如 `COPY`、`UNLOAD` 或 Spectrum 查询）将使用 IdC 身份进行授权。未使用 IdC 进行身份验证的用户也可以运行这些查询，但是这些用户账户无法利用 IdC 提供的集中式管理。

以下示例显示了通过 S3 访问权限管控集成运行的查询：

```
COPY table FROM 's3://mybucket/data';  // -- Redshift uses IdC identity 
UNLOAD ('SELECT * FROM table') TO 's3://mybucket/unloaded/'    // -- Redshift uses IdC identity
```

# 通过 AWS Lake Formation 查询数据
通过 AWS Lake Formation 查询数据

使用 AWS Lake Formation 可以更轻松地集中管理和保护您的数据湖，并可用于提供数据访问。通过对 AWS IAM Identity Center 和 Redshift 进行配置，将身份传播到 Lake Formation，这样管理员就可以根据组织的身份提供者（IdP）组，实现对 Amazon S3 数据湖精细的访问控制。这些组通过 AWS IAM Identity Center 进行管理。此部分介绍如何配置几个应用场景，用于从数据湖中进行查询和从数据共享中进行查询，以演示如何将 AWS IAM Identity Center 与 Redshift 结合使用，来连接到由 Lake Formation 管理的资源。

## 使用 AWS IAM Identity Center 和 Redshift 连接来查询数据湖
使用 AWS IAM Identity Center 和 Redshift 连接来查询数据湖

这些步骤涵盖的应用场景是，您使用 AWS IAM Identity Center 连接到 Redshift，以便查询 Lake Formation 管理的数据湖。

**先决条件**

此过程有多个先决条件步骤：

1. AWS IAM Identity Center 必须设置为支持 Redshift 的身份验证和身份管理。您可以从控制台启用 AWS IAM Identity Center 并选择身份提供者（IdP）来源。之后，将您的一组 IdP 用户与 AWS IAM Identity Center 同步。您还必须按照本文档前面详述的步骤，在 AWS IAM Identity Center 与 Redshift 之间建立连接。

1. 创建新的 Amazon Redshift 集群，并在配置步骤中启用通过 AWS IAM Identity Center 进行身份管理。

1. 为 Lake Formation 创建托管 AWS IAM Identity Center 应用程序并对其进行配置。此配置应在设置了 AWS IAM Identity Center 与 Redshift 之间的连接之后进行。步骤如下：

   1. 在 AWS CLI 中，使用 `modify-redshift-idc-application` 命令启用 Lake Formation 服务与 AWS IAM Identity Center 托管的 Redshift 应用程序的集成。此调用包括 `service-integrations` 参数，该参数设置为启用对 Lake Formation 进行授权的配置字符串值。

   1. 使用 `create-lake-formation-identity-center-configuration` 命令配置 Lake Formation。这将创建一个适用于 Lake Formation 的 AWS IAM Identity Center 应用程序，该应用程序在 AWS IAM Identity Center 门户中可见。管理员必须设置 `––cli-input-json` 参数，其值是 JSON 文件的路径，该文件使用所有 AWS CLI API 调用的标准格式。您必须包括以下各项的值：
      + `CatalogId` – Lake Formation 目录 ID。
      + `InstanceArn` – AWS IAM Identity Center 实例 ARN 值。

管理员完成先决条件配置后，数据库管理员可以创建用于查询数据湖的外部架构。

1. **管理员创建外部架构** – Redshift 数据库管理员使用以下 SQL 语句连接到数据库并创建外部架构：

   ```
   CREATE EXTERNAL SCHEMA if not exists my_external_schema from DATA CATALOG database 'my_lf_integrated_db' catalog_id '12345678901234';
   ```

   请注意，在这种情况下不需要指定 IAM 角色，因为访问权限是通过 AWS IAM Identity Center 管理的。

1. **管理员授予权限** – 管理员向 AWS IAM Identity Center 组授予使用权限，这会授予对 Redshift 资源的权限。此步骤通过运行如下所示的 SQL 语句完成：

   ```
   GRANT USAGE ON SCHEMA "my_external_schema" to "MYCO:sales";
   ```

   随后，管理员根据组织的要求，使用 AWS CLI 授予 Lake Formation 在对象上的权限：

   ```
   aws lakeformation grant-permissions ...
   ```

1. **用户运行查询** – 举例说明，此时销售人员组中的 AWS IAM Identity Center 用户，可以通过查询编辑器 v2 登录到 Redshift 数据库。然后，他们可以运行访问外部架构中的表的查询，如以下示例：

   ```
   SELECT * from my_external_schema.table1;
   ```

## 使用 AWS IAM Identity Center 和 Redshift 连接来连接到数据共享
使用 AWS IAM Identity Center 和 Redshift 连接来连接到数据共享

 通过 AWS IAM Identity Center 管理访问权限时，您可以从不同的 Redshift 数据仓库访问数据共享。为此，您需要运行查询来设置外部数据库。完成这些步骤的要求是，假定您已在 Redshift 和 AWS IAM Identity Center 之间建立连接，并且您已经创建了 AWS Lake Formation 应用程序，如前面的过程所述。

1. **创建外部数据库** – 管理员创建外部数据库用于数据共享，并通过其 ARN 进行引用。以下是演示如何操作的示例：

   ```
   CREATE DATABASE "redshift_external_db" FROM ARN 'arn:aws:glue:us-east-1:123456789012:database/redshift_external_db-iad' WITH NO DATA CATALOG SCHEMA;
   ```

   在本使用场景中，您将 AWS IAM Identity Center 与 Redshift 用于身份管理，但不包括 IAM 角色。

1. **管理员设置权限** – 创建数据库后，管理员向 AWS IAM Identity Center 组授予使用权限。这将授予对 Redshift 资源的权限：

   ```
   GRANT USAGE ON DATABASE "my_external_db" to "MYCO:sales";
   ```

   管理员还使用 AWS CLI 授予 Lake Formation 在对象上的权限：

   ```
   aws lakeformation grant-permissions ...
   ```

1. **用户运行查询** – 销售组中的用户可以基于分配的权限查询数据库中的表：

   ```
   select * from redshift_external_db.public.employees;
   ```

有关授予数据湖权限和授予数据共享权限的更多信息，请参阅 [Granting permissions to users and groups](https://docs.aws.amazon.com/lake-formation/latest/dg/grant-permissions-sso.html)。有关向架构或数据库授予使用权限的更多信息，请参阅 [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)。

# 使用可信令牌发布者将应用程序或工具与 OAuth 集成
使用可信令牌发布者将应用程序或工具与 OAuth 集成

 您可以向所创建的客户端工具中添加功能，以通过 AWS IAM Identity Center 连接来连接到 Redshift。如果您已经配置了 Redshift 与 AWS IAM Identity Center 的集成，请使用此部分中详述的属性来设置连接。

## 用于使用 AWS IAM Identity Center 连接到 Redshift 的身份验证插件
用于使用 AWS IAM Identity Center 连接到 Redshift 的身份验证插件

您可以使用以下驱动程序插件，通过 AWS IAM Identity Center 连接到 Amazon Redshift：
+  `BrowserIdcAuthPlugin` – 此插件促进实现与 AWS IAM Identity Center 的无缝单点登录集成。插件会创建一个浏览器窗口，供用户使用其企业身份提供者中定义的用户凭证进行登录。
+  `IdpTokenAuthPlugin` – 此插件应由想要自行管理身份验证流程，而不是让 Amazon Redshift 驱动程序打开浏览器窗口进行 AWS IAM Identity Center 身份验证的应用程序使用。插件接受 AWS IAM Identity Center 提供的访问令牌，或 OpenID Connect（OIDC）JSON Web 令牌（JWT），该令牌由与 AWS IAM Identity Center 关联的任意 Web 身份提供者提供，例如 Okta、PingOne 和 Microsoft Entra ID（Azure AD）。客户端应用程序负责生成此必需的访问令牌/JWT。

### 使用 `BrowserIdcAuthPlugin` 进行身份验证


根据您的 Amazon Redshift 驱动程序，使用以下插件名称，通过 `BrowserIdcAuthPlugin` 进行连接。


| 驱动程序 | 连接选项键 | 值 | 备注 | 
| --- | --- | --- | --- | 
| JDBC | `plugin_name` | com.amazon.redshift.plugin.BrowserIdcAuthPlugin | 在连接时，您必须输入插件的完全限定类名。 | 
| ODBC | `plugin_name` | BrowserIdcAuthPlugin |  | 
| Python | `credentials_provider` | BrowserIdcAuthPlugin | Python 驱动程序没有 `plugin_name` 选项可用。请改用`credentials_provider`。 | 

`BrowserIdcAuthPlugin` 插件具有以下额外的连接选项：


| 选项名称 | 必填？ | 说明 | 示例 | 
| --- | --- | --- | --- | 
| idc\$1region | 必需 | AWS IAM Identity Center 实例所在的 AWS 区域。 | us-east-1 | 
| issuer\$1url | 必需 | AWS IAM Identity Center 服务器的实例端点。您可以使用 AWS IAM Identity Center 控制台查找此值。 | https://identitycenter.amazonaws.com/ssoins-g5j2k70sn4yc5nsc | 
| listen\$1port | 可选 | Amazon Redshift 驱动程序用来通过浏览器重定向接收来自 AWS IAM Identity Center 的 `auth_code` 响应的端口。 | 7890 | 
| idc\$1client\$1display\$1name | 可选 | 在 AWS IAM Identity Center 的单点登录同意弹出窗口中，AWS IAM Identity Center 客户端为应用程序使用的名称。 | Amazon Redshift 驱动程序 | 
| idp\$1response\$1timeout | 可选 | Redshift 驱动程序等待身份验证流程完成的时间，以秒为单位。 | 60 | 

您必须输入自己创建并用于连接的工具的这些连接属性值。有关更多信息，请参阅相应的各个驱动程序的连接选项文档：
+ [JDBC 驱动程序版本 2.x 配置的选项](jdbc20-configuration-options.md)
+ [ODBC 驱动程序选项](odbc20-configuration-options.md)
+ [Amazon Redshift Python 连接器的配置选项](python-configuration-options.md)

### 使用 `IdpTokenAuthPlugin` 进行身份验证


根据您的 Amazon Redshift 驱动程序，使用以下插件名称，通过 `IdpTokenAuthPlugin` 进行连接。


| 驱动程序 | 连接选项键 | 值 | 备注 | 
| --- | --- | --- | --- | 
| JDBC | `plugin_name` | com.amazon.redshift.plugin.IdpTokenAuthPlugin | 在连接时，您必须输入插件的完全限定类名。 | 
| ODBC | `plugin_name` | IdpTokenAuthPlugin |  | 
| Python | `credentials_provider` | IdpTokenAuthPlugin | Python 驱动程序没有 `plugin_name` 选项可用。请改用`credentials_provider`。 | 

`IdpTokenAuthPlugin` 插件具有以下额外的连接选项：


| 选项名称 | 必填？ | 说明 | 
| --- | --- | --- | 
| 令牌 | 必需 | AWS IAM Identity Center 提供的访问令牌，或 OpenID Connect（OIDC）JSON Web 令牌（JWT，JSON Web Token），该令牌由与 AWS IAM Identity Center 连接的 Web 身份提供者提供。您的应用程序必须通过 AWS IAM Identity Center 或与 AWS IAM Identity Center 连接的身份提供者，对您的应用程序用户进行身份验证，从而生成此令牌。 | 
| token\$1type | 必需 | 用于 `IdpTokenAuthPlugin` 的令牌类型。可能的值包括： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/redshift-iam-access-control-idp-connect-oauth.html)  | 

您必须输入自己创建并用于连接的工具的这些连接属性值。有关更多信息，请参阅相应的各个驱动程序的连接选项文档：
+ [JDBC 驱动程序版本 2.x 配置的选项](jdbc20-configuration-options.md)
+ [ODBC 驱动程序选项](odbc20-configuration-options.md)
+ [Amazon Redshift Python 连接器的配置选项](python-configuration-options.md)

# 排除 Amazon Redshift 查询编辑器 v2 连接故障
排除连接故障

此列表详细列出了经常出现的错误，有助于您使用 AWS IAM Identity Center 身份通过查询编辑器 v2 连接到 Redshift 数据库。
+ 错误：**连接问题：没有可用的身份中心会话信息。**– 出现此错误时，请检查浏览器的安全和隐私设置。这些浏览器设置，尤其是安全 Cookie 设置（如 Firefox 的全面 Cookie 保护功能），可能会导致 Amazon Redshift 查询编辑器 v2 与 Redshift 数据库的连接尝试受阻。请按照您浏览器的详细修复步骤进行修复：
  + **Firefox** – 目前，默认情况下会阻止第三方 Cookie。单击浏览器地址栏中的盾牌，然后切换开关以关闭针对查询编辑器 v2 的增强跟踪保护。
  + **Chrome 隐身模式** – 默认情况下，Chrome 隐身模式会阻止第三方 Cookie。单击地址栏中的眼睛图标以允许查询编辑器 v2 使用第三方 Cookie。将设置更改为允许 Cookie 后，您可能在地址栏上看不到眼睛图标。
  + **Safari** – 在 Mac 上，打开 Safari 应用程序。选择**设置**，然后选择**高级**。切换为关闭：**阻止所有 Cookie**。
  + **Edge** – 选择**设置**，然后选择 **Cookie 和站点权限**。然后选择**管理和删除 Cookie 和站点数据**，并关闭**阻止第三方 Cookie**。

  如果您在更改设置后尝试连接，但继续收到错误消息**连接问题：没有可用的身份中心会话信息**，我们建议您刷新与 AWS IAM Identity Center 的连接。为此，请右键单击您的 Redshift 数据库实例并选择**刷新**。此时将出现一个新窗口，您可以使用该窗口进行身份验证。
+ 错误：**连接问题：身份中心会话已过期或无效。**– 将 Redshift 预置集群或 Serverless 工作组与 AWS IAM Identity Center 集成后，用户在尝试从查询编辑器 v2 连接到 Redshift 数据库时可能会收到此错误。这可能是在成功连接尝试之后发生的。在这种情况下，我们建议您重新进行身份验证。为此，请右键单击您的 Redshift 数据库实例并选择**刷新**。此时将出现一个新窗口，您可以使用该窗口进行身份验证。
+ 错误：**范围无效。用户凭证无权连接到 Redshift。**– 将 Redshift 预置集群或 Serverless 工作组与 AWS IAM Identity Center 集成用于身份管理后，用户在尝试从查询编辑器 v2 连接到 Redshift 数据库时可能会收到此错误。在这种情况下，为了使查询编辑器 v2 成功连接并通过 AWS IAM Identity Center 对用户进行身份验证，以便访问正确的资源，管理员必须通过 Redshift 控制台将用户分配给 Redshift AWS IAM Identity Center 应用程序。这是在 **IAM Identity Center 连接**下完成的。完成这些设置后，用户可以在一个小时之后成功建立连接，这段时间是 AWS IAM Identity Center 会话缓存造成的限制。
+ 错误：**无法列出数据库。致命：集群自动暂停时查询失败。**– 当 Amazon Redshift Serverless 数据库处于空闲状态，未处理任何工作负载时，如果您使用 AWS IAM Identity Center 身份进行连接，它可能会保持暂停状态。要解决此问题，请使用其它身份验证方法登录来恢复无服务器工作组。然后使用您的 AWS IAM Identity Center 身份连接到该数据库。
+ 错误：**尝试与 AWS IAM Identity Center 联合时出错。Amazon Redshift 管理员必须使用 Redshift 控制台删除并重新创建 AWS IAM Identity Center QEV2 应用程序**。– 此错误通常发生在删除与查询编辑器 v2 相关联的 AWS IAM Identity Center 应用程序实例时。要解决这个问题，Amazon Redshift 管理员必须为 AWS IAM Identity Center 删除并重新创建 Redshift 和查询编辑器 v2 应用程序。可以在 Redshift 控制台上或使用 [https://docs.aws.amazon.com/cli/latest/reference/redshift/delete-redshift-idc-application.html](https://docs.aws.amazon.com/cli/latest/reference/redshift/delete-redshift-idc-application.html) CLI 命令执行此操作。

# 对 Amazon Redshift 使用服务相关角色
使用服务关联角色

Amazon Redshift 使用 AWS Identity and Access Management (IAM)[ 服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服务相关角色是一种独特类型的 IAM 角色，它与 Amazon Redshift 直接相关。服务相关角色由 Amazon Redshift 预定义，具有服务代表您的 Amazon Redshift 集群调用 AWS 服务所需的所有权限。

服务相关角色可让您更轻松地设置 Amazon Redshift，因为您不必手动添加必要权限。该角色与 Amazon Redshift 使用案例相关联并且具有预定义的权限。只有 Amazon Redshift 可以代入该角色，并且只有服务相关角色可以使用预定义的权限策略。Amazon Redshift 会在您首次创建集群或 Redshift 托管的 VPC 端点时，在您的账户中创建服务相关角色。只有删除您账户中的所有 Amazon Redshift 集群或 Redshift 托管的 VPC 端点之后，您才可以删除服务相关角色。这将保护您的 Amazon Redshift 资源，因为您不会无意中删除访问资源所需的权限。

Amazon Redshift 支持在该服务可用的所有区域中使用服务相关角色。有关更多信息，请参阅 [AWS 区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html?id=docs_gateway#redshift_region)。

有关支持服务相关角色的其它服务的信息，请参阅[使用 IAM 的 AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)，并查找**服务相关角色**列中显示为**是**的服务。选择**是**和链接，查看该服务的服务相关角色文档。

## Amazon Redshift 的服务相关角色权限


Amazon Redshift 使用名为 **AWSServiceRoleForRedshift** 的服务相关角色 – 允许 Amazon Redshift 代表您调用 AWS 服务。此服务相关角色附加至以下托管式策略上：`AmazonRedshiftServiceLinkedRolePolicy`。有关此策略的更新，请参阅适用于 Amazon Redshift 的 [AWS 托管式策略（预定义）](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html#redshift-policy-resources.managed-policies)。

AWSServiceRoleForRedshift 服务相关角色仅信任 **redshift.amazonaws.com** 来代入该角色。

AWSServiceRoleForRedshift 服务相关角色权限策略允许 Amazon Redshift 对所有相关资源完成以下操作：
+ `ec2:DescribeVpcs `
+ `ec2:DescribeSubnets `
+ `ec2:DescribeNetworkInterfaces `
+ `ec2:DescribeAddress `
+ `ec2:AssociateAddress `
+ `ec2:DisassociateAddress `
+ `ec2:CreateNetworkInterface `
+ `ec2:DeleteNetworkInterface `
+ `ec2:ModifyNetworkInterfaceAttribute`
+ `ec2:CreateVpcEndpoint`
+ `ec2:DeleteVpcEndpoints`
+ `ec2:DescribeVpcEndpoints`
+ `ec2:ModifyVpcEndpoint`
+ `ec2:DescribeVpcAttribute`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeInternetGateways`
+ `ec2:DescribeSecurityGroupRules`
+ `ec2:DescribeAvailabilityZones`
+ `ec2:DescribeNetworkAcls`
+ `ec2:DescribeRouteTables`
+ `ec2:AssignIpv6Addresses`
+ `ec2:UnassignIpv6Addresses`

**对网络资源的权限**

以下权限允许在 Amazon EC2 上执行操作来创建和管理安全组规则。这些安全组和规则特别关联到 Amazon Redshift `aws:RequestTag/Redshift` 资源标签。这样可以将权限的范围限制为特定 Amazon Redshift 资源。
+ `ec2:CreateSecurityGroup`
+ `ec2:AuthorizeSecurityGroupEgress`
+ `ec2:AuthorizeSecurityGroupIngress`
+ `ec2:RevokeSecurityGroupEgress`
+ `ec2:RevokeSecurityGroupIngress`
+ `ec2:ModifySecurityGroupRules`
+ `ec2:DeleteSecurityGroup`

**服务配额权限**

以下权限支持调用方获得服务配额。

`servicequotas:GetServiceQuota`

以下 JSON 代码段显示了服务配额的操作和资源范围。

```
{
   "Sid": "ServiceQuotasToCheckCustomerLimits",
   "Effect": "Allow",
   "Action": [
      "servicequotas:GetServiceQuota"
   ],
   "Resource": [
      "arn:aws:servicequotas:*:*:ec2/L-0263D0A3",
      "arn:aws:servicequotas:*:*:vpc/L-29B6F2EB" 
   ]
}
```

配额代码如下：
+ *L-0263D0A3* – EC2-VPC 弹性 IP 的配额代码。
+ *L-29B6F2EB* – 每个 VPC 的接口 VPC 端点的配额代码。

有关更多信息，请参阅 [AWS 服务配额](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)。

**审计日志记录的操作**

列出的带 `logs` 前缀的操作与审计日志记录和相关功能有关。具体来说是创建和管理日志组和日志流的操作。
+ `logs:CreateLogGroup`
+ `logs:PutRetentionPolicy`
+ `logs:CreateLogStream`
+ `logs:PutLogEvents`
+ `logs:DescribeLogStreams`
+ `logs:GetLogEvents`

以下 JSON 向 Amazon Redshift 显示了用于审计日志记录的操作和资源范围。

```
[
    {
        "Sid": "EnableCreationAndManagementOfRedshiftCloudwatchLogGroups",
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogGroup",
            "logs:PutRetentionPolicy"
        ],
        "Resource": [
            "arn:aws:logs:*:*:log-group:/aws/redshift/*"
        ]
    },
    {
        "Sid": "EnableCreationAndManagementOfRedshiftCloudwatchLogStreams",
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogStream",
            "logs:PutLogEvents",
            "logs:DescribeLogStreams",
            "logs:GetLogEvents"
        ],
        "Resource": [
            "arn:aws:logs:*:*:log-group:/aws/redshift/*:log-stream:*"
        ]
    }
]
```

有关服务相关角色及它们在 AWS 中的作用的更多信息，请参阅[使用服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)。有关 Amazon Redshift 的特定操作和其它 IAM 资源的更多信息，请参阅 [Amazon Redshift 的操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html)。

**使用 AWS Secrets Manager 管理管理员凭证的操作**

所列出的带有 `secretsmanager` 前缀的操作与使用 Amazon Redshift 管理您的管理员凭证有关。Amazon Redshift 通过这些操作，使用 AWS Secrets Manager 来创建和管理您的管理员凭证密钥。

以下 JSON 显示了操作和资源范围，可供 Amazon Redshift 通过 AWS Secrets Manager 管理管理员凭证。

```
[
    {
        "Effect": "Allow",
        "Action": [
            "secretsmanager:DescribeSecret",
            "secretsmanager:DeleteSecret",
            "secretsmanager:PutSecretValue",
            "secretsmanager:UpdateSecret",
            "secretsmanager:UpdateSecretVersionStage",
            "secretsmanager:RotateSecret"
        ],
        "Resource": [
            "arn:aws:secretsmanager:*:*:secret:redshift!*"
        ],
        "Condition": {
            "StringEquals": {
                "secretsmanager:ResourceTag/aws:secretsmanager:owningService": "redshift"
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": [
            "secretsmanager:GetRandomPassword"
        ],
        "Resource": "*"
    }
]
```

**用于将集群和无服务器命名空间注册到 AWS Glue Data Catalog 的操作**

以 `glue` 前缀列出的操作涉及访问 AWS Glue Data Catalog 中的目录，这些目录是通过注册预置集群或无服务器命名空间创建的。有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [Apache Iceberg compatibility for Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/iceberg-integration_overview.html)。

以下 JSON 显示了 Amazon Redshift 用于访问 AWS Glue Data Catalog 中目录的操作和资源范围：

```
[
    {
        "Sid": "DiscoverRedshiftCatalogs",
        "Effect": "Allow",
        "Action": [
            "glue:GetCatalogs",
            "glue:GetCatalog"
        ],
        "Resource": [
            "arn:aws:glue:*:*:catalog",
            "arn:aws:glue:*:*:catalog/*"
        ], 
   "Condition": 
    { 
        "Bool": 
        { 
            "glue:EnabledForRedshiftAutoDiscovery": "true"
        },
        "StringEquals": {
             "aws:ResourceAccount": "${aws:PrincipalAccount}"
        }
    } 
 }, 
 {
    "Sid": "LakeFormationGetMetadataAccessForFederatedCatalogs",
    "Effect": "Allow", 
    "Action": [ 
        "lakeformation:GetDataAccess"
    ], 
    "Resource": [ "*" ], 
    "Condition": 
    { 
        "Bool": 
        {
            "lakeformation:EnabledOnlyForMetaDataAccess":"true"
        },
        "StringEquals": {
             "aws:ResourceAccount": "${aws:PrincipalAccount}"
        },
        "ForAnyValue:StringEquals": 
        { 
            "aws:CalledVia": "glue.amazonaws.com"
        } 
    }
 }
    }
]
```

`glue:GetCatalog` 和 `glue:GetCatalogs` 权限具有条件 `glue:EnabledForRedshiftAutoDiscovery:true`，这意味着 Amazon Redshift 向 IAM 授予自动发现目录的访问权限。要选择退出，请添加 AWS Glue 账户级资源策略，以便选择性地拒绝服务相关角色访问目录。由于服务相关角色在策略中已经有显式允许操作，因此选择退出策略需要显式拒绝该操作。考虑下面的例子，其中一个额外的策略拒绝 Amazon Redshift 的自动发现功能：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement" : {
            "Effect": "Deny",
            "Action": [
                "glue:GetCatalog",
                "glue:GetCatalogs"
            ],
            "Principal" : {
            "AWS" : "arn:aws:iam::111122223333:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift"
            },
            "Resource": [
                "arn:aws:glue:*:*:catalog/<s3_table_catalog_name>",
                "arn:aws:glue:*:*:catalog/<s3_table_catalog_name>/*"
            ]
        }
}
```

------

**要允许 IAM 实体创建 AWSServiceRoleForRedshift 服务相关角色**

```
{
    "Effect": "Allow",
    "Action": [
        "iam:CreateServiceLinkedRole"      
    ],
    "Resource": "arn:aws:iam::<AWS-account-ID>:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift",
    "Condition": {"StringLike": {"iam:AWSServiceName": "redshift.amazonaws.com"}}
}
```

**要允许 IAM 实体删除 AWSServiceRoleForRedshift 服务相关角色**

向该 IAM 实体的权限中添加以下策略声明：

```
{
    "Effect": "Allow",
    "Action": [
        "iam:DeleteServiceLinkedRole",
        "iam:GetServiceLinkedRoleDeletionStatus"
    ],
    "Resource": "arn:aws:iam::<AWS-account-ID>:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift",
    "Condition": {"StringLike": {"iam:AWSServiceName": "redshift.amazonaws.com"}}
}
```

或者，您可以使用 AWS 托管式策略提供对 Amazon Redshift 的[完全访问权限](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftFullAccess)。

## 为 Amazon Redshift 创建服务相关角色


您无需手动创建 AWSServiceRoleForRedshift 服务相关角色。Amazon Redshift 将为您创建服务相关角色。如果已从您的账户中删除 AWSServiceRoleForRedshift 服务相关角色，Amazon Redshift 将在您启动新 Amazon Redshift 集群时创建该角色。

**重要**  
如果您在 2017 年 9 月 18 日（从此时开始支持服务相关角色）之前已使用 Amazon Redshift 服务，则 Amazon Redshift 已在您的账户中创建 AWSServiceRoleForRedshift 角色。要了解更多信息，请参阅[我的 IAM 账户中出现新角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)。

## 为 Amazon Redshift 编辑服务相关角色


Amazon Redshift 不允许您编辑 AWSServiceRoleForRedshift 服务相关角色。在创建服务相关角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。不过，您可以使用 IAM 控制台、AWS Command Line Interface (AWS CLI) 或 IAM API 编辑角色描述。有关更多信息，请参阅 *IAM 用户指南*中的[修改角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html)。

## 删除 Amazon Redshift 的服务相关角色


如果您不再需要使用某个需要服务相关角色的功能或服务，我们建议您删除该角色。这样您就没有未被主动监控或维护的未使用实体。

在删除账户的服务相关角色之前，您需要关闭并删除该账户中的所有集群。有关更多信息，请参阅 [关闭和删除集群](rs-mgmt-shutdown-delete-cluster.md)。

您可以使用 IAM 控制台、AWS CLI 或 IAM API 删除服务相关角色。有关更多信息，请参阅 *IAM 用户指南*中的[删除服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

# 使用 IAM 身份验证生成数据库用户凭证
使用 IAM 身份验证生成数据库用户凭证

您可以根据通过 AWS Identity and Access Management (IAM) 权限策略授予的权限生成临时数据库凭证，以管理用户的 Amazon Redshift 数据库访问权限。

通常，Amazon Redshift 数据库用户提供数据库用户名和密码以登录到数据库。不过，您不必在 Amazon Redshift 数据库中维护用户名和密码。作为替代方法，您可以将系统配置为允许用户创建用户凭证，并根据其 IAM 凭证登录到数据库。

Amazon Redshift 提供 [GetClusterCredentials](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html) API 操作以生成临时数据库用户凭证。您可使用 Amazon Redshift JDBC 或 ODBC 驱动程序来配置您的 SQL 客户端，这些驱动程序可管理调用 `GetClusterCredentials` 操作的过程。它们通过检索数据库用户凭证并在您的 SQL 客户端和您的 Amazon Redshift 数据库之间建立连接来完成此操作。您也可以使用数据库应用程序以编程方式调用 `GetClusterCredentials` 操作，检索数据库用户凭证并连接到数据库。

如果您已在 AWS 外部管理用户身份，您可以使用与安全断言标记语言 (SAML) 2.0 兼容的身份提供者 (IdP) 管理对 Amazon Redshift 资源的访问。配置您的 IdP 以允许联合身份用户访问 IAM 角色。通过使用该 IAM 角色，您可以生成临时数据库凭证并登录到 Amazon Redshift 数据库。

SQL 客户端需要具有权限才能为您调用 `GetClusterCredentials` 操作。您将通过创建 IAM 角色并附加 IAM 权限策略（该策略授权或限制对 `GetClusterCredentials` 操作和相关操作的访问）来管理这些权限。作为最佳实践，我们建议将权限策略附加到 IAM 角色，然后根据需要将其分配给用户和组。有关更多信息，请参阅 [Amazon Redshift 中的 Identity and Access Management](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)。

该策略还授权或限制对特定资源 (例如，Amazon Redshift 集群、数据库、数据库用户名和用户组名称) 的访问。

**注意**  
我们建议使用 Amazon Redshift JDBC 或 ODBC 驱动程序来管理调用 `GetClusterCredentials` 操作并登录数据库的过程。为简单起见，我们在整个主题中假定您将 SQL 客户端与 JDBC 或 ODBC 驱动程序结合使用。  
有关使用 `GetClusterCredentials` 操作或并行 `get-cluster-credentials` CLI 命令的具体详细信息和示例，请参阅 [GetClusterCredentials](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html) 和 [get-cluster-credentials](https://docs.aws.amazon.com/cli/latest/reference/redshift/get-cluster-credentials.html)。

为了集中管理身份验证和授权，Amazon Redshift 支持使用 IAM 进行数据库身份验证，从而通过企业联合进行用户身份验证。您也可以不创建用户，而是使用来自 AWS Directory Service、您的企业用户目录或 Web 身份提供者的现有身份。这些用户被称为联合身份用户。在通过 IdP 请求访问权限时，AWS 将为联合身份用户分配角色。

要为组织中的用户或客户端应用程序提供联合访问权限以调用 Amazon Redshift API 操作，您还可以使用具有 SAML 2.0 支持的 JDBC 或 ODBC 驱动程序请求从组织 IdP 中进行身份验证。在这种情况下，组织的用户没有 Amazon Redshift 的直接访问权限。

有关更多信息，请参阅 *IAM 用户指南*中的[身份提供者和联合](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。

# 创建临时 IAM 凭证
创建临时 IAM 凭证

在本节中，您可以了解如何配置系统以生成基于 IAM 的临时数据库用户凭证，并使用新凭证登录到数据库。

概括来说，流程如下所示：

1. [步骤 1：创建用于 IAM 单点登录访问的 IAM 角色](#generating-iam-credentials-sso-role)

   （可选）您可以将 IAM 身份验证和第三方身份提供者 (IdP) 进行集成，对访问 Amazon Redshift 数据库的用户进行身份验证。

1. [步骤 2：为 IdP 配置 SAML 断言](#configuring-saml-assertions)

   （可选）要使用 IdP 进行 IAM 身份验证，您需要在 IdP 应用程序中定义一个声明规则，将组织中的用户或组映射到 IAM 角色。或者，您可以包含属性元素以设置 `GetClusterCredentials` 参数。

1. [步骤 3：创建有权调用 GetClusterCredentialsWithIAM 或 GetClusterCredentials 的 IAM 角色](#generating-iam-credentials-role-permissions)

   您的 SQL 客户端应用程序在调用 `GetClusterCredentials` 操作时代入用户。如果您创建了用于身份提供者访问的 IAM 角色，则可向该角色添加必要权限。

1. [步骤 4：创建数据库用户和数据库组](#generating-iam-credentials-user-and-groups)

   （可选）默认情况下，`GetClusterCredentials` 返回凭证；如果用户名不存在，则会创建一个新用户。您也可以选择指定用户在登录时加入的用户组。默认情况下，数据库用户加入 PUBLIC 组。

1. [步骤 5：配置 JDBC 或 ODBC 连接以使用 IAM 凭证](#generating-iam-credentials-configure-jdbc-odbc)

   要连接到您的 Amazon Redshift 数据库，可将 SQL 客户端配置为使用 Amazon Redshift JDBC 或 ODBC 驱动程序。

## 步骤 1：创建用于 IAM 单点登录访问的 IAM 角色


如果您未使用身份提供者进行单点登录访问，则可跳过此步骤。

如果您已在 AWS 外部管理用户身份，则可将 IAM 身份验证和第三方 SAML-2.0 身份提供者 (IdP) 集成，对访问 Amazon Redshift 数据库的用户进行身份验证。

有关更多信息，请参阅 *IAM 用户指南*中的[身份提供者和联合](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。

在使用 Amazon Redshift IdP 身份验证之前，请先创建一个 AWS SAML 身份提供者。您可以在 IAM 控制台中创建一个 IdP，以向 AWS 通知该 IdP 及其配置。这样将在您的 AWS 账户和 IdP 之间建立信任。有关创建角色的步骤，请参阅《IAM 用户指南》**中的[创建用于 SAML 2.0 联合的角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html?icmpid=docs_iam_console)。

## 步骤 2：为 IdP 配置 SAML 断言


在创建 IAM 角色后，您可以在 IdP 应用程序中定义一个声明规则，以将组织中的用户或组映射到 IAM 角色。有关更多信息，请参阅 *IAM 用户指南*中的[为身份验证响应配置 SAML 断言](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_assertions.html)。

如果选择使用可选的 `GetClusterCredentials` 参数 `DbUser`、`AutoCreate` 和 `DbGroups`，您有两个选择。您可以使用 JDBC 或 ODBC 连接设置这些参数的值，也可以将 SAML 属性元素添加到 IdP 以设置这些值。有关 `DbUser`、`AutoCreate` 和 `DbGroups` 参数的更多信息，请参阅[步骤 5：配置 JDBC 或 ODBC 连接以使用 IAM 凭证](#generating-iam-credentials-configure-jdbc-odbc)。

**注意**  
如果您使用 IAM 策略变量 `${redshift:DbUser}`（如[GetClusterCredentials 的资源策略](redshift-iam-access-control-identity-based.md#redshift-policy-resources.getclustercredentials-resources)中所述），则 `DbUser` 的值将被替换为由 API 操作的请求上下文检索的值。Amazon Redshift 驱动程序使用由连接 URL 提供的 `DbUser` 变量的值，而不是作为 SAML 属性提供的值。  
为了帮助保护该配置，我们建议您在 IAM 策略中使用一个条件以通过 `DbUser` 验证 `RoleSessionName` 值。您可以在 [示例 8：使用 GetClusterCredentials 的 IAM 策略](redshift-iam-access-control-identity-based.md#redshift-policy-examples-getclustercredentials) 中找到如何使用 IAM 策略设置条件。

要配置 IdP 以设置 `DbUser`、`AutoCreate` 和 `DbGroups` 参数，请包含以下 `Attribute` 元素：
+ `Attribute` 属性设置为“https://redshift.amazon.com/SAML/Attributes/DbUser”的 `Name` 元素

  将 `AttributeValue` 元素设置为要连接到 Amazon Redshift 数据库的用户的名称。

  `AttributeValue` 元素中的值必须为小写形式，以字母开头，仅包含字母数字字符、下划线 (\$1)、加号 (\$1)、圆点 (.)、@ 符号或连字符 (-)，并且应少于 128 个字符。通常，用户名为用户 ID (例如，bobsmith) 或电子邮件地址 (例如，bobsmith@example.com)。此值不能包含空格 (例如，像 Bob Smith 这样的用户显示名称)。

  ```
  <Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbUser">
      <AttributeValue>user-name</AttributeValue>
  </Attribute>
  ```
+ Name 属性设置为“https://redshift.amazon.com/SAML/Attributes/AutoCreate”的 Attribute 元素

  可以将 AttributeValue 元素设置为 true 以创建新的数据库用户（如果不存在）。将 AttributeValue 设置为 false 可指定数据库用户必须存在于 Amazon Redshift 数据库中。

  ```
  <Attribute Name="https://redshift.amazon.com/SAML/Attributes/AutoCreate">
      <AttributeValue>true</AttributeValue>
  </Attribute>
  ```
+ `Attribute` 属性设置为“https://redshift.amazon.com/SAML/Attributes/DbGroups”的 `Name` 元素

  该元素包含一个或多个 `AttributeValue` 元素。将每个 `AttributeValue` 元素设置为一个数据库组名称，`DbUser` 将在连接到 Amazon Redshift 数据库的会话期间加入该组。

  ```
  <Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbGroups">
      <AttributeValue>group1</AttributeValue>
      <AttributeValue>group2</AttributeValue>
      <AttributeValue>group3</AttributeValue>
  </Attribute>
  ```

## 步骤 3：创建有权调用 GetClusterCredentialsWithIAM 或 GetClusterCredentials 的 IAM 角色


您的 SQL 客户端需要授权才能代表您调用 ` GetClusterCredentialsWithIAM` 或 `GetClusterCredentials` 操作。要提供该授权，可以创建用户或角色并附加用于授予必要权限的策略。这两项操作都可用于获取集群凭证，但它们的身份验证方法不同。` GetClusterCredentialsWithIAM` 使用 IAM 角色进行身份验证，这将自动创建一个映射到该角色的数据库用户，从而帮助管理 IAM 角色级别的权限，而 `GetClusterCredentials` 则会为数据库中的给定用户名提供凭证。

**创建有权调用 GetClusterCredentialsWithIAM 的 IAM 角色**

1. 利用 IAM 服务，创建用户或角色。您也可以使用现有用户或角色。例如，如果您创建了一个用于身份提供者访问的 IAM 角色，则可向该角色附加必要的 IAM 策略。

1. 附加有权调用 ` redshift:GetClusterCredentialsWithIAM` 操作的权限策略。以下策略示例说明了允许对特定集群和数据库、集群中的任意数据库以及任意集群中的任意数据库执行操作的选项。

   ```
   {
       "Version": "2012-10-17", 		 	 	 
       "Statement": [
           {
               "Sid": "SpecificClusterAndDBName",
               "Effect": "Allow",
               "Action": "redshift:GetClusterCredentialsWithIAM",
               "Resource": [
                   "arn:aws:redshift:us-east-1:123456789012:dbname:testcluster/testdatabase"
               ]
           },
           {
               "Sid": "SpecificClusterAndAnyDBName",
               "Effect": "Allow",
               "Action": "redshift:GetClusterCredentialsWithIAM",
               "Resource": "arn:aws:redshift:us-east-1:123456789012:dbname:examplecluster/*",
           },
           {
               "Sid": "AnyClusterAnyDatabase",
               "Effect": "Allow",
               "Action": "redshift:GetClusterCredentialsWithIAM",
               "Resource": "*"
           }
       ]
   }
   ```

**创建有权调用 GetClusterCredentials 的 IAM 角色**

1. 利用 IAM 服务，创建用户或角色。您也可以使用现有用户或角色。例如，如果您创建了一个用于身份提供者访问的 IAM 角色，则可向该角色附加必要的 IAM 策略。

1. 附加有权调用 `redshift:GetClusterCredentials` 操作的权限策略。根据指定的可选参数，您还可在策略中允许或限制其他操作和资源：
   + 要允许您的 SQL 客户端检索 Redshift 集群资源的集群 ID、AWS 区域和端口，可包含调用 `redshift:DescribeClusters` 操作的权限。
   + 如果您使用 `AutoCreate` 选项，请包含对 `redshift:CreateClusterUser` 资源调用 `dbuser` 的权限。以下 Amazon 资源名称（ARN）指定 Amazon Redshift `dbuser`。将 *`region`*、*`account-id`* 和 *`cluster-name`* 替换为您的 AWS 区域、账户和集群的相应值。对于 *`dbuser-name`*，指定用于登录到集群数据库的用户名。

     ```
     arn:aws:redshift:region:account-id:dbuser:cluster-name/dbuser-name
     ```
   + （可选）添加一个 ARN，以使用以下格式指定 Amazon Redshift `dbname` 资源。将 *`region`*、*`account-id`* 和 *`cluster-name`* 替换为您的 AWS 区域、账户和集群的相应值。对于 `database-name`，指定用户将登录到的数据库的名称。

     ```
     arn:aws:redshift:region:account-id:dbname:cluster-name/database-name
     ```
   + 如果您使用 `DbGroups` 选项，请使用以下格式包含对 Amazon Redshift `dbgroup` 资源调用 `redshift:JoinGroup` 操作的权限。将 *`region`*、*`account-id`* 和 *`cluster-name`* 替换为您的 AWS 区域、账户和集群的相应值。对于 `dbgroup-name`，请指定用户在登录时加入的用户组的名称。

     ```
     arn:aws:redshift:region:account-id:dbgroup:cluster-name/dbgroup-name
     ```

有关更多信息以及示例，请参阅 [GetClusterCredentials 的资源策略](redshift-iam-access-control-identity-based.md#redshift-policy-resources.getclustercredentials-resources)。

## 步骤 4：创建数据库用户和数据库组


（可选）您可以创建一个用于登录到集群数据库的数据库用户。如果您为现有用户创建临时用户凭证，则可禁用此用户的密码以强制用户使用临时密码进行登录。（可选）您可以使用 `GetClusterCredentials` 选项自动创建新的数据库用户。

您可以创建希望 IAM 数据库用户在登录时加入的数据库用户组并提供相应的权限。在调用 `GetClusterCredentials` 操作时，您可以指定新用户在登录时加入的用户组名称列表。这些组成员资格仅对特定请求生成的凭证所创建的会话有效。

**创建数据库用户和数据库组**

1. 登录到 Amazon Redshift 数据库，并使用 [CREATE USER](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_USER.html) 创建数据库用户或使用 [ALTER USER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html) 修改现有用户。

1. （可选）指定 PASSWORD DISABLE 选项可阻止用户使用密码。在禁用用户的密码后，用户只能使用临时凭证进行登录。如果未禁用密码，用户可以使用密码或临时凭证进行登录。您不能禁用超级用户的密码。

   如果用户需要在 AWS 管理控制台之外与 AWS 交互，则需要编程式访问权限。授予编程式访问权限的方法取决于访问 AWS 的用户类型。

   要向用户授予编程式访问权限，请选择以下选项之一。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/generating-iam-credentials-steps.html)

   以下示例创建一个已禁用密码的用户。

   ```
   create user temp_creds_user password disable; 
   ```

   以下示例禁用现有用户的密码。

   ```
   alter user temp_creds_user password disable;
   ```

1. 使用 [CREATE GROUP](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_GROUP.html) 创建数据库用户组。

1. 使用 [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html) 命令为组定义访问权限。

## 步骤 5：配置 JDBC 或 ODBC 连接以使用 IAM 凭证


您可以使用 Amazon Redshift JDBC 或 ODBC 驱动程序配置 SQL 客户端。此驱动程序管理创建数据库用户凭证以及在 SQL 客户端和 Amazon Redshift 数据库之间建立连接的过程。

如果您使用身份提供者进行身份验证，请指定凭证提供商插件名称。Amazon Redshift JDBC 和 ODBC 驱动程序包括以下基于 SAML 的身份提供者的插件：
+ Active Directory 联合身份验证服务 (AD FS)
+ PingOne
+ Okta
+ Microsoft Azure AD

  有关将 Microsoft Azure AD 设置为身份提供者的步骤，请参阅[设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。<a name="to-configure-a-jdbc-connection"></a>

**配置 JDBC 连接以使用 IAM 凭证**

1. 从 [为 Amazon Redshift 配置 JDBC 驱动程序版本 2.x 连接](jdbc20-install.md) 页面下载最新的 Amazon Redshift JDBC 驱动程序。

1. 使用下列格式之一创建包含 IAM 凭证选项的 JDBC URL。要使用 IAM 身份验证，请将 `iam:` 添加到 Amazon Redshift JDBC URL 中的 `jdbc:redshift:` 后面，如以下示例中所示。

   ```
   jdbc:redshift:iam://
   ```

   添加 `cluster-name`、`region` 和 `account-id`。JDBC 驱动程序使用您的 IAM 账户信息和集群名称来检索集群 ID和 AWS 区域。为此，您的用户或角色必须有权针对指定的集群调用 `redshift:DescribeClusters` 操作。如果您的用户或角色无权调用 `redshift:DescribeClusters` 操作，请包含集群 ID、AWS 区域和端口，如以下示例中所示。端口号是可选的。

   ```
   jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev
   ```

1. 添加 JDBC 选项可提供 IAM 凭证。使用不同的 JDBC 选项组合可提供 IAM 凭证。有关更多信息，请参阅 [用于创建数据库用户凭证的 JDBC 和 ODBC 选项](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。

   以下 URL 为用户指定 AccessKeyID 和 SecretAccessKey。

   ```
   jdbc:redshift:iam://examplecluster:us-west-2/dev?AccessKeyID=AKIAIOSFODNN7EXAMPLE&SecretAccessKey=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   ```

    以下示例指定包含 IAM 凭证的命名配置文件。

   ```
   jdbc:redshift:iam://examplecluster:us-west-2/dev?Profile=user2
   ```

1. 添加 JDBC 驱动程序用来调用 `GetClusterCredentials` API 操作的 JDBC 选项。如果您以编程方式调用 `GetClusterCredentials` API 操作，请不要包括这些选项。

   以下示例包括 JDBC `GetClusterCredentials` 选项。

   ```
   jdbc:redshift:iam://examplecluster:us-west-2/dev?plugin_name=com.amazon.redshift.plugin.AzureCredentialsProvider&UID=user&PWD=password&idp_tenant=my_tenant&client_secret=my_secret&client_id=my_id
   ```<a name="to-configure-an-odbc-connection"></a>

**配置 ODBC 连接以使用 IAM 凭证**

在以下过程中，您只能找到用于配置 IAM 身份验证的步骤。有关使用标准身份验证 (采用数据库用户名和密码) 的步骤，请参阅[为 Amazon Redshift 配置 ODBC 驱动程序版本 2.x 连接](odbc20-install.md)。

1. 为您的操作系统安装和配置最新的 Amazon Redshift OBDC 驱动程序。有关更多信息，请参阅[为 Amazon Redshift 配置 ODBC 驱动程序版本 2.x 连接](odbc20-install.md)页面。
**重要**  
Amazon Redshift ODBC 驱动程序必须为版本 1.3.6.1000 或更高版本。

1. 根据您的操作系统选择配置连接设置需要遵循的步骤。

1. 在 Microsoft Windows 操作系统上，访问“Amazon Redshift ODBC 驱动程序 DSN 设置”窗口。

   1. 在**连接设置**下，输入以下信息：
      + **数据源名称** 
      + **服务器**（可选） 
      + **端口**（可选） 
      + **数据库** 

      如果您的用户或角色有权调用 `redshift:DescribeClusters` 操作，仅需要**数据源名称**和**数据库**。Amazon Redshift 通过调用 `DescribeCluster` 操作使用 **ClusterId** 和**区域**来获取服务器和端口。

      如果您的用户或角色无权调用 `redshift:DescribeClusters` 操作，请指定**服务器**和**端口**。

   1. 在**身份验证**下，为**身份验证类型**选择一个值。

      对于每种身份验证类型，请输入如下列出的值：  
AWS 配置文件  
输入以下信息：  
      + **ClusterID** 
      + **区域** 
      + **配置文件名称** 

        输入 AWS config 文件中包含 ODBC 连接选项值的配置文件的名称。有关更多信息，请参阅 [使用配置文件](options-for-providing-iam-credentials.md#using-configuration-profile)。
（可选）提供 ODBC 驱动程序用于调用 `GetClusterCredentials` API 操作的选项的详细信息：  
      + **DbUser**
      + **User AutoCreate**
      + **DbGroups**

        有关更多信息，请参阅 [用于创建数据库用户凭证的 JDBC 和 ODBC 选项](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。  
IAM 凭证  
输入以下信息：  
      + **ClusterID** 
      + **区域** 
      + **AccessKeyID** 和 **SecretAccessKey** 

        为 IAM 数据库身份验证配置的 IAM 角色或用户的访问密钥 ID 和秘密访问密钥。
      + **SessionToken** 

        对于具有临时凭证的 IAM 角色，**SessionToken** 是必填的。有关更多信息，请参阅[临时安全凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。
提供 ODBC 驱动程序用于调用 `GetClusterCredentials` API 操作的选项的详细信息：  
      + **DbUser**（必填） 
      + **User AutoCreate**（可选） 
      + **DbGroups**（可选） 

        有关更多信息，请参阅 [用于创建数据库用户凭证的 JDBC 和 ODBC 选项](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。  
Identity Provider: AD FS  
对于使用 AD FS 的 Windows 集成身份验证，请将 **User** 和 **Password** 保留为空。  
提供 IdP 详细信息：  
      + **IdP Host** 

        企业身份提供者主机的名称。此名称不应包含任何斜线 (/)。
      + **IdP Port**（可选）

        身份提供者使用的端口。默认值为 443。
      + **Preferred Role** 

        SAML 断言中的 `AttributeValue` 属性的多值 `Role` 元素中的 IAM 角色 Amazon 资源名称（ARN）。请与 IdP 管理员一起查找适合首选角色的值。有关更多信息，请参阅 [步骤 2：为 IdP 配置 SAML 断言](#configuring-saml-assertions)。
（可选）提供 ODBC 驱动程序用于调用 `GetClusterCredentials` API 操作的选项的详细信息：  
      + **DbUser** 
      + **User AutoCreate** 
      + **DbGroups** 
有关更多信息，请参阅 [用于创建数据库用户凭证的 JDBC 和 ODBC 选项](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。  
Identity Provider: PingFederate  
对于**用户**和**密码**，键入您的 IdP 用户名和密码。  
提供 IdP 详细信息：  
      + **IdP Host** 

        企业身份提供者主机的名称。此名称不应包含任何斜线 (/)。
      + **IdP Port**（可选）

        身份提供者使用的端口。默认值为 443。
      + **Preferred Role** 

        SAML 断言中的 `AttributeValue` 属性的多值 `Role` 元素中的 IAM 角色 Amazon 资源名称（ARN）。请与 IdP 管理员一起查找适合首选角色的值。有关更多信息，请参阅 [步骤 2：为 IdP 配置 SAML 断言](#configuring-saml-assertions)。
（可选）提供 ODBC 驱动程序用于调用 `GetClusterCredentials` API 操作的选项的详细信息：  
      + **DbUser** 
      + **User AutoCreate** 
      + **DbGroups** 
有关更多信息，请参阅 [用于创建数据库用户凭证的 JDBC 和 ODBC 选项](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。  
Identity Provider: Okta  
对于**用户**和**密码**，键入您的 IdP 用户名和密码。  
提供 IdP 详细信息：  
      + **IdP Host** 

        企业身份提供者主机的名称。此名称不应包含任何斜线 (/)。
      + **IdP Port ** 

        Okta 不使用此值。
      + **Preferred Role** 

        SAML 断言中的 `AttributeValue` 属性的 `Role` 元素中的 IAM 角色 Amazon 资源名称（ARN）。请与 IdP 管理员一起查找适合首选角色的值。有关更多信息，请参阅 [步骤 2：为 IdP 配置 SAML 断言](#configuring-saml-assertions)。
      + **Okta App ID** 

        Okta 应用程序的 ID。应用程序 ID 的值位于 Okta 应用程序嵌入链接中的“amazon\$1aws”之后。与您的 IdP 管理员一起获取此值。
（可选）提供 ODBC 驱动程序用于调用 `GetClusterCredentials` API 操作的选项的详细信息：  
      + **DbUser** 
      + **User AutoCreate** 
      + **DbGroups** 
有关更多信息，请参阅 [用于创建数据库用户凭证的 JDBC 和 ODBC 选项](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。  
身份提供者：Azure AD  
对于**用户**和**密码**，键入您的 IdP 用户名和密码。  
对于**集群 ID** 和**区域**，输入 Amazon Redshift 集群的集群 ID 和 AWS 区域。  
对于**数据库**，输入您为 Amazon Redshift 集群创建的数据库。  
提供 IdP 详细信息：  
      + **IdP 租户** 

        用于 Azure AD 的租户。
      + **Azure 客户端密钥**

        Azure 中的 Amazon Redshift 企业应用程序的客户端密钥。
      + **Azure 客户端 ID** 

        Azure 中的 Amazon Redshift 企业应用程序的客户端 ID（应用程序 ID）。
（可选）提供 ODBC 驱动程序用于调用 `GetClusterCredentials` API 操作的选项的详细信息：  
      + **DbUser** 
      + **User AutoCreate** 
      + **DbGroups** 
有关更多信息，请参阅 [用于创建数据库用户凭证的 JDBC 和 ODBC 选项](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。

# 用于提供 IAM 凭证的选项
用于提供 IAM 凭证的选项

要为 JDBC 或 ODBC 连接提供 IAM 凭证，请选择以下选项之一。
+ **AWS 配置文件** 

  作为以 JDBC 或 ODBC 设置形式提供凭证值的替代方案，您可在命名配置文件中放置这些值。有关更多信息，请参阅 [使用配置文件](#using-configuration-profile)。
+ **IAM 凭证**

  以 JDBC 或 ODBC 设置形式提供 AccessKeyID 和 SecretAccessKey 的值，还可以选择提供 SessionToken 的值。SessionToken 仅对于具有临时凭证的 IAM 角色是必填的。有关更多信息，请参阅 [用于提供 IAM 凭证的 JDBC 和 ODBC 选项](#jdbc-options-for-providing-iam-credentials)。
+ **身份提供者联合** 

  在使用身份提供者联合以允许身份提供者中的用户在 Amazon Redshift 中进行身份验证时，请指定凭证提供商插件的名称。有关更多信息，请参阅 [凭证提供程序插件](#using-credentials-provider-plugin)。

  Amazon Redshift JDBC 和 ODBC 驱动程序包括以下基于 SAML 的联合身份验证凭证提供商的插件：
  + Microsoft Active Directory 联合身份验证服务 (AD FS)
  + PingOne
  + Okta
  + Microsoft Azure Active Directory (Azure AD)

  您可以 JDBC 或 ODBC 设置格式提供或使用配置文件提供插件名称和相关值。有关更多信息，请参阅 [JDBC 驱动程序版本 2.x 配置的选项](jdbc20-configuration-options.md)。

有关更多信息，请参阅 [步骤 5：配置 JDBC 或 ODBC 连接以使用 IAM 凭证](generating-iam-credentials-steps.md#generating-iam-credentials-configure-jdbc-odbc)。

## 使用配置文件
使用配置文件

您可提供 IAM 凭证选项和 `GetClusterCredentials` 选项作为 AWS 配置文件中的命名配置文件的设置。要提供配置文件名称，请使用配置文件 JDBC 选项。该配置存储在名为 `config` 的文件或位于主目录下面的名为 `credentials` 的文件夹中的名为 `.aws` 的文件中。

对于 Amazon Redshift JDBC 或 ODBC 驱动程序附带的基于 SAML 的凭证提供商插件，您可以使用 [凭证提供程序插件](#using-credentials-provider-plugin) 中前面所述的设置。如果未使用 `plugin_name`，则忽略其他选项。

下例所示为一个有两个配置文件的 \$1/.aws/credentials 文件。

```
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[user2]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
session_token=AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==
```

要使用 `user2` 示例的凭证，请在 JDBC URL 中指定 `Profile=user2`。

有关使用配置文件的更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[配置和凭证文件设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。

有关为 JDBC 驱动程序使用配置文件的更多信息，请参阅[指定配置文件](jdbc20-configure-authentication-ssl.md#jdbc20-aws-credentials-profiles)。

有关为 ODBC 驱动程序使用配置文件的更多信息，请参阅[身份验证方法](odbc20-authentication-ssl.md)。

## 用于提供 IAM 凭证的 JDBC 和 ODBC 选项
用于提供 IAM 凭证的 JDBC 和 ODBC 选项

下表列出了用于提供 IAM 凭证的 JDBC 和 ODBC 选项。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/options-for-providing-iam-credentials.html)

## 用于创建数据库用户凭证的 JDBC 和 ODBC 选项


要使用 Amazon Redshift JDBC 或 ODBC 驱动程序创建数据库用户凭证，请提供数据库用户名作为 JDBC 或 ODBC 选项。（可选）您可以让驱动程序创建新的数据库用户（如果不存在），并且可以指定用户在登录时加入的数据库用户组列表。

如果您使用身份提供者 (IdP)，请与 IdP 管理员一起确定这些选项的正确值。您的 IdP 管理员还可配置 IdP 来提供这些选项，这样一来，您将无需提供它们作为 JDBC 或 ODBC 选项。有关更多信息，请参阅 [步骤 2：为 IdP 配置 SAML 断言](generating-iam-credentials-steps.md#configuring-saml-assertions)。

**注意**  
如果您使用 IAM 策略变量 `${redshift:DbUser}`（如[GetClusterCredentials 的资源策略](redshift-iam-access-control-identity-based.md#redshift-policy-resources.getclustercredentials-resources)中所述），则 `DbUser` 的值将被替换为由 API 操作的请求上下文检索的值。Amazon Redshift 驱动程序使用由连接 URL 提供的 `DbUser` 变量的值，而不是作为 SAML 属性提供的值。  
为帮助保护此配置，我们建议您在 IAM 策略中使用一个使用来通过 `DbUser` 验证 `RoleSessionName` 值。您可以在 [示例 8：使用 GetClusterCredentials 的 IAM 策略](redshift-iam-access-control-identity-based.md#redshift-policy-examples-getclustercredentials) 中找到如何使用 IAM 策略设置条件。

下表列出了用于创建数据库用户凭证的选项。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/options-for-providing-iam-credentials.html)

## 凭证提供程序插件


Amazon Redshift 使用凭证提供商插件进行单点登录身份验证。

为了支持单点登录身份验证，Amazon Redshift 提供了适用于 Microsoft Azure Active Directory 的 Azure AD 插件。有关如何配置该插件的信息，请参阅[设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。

### 多重身份验证


为了支持多重身份验证（MFA），Amazon Redshift 提供了基于浏览器的插件。请使用适用于 Okta、PingOne 的的浏览器 SAML 插件，以及适用于 Microsoft Azure Active Directory 的浏览器 Azure AD 插件。

在使用浏览器 SAML 插件时，OAuth 身份验证流程如下所示：

![\[OAuth 工作流，用于说明插件、本地服务器、Web 浏览器和端点如何协同工作，通过 SAML 身份验证对用户进行身份验证。\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/images/BrowserSAML_plugin.png)


1. 用户尝试登录。

1. 该插件启动本地服务器以侦听 localhost 上的传入连接。

1. 该插件启动 Web 浏览器，以通过 HTTPS 从指定的单点登录 URL 联合身份提供者端点请求 SAML 响应。

1. Web 浏览器访问该链接，并提示用户输入凭证。

1. 在用户进行身份验证并获得允许后，联合身份提供者端点通过 HTTPS 向 `redirect_uri` 指示的 URI 返回 SAML 响应。

1. Web 浏览器将包含 SAML 响应的响应消息传送到指示的 `redirect_uri`。

1. 本地服务器接受传入连接，该插件检索 SAML 响应并将其传送到 Amazon Redshift。

在使用浏览器 Azure AD 插件时，SAML 身份验证流程如下所示：

![\[Azure 工作流，用于说明插件、本地服务器、Web 浏览器和端点如何协同工作，通过 SAML 身份验证对用户进行身份验证。\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/images/BrowserAzure_plugin.png)


1. 用户尝试登录。

1. 该插件启动本地服务器以侦听 localhost 上的传入连接。

1. 该插件启动 Web 浏览器，以从 Azure AD `oauth2/authorize` 端点请求授权代码。

1. Web 浏览器通过 HTTPS 访问生成的链接，并提示用户输入凭证。该链接是使用配置属性（例如 tenant 和 client\$1id）生成的。

1. 在用户进行身份验证并获得允许后，Azure AD `oauth2/authorize` 端点通过 HTTPS 返回包含授权代码的响应并将其发送到指示的 `redirect_uri`。

1. Web 浏览器将包含 SAML 响应的响应消息传送到指示的 `redirect_uri`。

1. 本地服务器接受传入连接，该插件请求和检索授权代码，并将 POST 请求发送到 Azure AD `oauth2/token` 端点。

1. Azure AD `oauth2/token` 端点将包含访问令牌的响应返回到指示的 `redirect_uri`。

1. 该插件检索 SAML 响应并将其传送到 Amazon Redshift。

参阅以下部分：
+ Active Directory 联合身份验证服务 (AD FS)

  有关更多信息，请参阅 [设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。
+ PingOne (Ping) 

  只有使用 Forms 身份验证预先确定的 PingOne IdP 适配器支持 Ping。

  有关更多信息，请参阅 [设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。
+ Okta 

  仅与 AWS 管理控制台 一起使用的 Okta 提供的应用程序支持 Okta。

  有关更多信息，请参阅 [设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。
+ Microsoft Azure Active Directory

  有关更多信息，请参阅 [设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。

### 插件选项


要使用基于 SAML 的凭证提供商插件，请使用 JBDC 或 ODBC 选项，或在命名配置文件中指定以下选项。如果未指定 `plugin_name`，则忽略其他选项。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/options-for-providing-iam-credentials.html)

# 使用 Amazon Redshift CLI 或 API 生成 IAM 身份的数据库凭证
生成 IAM 身份的数据库凭证

为了以编程方式生成临时数据库用户凭证，Amazon Redshift 提供适用于 AWS Command Line Interface (AWS CLI) 和 [GetClusterCredentials](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html) API 操作的 [get-cluster-credentials](https://docs.aws.amazon.com/cli/latest/reference/redshift/get-cluster-credentials.html) 命令。或者，您可以使用 Amazon Redshift JDBC 或 ODBC 驱动程序配置您的 SQL 客户端，这些驱动程序用于管理调用 `GetClusterCredentials` 操作，检索数据库用户凭证，并在您的 SQL 客户端与您的 Amazon Redshift 数据库之间建立连接的过程。有关更多信息，请参阅 [用于创建数据库用户凭证的 JDBC 和 ODBC 选项](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。

**注意**  
我们建议使用 Amazon Redshift JDBC 或 ODBC 驱动程序生成数据库用户凭证。

在此部分中，您可以找到用于以编程方式调用 `GetClusterCredentials` 操作或 get-cluster-credentials 命令，检索数据库用户凭证并连接到数据库的步骤。

**生成和使用临时数据库凭证**

1. 创建或修改具有所需权限的用户或角色。有关 IAM 权限的更多信息，请参阅[步骤 3：创建有权调用 GetClusterCredentialsWithIAM 或 GetClusterCredentials 的 IAM 角色](generating-iam-credentials-steps.md#generating-iam-credentials-role-permissions)。

1. 以您在上一步骤中授权的用户或角色的身份，运行 get-cluster-credentials CLI 命令或调用 `GetClusterCredentials` API 操作并提供下列值：
   + **集群标识符** – 包含数据库的集群的名称。
   + **数据库用户名** – 现有的或新的数据库用户的名称。
     + 如果数据库中不存在此用户且 AutoCreate 为 true，则将创建一个已禁用 PASSWORD 的新用户。
     +  如果此用户不存在且 AutoCreate 为 false，则请求会失败。
     + 在此示例中，数据库用户名为 `temp_creds_user`。
   +  **Autocreate** – （可选）如果数据库用户名不存在，则创建新用户。
   +  **数据库名称** – （可选）授权用户登录的数据库的名称。如果未指定数据库名称，则用户可以登录到任何集群数据库。
   +  **数据库组** – （可选）现有数据库用户组的列表。在成功登录后，数据库用户将添加到指定的用户组中。如果未指定组，则用户仅具有 PUBLIC 权限。此用户组名称必须与在附加到用户或角色的 IAM 策略中指定的 dbgroup 资源 ARN 匹配。
   +  **过期时间** – （可选）临时凭证过期之前经历的时间（以秒为单位）。您可指定一个介于 900 秒 (15 分钟) 和 3600 秒 (60 分钟) 之间的值。默认值为 900 秒。

1. Amazon Redshift 确认用户是否有权使用指定资源来调用 `GetClusterCredentials` 操作。

1. Amazon Redshift 返回临时密码和数据库用户名。

   以下示例使用 Amazon Redshift CLI 为名为 `temp_creds_user` 的现有用户生成临时数据库凭证。

   ```
   aws redshift get-cluster-credentials --cluster-identifier examplecluster --db-user temp_creds_user --db-name exampledb --duration-seconds 3600
   ```

   结果如下所示。

   ```
   {
     "DbUser": "IAM:temp_creds_user", 
     "Expiration": "2016-12-08T21:12:53Z", 
     "DbPassword": "EXAMPLEjArE3hcnQj8zt4XQj9Xtma8oxYEM8OyxpDHwXVPyJYBDm/gqX2Eeaq6P3DgTzgPg=="
   }
   ```

   以下示例使用 Amazon Redshift CLI 与 autocreate 为新用户生成临时数据库凭证并将此用户添加到组 `example_group`。

   ```
   aws redshift get-cluster-credentials --cluster-identifier examplecluster --db-user temp_creds_user --auto-create --db-name exampledb --db-groups example_group --duration-seconds 3600
   ```

   结果如下所示。

   ```
   {
     "DbUser": "IAMA:temp_creds_user:example_group", 
     "Expiration": "2016-12-08T21:12:53Z", 
     "DbPassword": "EXAMPLEjArE3hcnQj8zt4XQj9Xtma8oxYEM8OyxpDHwXVPyJYBDm/gqX2Eeaq6P3DgTzgPg=="
   }
   ```

1. 建立到 Amazon Redshift 集群的安全套接字层 (SSL) 身份验证连接，并发送包含 `GetClusterCredentials` 响应中的用户名和密码的登录请求。请在用户名中包含 `IAM:` 或 `IAMA:` 前缀，例如，`IAM:temp_creds_user` 或 `IAMA:temp_creds_user`。
**重要**  
将您的 SQL 客户端配置为需要 SSL。否则，如果您的 SQL 客户端自动尝试使用 SSL 进行连接，则可能会在出现任何故障时回退到非 SSL。在这种情况下，首次连接尝试可能因凭证过期或无效而失败，随后的另一次连接尝试可能因连接不是 SSL 而失败。如果出现这种情况，第一条错误消息可能会丢失。有关使用 SSL 连接到集群的更多信息，请参阅[配置连接的安全选项](connecting-ssl-support.md)。

1. 如果连接未使用 SSL，则连接尝试可能失败。

1. 集群将向 SQL 客户端发送 `authentication` 请求。

1. 随后，SQL 客户端会向集群发送临时密码。

1. 如果密码有效且尚未到期，集群将完成连接。

# 设置 JDBC 或 ODBC 单点登录身份验证


您可以利用外部身份提供者（IdP）对访问 Amazon Redshift 集群的用户进行身份验证和授权，从而简化用户管理并增强安全性。这就实现了集中式用户管理、基于角色的访问控制以及跨多个服务的审计功能。常见应用场景包括简化不同用户组的身份验证、执行一致的访问策略以及满足监管要求。

以下页面将指导您配置 IdP 与 Redshift 集群的集成。有关配置 AWS 作为 IdP 的服务提供商的更多信息，请参阅 *IAM 用户指南*中的[通过信赖方信任和添加陈述来配置 SAML 2.0 IdP](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html#saml_relying-party)。

# AD FS


本教程将向您展示如何将 AD FS 用作身份提供者（IdP）来访问 Amazon Redshift 集群。

## 第 1 步：设置 AD FS 和您的 AWS 账户相互信任


 以下过程介绍如何建立信任关系。

1. 创建或使用现有的 Amazon Redshift 集群，以使 AD FS 用户连接到该集群。要配置连接，需要此集群的某些属性，例如集群标识符。有关更多信息，请参阅[创建集群](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

1. 在 Microsoft 管理控制台上设置 AD FS 以控制 Amazon Redshift 访问：

   1. 选择 **ADFS 2.0**，然后选择**添加信赖方信任**。在**添加信赖方信任向导**页面上，选择**开始**。

   1. 在**选择数据源**页面上，选择**导入有关在线或在本地网络上发布的信赖方的数据**。

   1. 对于**联合元数据地址(主机名或 URL)**，请输入 **https://signin.aws.amazon.com/saml-metadata.xml**。元数据 XML 文件是将 AWS 描述为信赖方的标准 SAML 元数据文档。

   1. 在**指定显示名称**页面上，输入**显示名称**的值。

   1. 在**选择颁发授权规则**页面上，选择一个颁发授权规则以允许或拒绝所有用户访问该信赖方。

   1. 在**准备好添加信任**页面上，查看您的设置。

   1. 在**完成**页面上，选择**向导关闭时打开此信赖方信任的“编辑声明规则”对话框**。

   1. 在上下文（右键单击）菜单上，选择**信赖方信任**。

   1. 对于您的信赖方，打开上下文（右键单击）菜单，然后选择**编辑声明规则**。在**编辑声明规则**页面上，选择**添加规则**。

   1. 对于**声明规则模板**，请选择**转换传入声明**，然后在**编辑规则 - NameId** 页面上执行以下操作：
      + 对于**声明规则名称**，请输入 **NameId**。
      + 对于**传入声明名称**，请选择 **Windows 账户名**。
      + 对于**传出声明名称**，请选择**名称 ID**。
      + 对于**传出名称 ID 格式**，请选择**持久性标识符**。
      + 选择**传递所有声明值**。

   1. 在**编辑声明规则**页面上，选择**添加规则**。在**选择规则模板**页面上，对于**声明规则模板**，请选择**以声明方式发送 LDAP 特性**。

   1. 在**配置规则**页面上，执行以下操作：
      + 对于**声明规则名称**，请输入 **RoleSessionName**。
      + 对于**特性存储**，请选择 **Active Directory**。
      + 对于 **LDAP 特性**，请选择**电子邮件地址**。
      + 对于**传出声明类型**，选择 **https://aws.amazon.com/SAML/Attributes/RoleSessionName**。

   1. 在**编辑声明规则**页面上，选择**添加规则**。在**选择规则模板**页面上，对于**声明规则模板**，请选择**使用自定义规则发送声明**。

   1. 在**编辑规则 - 获取 AD 组**页面上，对于**声明规则名称**，请输入**获取 AD 组**。

   1. 对于**自定义规则**，请输入以下内容。

      ```
      c:[Type ==
                                          "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",
                                          Issuer == "AD AUTHORITY"] => add(store = "Active Directory",
                                          types = ("http://temp/variable"), query = ";tokenGroups;{0}",
                                          param = c.Value);
      ```

   1. 在**编辑声明规则**页面上，选择**添加规则**。在**选择规则模板**页面上，对于**声明规则模板**，请选择**使用自定义规则发送声明**。

   1. 在**编辑规则 - 角色**页面上，对于**声明规则名称**，请键入**角色**。

   1. 对于**自定义规则**，请输入以下内容。

      ```
      c:[Type == "http://temp/variable", Value =~ "(?i)^AWS-"] => issue(Type = "https://aws.amazon.com/SAML/Attributes/Role", Value = RegExReplace(c.Value, "AWS-", "arn:aws:iam::123456789012:saml-provider/ADFS,arn:aws:iam::123456789012:role/ADFS-"));
      ```

      请注意 SAML 提供商的 ARN 和要担任的角色。在该示例中，`arn:aws:iam:123456789012:saml-provider/ADFS` 是 SAML 提供商的 ARN，`arn:aws:iam:123456789012:role/ADFS-` 是角色的 ARN。

1. 确保您已下载 `federationmetadata.xml` 文件。检查以确认文档内容不包含无效的字符。这是在配置与 AWS 的信任关系时使用的元数据文件。

1. 在 IAM 控制台上创建 IAM SAML 身份提供者。您提供的元数据文档是您在设置 Azure 企业应用程序时保存的联合元数据 XML 文件。有关详细步骤，请参阅《IAM 用户指南》**中的[创建和管理 IAM 身份提供者（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 控制台上为 SAML 2.0 联合身份创建 IAM 角色。有关详细步骤，请参阅 *IAM 用户指南*中的[创建用于 SAML 的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 创建一个 IAM 策略，您可以将其附加到您在 IAM 控制台上为 SAML 2.0 联合身份验证创建的 IAM 角色。有关详细步骤，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。有关 Azure AD 示例，请参阅[设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。

## 第 2 步：设置 JDBC 或 ODBC，以便向 AD FS 进行身份验证


------
#### [ JDBC ]

 以下过程介绍如何设置与 AD FS 的 JDBC 关系。
+ 将数据库客户端配置为通过 JDBC 并使用 AD FS 单点登录连接到集群。

  您可以使用任何采用 JDBC 驱动程序的客户端通过 AD FS 单点登录进行连接，也可以使用像 Java 这样的语言通过脚本进行连接。有关安装和配置信息，请参阅[为 Amazon Redshift 配置 JDBC 驱动程序版本 2.x 连接](jdbc20-install.md)。

  例如，您可以使用 SQLWorkbench/J 作为客户端。当您配置 SQLWorkbench/J 时，数据库的 URL 使用以下格式。

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  如果您使用 SQLWorkbench/J 作为客户端，请执行以下步骤：

  1. 启动 SQL Workbench/J。在**选择连接配置文件**页面中，添加一个**配置文件组**，例如，**ADFS**。

  1. 对于**连接配置文件**，请输入您的连接配置文件名称，例如 **ADFS**。

  1. 选择**管理驱动程序**，然后选择 **Amazon Redshift**。选择**库**旁边的**打开文件夹**图标，然后选择适当的 JDBC .jar 文件。

  1. 在**选择连接配置文件**页面上，向连接配置文件添加信息，如下所示：
     + 对于**用户**，请输入您的 AD FS 用户名。这是您用于单点登录的账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。
     + 对于**密码**，请输入您的 AD FS 密码。
     + 对于**驱动程序**，请选择 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 对于 **URL**，请输入 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***。

  1. 选择**扩展属性**。对于 **plugin\$1name**，请输入 **com.amazon.redshift.plugin.AdfsCredentialsProvider**。该值指定驱动程序将 AD FS 单点登录作为身份验证方法。

------
#### [ ODBC ]

**设置 ODBC 以在 AD FS 中进行身份验证**
+ 将数据库客户端配置为通过 ODBC 并使用 AD FS 单点登录连接到集群。

  Amazon Redshift 提供了适用于 Linux、Windows 和 macOS 操作系统的 ODBC 驱动程序。在安装 ODBC 驱动程序之前，请确定您的 SQL 客户端工具是 32 位还是 64 位。安装符合 SQL 客户端工具要求的 ODBC 驱动程序。

  在 Windows 上的 **Amazon Redshift ODBC 驱动程序 DSN 安装**页的**连接设置**下，输入以下信息：
  + 对于**数据源名称**，输入 ***your-DSN***。这将指定用作 ODBC 配置文件名称的数据源名称。
  + 对于**身份验证类型**，选择**身份提供者：SAML**。这是 ODBC 驱动程序在通过 AD FS 单点登录进行身份验证时使用的身份验证方法。
  + 对于**集群 ID**，请输入 ***your-cluster-identifier***。
  + 对于**区域**，请输入 ***your-cluster-region***。
  + 对于**数据库**，请输入 ***your-database-name***。
  + 对于**用户**，请输入 ***your-adfs-username***。这是您用于单点登录的 AD FS 账户的用户名，该账户有权访问您在尝试进行身份验证时使用的集群。请仅将其用于**身份验证类型**为**身份提供者: SAML** 的情况。
  + 对于**密码**，请输入 ***your-adfs-password***。请仅将其用于 **Auth type (身份验证类型)** 为 **Identity Provider: SAML (身份提供者: SAML)** 的情况。

  在 macOS 和 Linux 上，按如下方式编辑 `odbc.ini` 文件：
**注意**  
所有条目不区分大小写。
  + 对于 **clusterid**，请输入 ***your-cluster-identifier***。这是已创建的 Amazon Redshift 集群的名称。
  + 对于**区域**，请输入 ***your-cluster-region***。这是已创建的 Amazon Redshift 集群的 AWS 区域。
  + 对于**数据库**，请输入 ***your-database-name***。这是您尝试在 Amazon Redshift 集群上访问的数据库的名称。
  + 对于**区域设置**，请输入 **en-us**。这是显示错误消息的语言。
  + 对于 **iam**，请输入 **1**。此值指定要使用 IAM 凭证进行身份验证的驱动程序。
  + 对于 **plugin\$1name**，请执行以下操作之一：
    + 对于具有 MFA 的 AD FS 单点登录配置，请输入 **BrowserSAML**。这是 ODBC 驱动程序在 AD FS 中进行身份验证时使用的身份验证方法。
    + 对于 AD FS 单点登录配置，请输入 **ADFS**。这是 ODBC 驱动程序在通过 Azure AD 单点登录进行身份验证时使用的身份验证方法。
  + 对于 **uid**，请输入 ***your-adfs-username***。这是您用于单点登录的 Microsoft Azure 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。请仅将其用于 **plugin\$1name** 为 **ADFS** 的情况。
  + 对于**密码**，请输入 ***your-adfs-password***。请仅将其用于 **plugin\$1name** 为 **ADFS** 的情况。

  在 macOS 和 Linux 上，还要编辑配置文件设置以添加以下导出。

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

# Azure


您可以使用 Microsoft Azure AD 作为身份提供者 (IdP) 来访问 Amazon Redshift 集群。本教程将向您展示如何将 Azure 用作身份提供者（IdP）来访问 Amazon Redshift 集群。

要了解如何通过 Microsoft Azure AD 单点登录进行联合 Amazon Redshift 访问，请观看以下视频。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/aXs9hEgJCss/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/aXs9hEgJCss)


## 第 1 步：设置 Azure 和您的 AWS 账户相互信任


以下过程介绍如何建立信任关系。

**将 Azure AD 和您的 AWS 账户设置为彼此信任**

1. 创建或使用现有的 Amazon Redshift 集群，以使 Azure AD 用户连接到该集群。要配置连接，需要此集群的某些属性，例如集群标识符。有关更多信息，请参阅[创建集群](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

1. 在 Microsoft Azure 门户上设置用于 AWS 的 Azure Active Directory、组、用户。

1. 在 Microsoft Azure 门户上添加 Amazon Redshift 以作为企业应用程序，以用于 AWS 控制台单点登录和 Amazon Redshift 联合登录。选择**企业应用程序**。

1. 选择 **\$1 新建应用程序**。将显示“添加应用程序”页面。

1. 在搜索字段中搜索 **AWS**。

1. 选择 **Amazon Web Services (AWS)**，然后选择**添加**。将会创建 AWS 应用程序。

1. 在**管理**下方，选择**单点登录**。

1. 选择 **SAML**。将显示 Amazon Web Services (AWS) \$1 基于 SAML 的登录页面。

1. 选择**是**以转到“使用 SAML 设置单点登录”页面。该页面显示预配置的单点登录相关属性的列表。

1. 对于**基本 SAML 配置**，请选择编辑图标，然后选择**保存**。

1. 在配置多个应用程序时，请提供一个标识符值。例如，输入 ***https://signin.aws.amazon.com/saml\$12***。请注意，从第二个应用程序开始，将该格式与 \$1 符号一起使用以指定唯一的 SPN 值。

1. 在**用户属性和声明**部分中，选择编辑图标。

   默认情况下，预配置了唯一用户标识符 (UID)、角色、RoleSessionName 和 SessionDuration 声明。

1. 选择 **\$1 添加新的声明**，以便为数据库用户添加声明。

   对于**名称**，请输入 **DbUser**。

   对于**命名空间**，请输入 **https://redshift.amazon.com/SAML/Attributes**。

   对于**源**，请选择**属性**。

   对于**源属性**，请选择 **user.userprincipalname**。然后，选择**保存**。

1. 选择 **\$1 添加新的声明**，以便为 AutoCreate 添加声明。

   对于**名称**，请输入 **AutoCreate**。

   对于**命名空间**，请输入 **https://redshift.amazon.com/SAML/Attributes**。

   对于**源**，请选择**属性**。

   对于**源属性**，请选择 **"true"**。然后，选择**保存**。

   此处，`123456789012` 是您的 AWS 账户，*`AzureSSO`* 是您创建的 IAM 角色，*`AzureADProvider`* 是 IAM 提供商。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/setup-identity-provider-azure.html)

1. 在**应用程序注册 > ***your-application-name*** > 身份验证** 下，添加**移动和桌面应用程序**。将 URL 指定为 http://localhost/redshift/。

1. 在 **SAML 签名证书** 部分中，选择**下载**以下载并保存联合元数据 XML 文件，以便在创建 IAM SAML 身份提供者时使用。该文件用于创建单点登录联合身份。

1. 在 IAM 控制台上创建 IAM SAML 身份提供者。您提供的元数据文档是您在设置 Azure 企业应用程序时保存的联合元数据 XML 文件。有关详细步骤，请参阅《IAM 用户指南》**中的[创建和管理 IAM 身份提供者（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 控制台上为 SAML 2.0 联合身份创建 IAM 角色。有关详细步骤，请参阅 *IAM 用户指南*中的[创建用于 SAML 的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 创建一个 IAM 策略，您可以将其附加到您在 IAM 控制台上为 SAML 2.0 联合身份验证创建的 IAM 角色。有关详细步骤，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。

   为您的环境修改以下策略（JSON 格式）：
   + 将集群的 AWS 区域替换为 `us-west-1`。
   + 将您的 AWS 账户替换为 *`123456789012`*。
   + 将您的集群标识符（或对于所有集群，则为 `*`）替换为 *`cluster-identifier`*。
   + 将您的数据库（或对于所有集群，则为 `*`）替换为 *`dev`*。
   + 将 IAM 角色的唯一标识符替换为 *`AROAJ2UCCR6DPCEXAMPLE`*。
   + 将您的租户或公司电子邮件域替换为 `example.com`。
   + 将您计划为其分配用户的数据库组替换为 *`my_dbgroup`*。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "redshift:GetClusterCredentials",
               "Resource": [
                   "arn:aws:redshift:us-west-1:123456789012:dbname:cluster-identifier/dev",
                   "arn:aws:redshift:us-west-1:123456789012:dbuser:cluster-identifier/${redshift:DbUser}",
                   "arn:aws:redshift:us-west-1:123456789012:cluster:cluster-identifier"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:userid": "AROAJ2UCCR6DPCEXAMPLE:${redshift:DbUser}@example.com"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": "redshift:CreateClusterUser",
               "Resource": "arn:aws:redshift:us-west-1:123456789012:dbuser:cluster-identifier/${redshift:DbUser}"
           },
           {
               "Effect": "Allow",
               "Action": "redshift:JoinGroup",
               "Resource": "arn:aws:redshift:us-west-1:123456789012:dbgroup:cluster-identifier/my_dbgroup"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "redshift:DescribeClusters",
                   "iam:ListRoles"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

   此策略授予权限，如下所示：
   + 第一部分授予执行 `GetClusterCredentials` API 操作的权限，以获取指定集群的临时凭证。在此示例中，资源是 `cluster-identifier`，所在的数据库为 *`dev`*，所在的账户为 *`123456789012`*，所在的 AWS 区域为 *`us-west-1`*。`${redshift:DbUser}` 子句仅允许与在 Azure AD 中指定的 `DbUser` 值匹配的用户进行连接。
   + 条件子句会强制只有特定用户能够获得临时凭证。这些用户是由角色唯一 ID *`AROAJ2UCCR6DPCEXAMPLE`* 指定的角色下的用户，该 ID 位于您公司的电子邮件域中的电子邮件地址所标识的 IAM 账户中。有关唯一 ID 的更多信息，请参阅 *IAM 用户指南*中的[唯一 ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)。

     您使用 IdP（在本例中为 Azure AD）进行的设置决定了条件子句的写入方式。如果员工的电子邮件是 `johndoe@example.com`，请首先将 `${redshift:DbUser}` 设置为与员工用户名 `johndoe` 匹配的超级用户字段。然后，要使该条件有效，请将 AWS SAML `RoleSessionName` 字段设置为与员工电子邮件 `johndoe@example.com` 匹配的超级用户字段。使用这种方法时，请考虑以下几点：
     + 如果您将 `${redshift:DbUser}` 设置为员工的电子邮件，则删除示例 JSON 中的 `@example.com` 以匹配 `RoleSessionName`。
     + 如果您只是将 `RoleSessionId` 设置为员工的用户名，则删除示例中的 `@example.com` 以匹配 `RoleSessionName`。
     + 在示例 JSON 中，`${redshift:DbUser}` 和 `RoleSessionName` 都已设置为员工电子邮件。此示例 JSON 使用 Amazon Redshift 数据库用户名以及 `@example.com` 让用户登录以访问集群。
   + 第二部分授予在指定集群中创建 `dbuser` 名称的权限。在此示例 JSON 中，它将创建限制为 `${redshift:DbUser}`。
   + 第三部分授予指定用户可以加入 `dbgroup` 的权限。在此示例 JSON 中，用户可以加入指定集群中的 `my_dbgroup` 组。
   + 第四部分授予用户可以对所有资源执行的操作的权限。在此示例 JSON 中，它允许用户调用 `redshift:DescribeClusters` 以获取集群信息，例如集群端点、AWS 区域和端口。它还允许用户调用 `iam:ListRoles` 以检查用户可以代入哪些角色。

## 第 2 步：设置 JDBC 或 ODBC，以便向 Azure 进行身份验证


------
#### [ JDBC ]

**设置 JDBC 以在 Microsoft Azure AD 中进行身份验证**
+ 将数据库客户端配置为通过 JDBC 连接（使用 Azure AD 单点登录）到集群。

  您可以使用任何采用 JDBC 驱动程序的客户端通过 Azure AD 单点登录进行连接，也可以使用像 Java 这样的语言通过脚本进行连接。有关安装和配置信息，请参阅[为 Amazon Redshift 配置 JDBC 驱动程序版本 2.x 连接](jdbc20-install.md)。

  例如，您可以使用 SQLWorkbench/J 作为客户端。当您配置 SQLWorkbench/J 时，数据库的 URL 使用以下格式。

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  如果您使用 SQLWorkbench/J 作为客户端，请执行以下步骤：

  1. 启动 SQL Workbench/J。在**选择连接配置文件**页面上，添加一个称为 **AzureAuth** 的**配置文件组**。

  1. 对于**连接配置文件**，请输入 **Azure**。

  1. 选择**管理驱动程序**，然后选择 **Amazon Redshift**。选择**库**旁边的**打开文件夹**图标，然后选择适当的 JDBC .jar 文件。

  1. 在**选择连接配置文件**页面上，向连接配置文件添加信息，如下所示：
     + 对于**用户**，请输入 Microsoft Azure 用户名。这是您用于单点登录的 Microsoft Azure 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。
     + 对于**密码**，请输入您的 Microsoft Azure 密码。
     + 对于**驱动程序**，请选择 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 对于 **URL**，请输入 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***。

  1. 选择**扩展属性**以在连接属性中添加其他信息，如下所述。

     对于 Azure AD 单点登录配置，请添加附加信息，如下所示：
     + 对于 **plugin\$1name**，请输入 **com.amazon.redshift.plugin.AzureCredentialsProvider**。该值指定驱动程序将 Azure AD 单点登录作为身份验证方法。
     + 对于 **idp\$1tenant**，请输入 ***your-idp-tenant***。仅用于 Microsoft Azure AD。这是在 Azure AD 上为您的公司配置的租户名称。此值可以是租户名或带连字符的租户唯一 ID。
     + 对于 **client\$1secret**，请输入 ***your-azure-redshift-application-client-secret***。仅用于 Microsoft Azure AD。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端密钥。这仅适用于 com.amazon.redshift.plugin.AzureCredentialsProvider 插件。
     + 对于 **client\$1id**，请输入 ***your-azure-redshift-application-client-id***。仅用于 Microsoft Azure AD。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端 ID（带连字符）。

     对于具有 MFA 的 Azure AD 单点登录配置，请在连接属性中添加附加信息，如下所示：
     + 对于 **plugin\$1name**，请输入 **com.amazon.redshift.plugin.BrowserAzureCredentialsProvider**。此值指定驱动程序将具有 MFA 的 Azure 单点登录作为身份验证方法。
     + 对于 **idp\$1tenant**，请输入 ***your-idp-tenant***。仅用于 Microsoft Azure AD。这是在 Azure AD 上为您的公司配置的租户名称。此值可以是租户名或带连字符的租户唯一 ID。
     + 对于 **client\$1id**，请输入 ***your-azure-redshift-application-client-id***。此选项仅用于 Microsoft Azure AD。这是您在设置具有 MFA 的 Azure AD 单点登录配置时创建的 Amazon Redshift 应用程序的客户端 ID（带连字符）。
     + 对于**侦听端口**，请输入 ***your-listen-port***。这是本地服务器正在侦听的端口。默认值为 7890。
     + 对于 **idp\$1response\$1timeout**，请输入 ***the-number-of-seconds***。这是 IdP 服务器发回响应时超时之前等待的秒数。最小秒数必须为 10。如果建立连接的用时长于此阈值，则连接将被中止。

------
#### [ ODBC ]

**设置 ODBC 以在 Microsoft Azure AD 中进行身份验证**
+ 将数据库客户端配置为通过 ODBC 连接（使用 Azure AD 单点登录）到集群。

  Amazon Redshift 提供了适用于 Linux、Windows 和 macOS 操作系统的 ODBC 驱动程序。在安装 ODBC 驱动程序之前，请确定您的 SQL 客户端工具是 32 位还是 64 位。安装符合 SQL 客户端工具要求的 ODBC 驱动程序。

  在 Windows 上的 **Amazon Redshift ODBC 驱动程序 DSN 安装**页的**连接设置**下，输入以下信息：
  + 对于**数据源名称**，输入 ***your-DSN***。这将指定用作 ODBC 配置文件名称的数据源名称。
  + 对于 Azure AD 单点登录配置的**身份验证类型**，请选择 **Identity Provider: Azure AD**。这是 ODBC 驱动程序在通过 Azure 单点登录进行身份验证时使用的验证方法。
  + 对于具有 MFA 的 Azure AD 单点登录配置的**身份验证类型**，请选择 **Identity Provider: Browser Azure AD**。这是 ODBC 驱动程序在通过 Azure 单点登录（采用 MFA）进行身份验证时使用的验证方法。
  + 对于**集群 ID**，请输入 ***your-cluster-identifier***。
  + 对于**区域**，请输入 ***your-cluster-region***。
  + 对于**数据库**，请输入 ***your-database-name***。
  + 对于**用户**，请输入 ***your-azure-username***。这是您用于单点登录的 Microsoft Azure 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。请仅将其用于**身份验证类型** 为**身份提供者: Azure AD** 的情况。
  + 对于**密码**，请输入 ***your-azure-password***。请仅将其用于 **Auth Type (身份验证类型)** 为 **Identity Provider: Azure AD (身份提供者: Azure AD)** 的情况。
  + 对于 **IdP 租户**，请输入 ***your-idp-tenant***。这是在 IdP (Azure) 上配置的公司的租户名称。此值可以是租户名或带连字符的租户唯一 ID。
  + 对于 **Azure 客户端密钥**，请输入 ***your-azure-redshift-application-client-secret***。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端密钥。
  + 对于 **Azure 客户端 ID**，请输入 ***your-azure-redshift-application-client-id***。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端 ID（带连字符）。
  + 对于**侦听端口**，请输入 ***your-listen-port***。这是本地服务器正在侦听的默认侦听端口。默认值为 7890。这仅适用于浏览器 Azure AD 插件。
  + 对于**响应超时**，请输入 ***the-number-of-seconds***。这是 IdP 服务器发回响应时超时之前等待的秒数。最小秒数必须为 10。如果建立连接的用时长于此阈值，则连接将被中止。该选项仅适用于浏览器 Azure AD 插件。

  在 macOS 和 Linux 上，按如下方式编辑 `odbc.ini` 文件：
**注意**  
所有条目不区分大小写。
  + 对于 **clusterid**，请输入 ***your-cluster-identifier***。这是已创建的 Amazon Redshift 集群的名称。
  + 对于**区域**，请输入 ***your-cluster-region***。这是已创建的 Amazon Redshift 集群的 AWS 区域。
  + 对于**数据库**，请输入 ***your-database-name***。这是您尝试在 Amazon Redshift 集群上访问的数据库的名称。
  + 对于**区域设置**，请输入 **en-us**。这是显示错误消息的语言。
  + 对于 **iam**，请输入 **1**。此值指定要使用 IAM 凭证进行身份验证的驱动程序。
  + 对于 Azure AD 单点登录配置的 **plugin\$1name**，请输入 **AzureAD**。这指定驱动程序使用 Azure 单点登录作为身份验证方法。
  + 对于具有 MFA 的 Azure AD 单点登录配置的 **plugin\$1name**，请输入 **BrowserAzureAD**。这指定驱动程序将 Azure 单点登录（采用 MFA）作为身份验证方法。
  + 对于 **uid**，请输入 ***your-azure-username***。这是您用于单点登录的 Microsoft Azure 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。请仅将其用于 **plugin\$1name** 为 **AzureAD** 的情况。
  + 对于**密码**，请输入 ***your-azure-password***。请仅将其用于 **plugin\$1name** 为 **AzureAD** 的情况。
  + 对于 **idp\$1tenant**，请输入 ***your-idp-tenant***。这是在 IdP (Azure) 上配置的公司的租户名称。此值可以是租户名或带连字符的租户唯一 ID。
  + 对于 **client\$1secret**，请输入 ***your-azure-redshift-application-client-secret***。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端密钥。
  + 对于 **client\$1id**，请输入 ***your-azure-redshift-application-client-id***。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端 ID（带连字符）。
  + 对于**侦听端口**，请输入 ***your-listen-port***。这是本地服务器正在侦听的端口。默认值为 7890。这适用于浏览器 Azure AD 插件。
  + 对于 **idp\$1response\$1timeout**，请输入 ***the-number-of-seconds***。这是等待 Azure 响应的指定时间段（以秒为单位）。此选项适用于浏览器 Azure AD 插件。

  在 macOS 和 Linux 上，还要编辑配置文件设置以添加以下导出。

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

## 问题排查


要解决浏览器 Azure AD 插件的问题，请考虑以下几点。
+ 要使用浏览器 Azure AD 插件，在请求中指定的回复 URL 必须与为应用程序配置的回复 URL 一致。导航到 Microsoft Azure 门户上的**使用 SAML 设置单点登录**页面。然后检查**回复 URL** 是否已设置为 http://localhost/redshift/。
+ 如果收到 IdP 租户错误，请验证 **IdP 租户**名称是否与最初在 Microsoft Azure 中设置 Active Directory 时所用的域名匹配。

  在 Windows 上，导航到 **Amazon Redshift ODBC DSN 设置**页面的**连接设置**部分。然后检查在 IdP (Azure) 上配置的公司租户名称是否与最初在 Microsoft Azure 中设置 Active Directory 时所用的域名匹配。

  在 macOS 和 Linux 上，找到 *odbc.ini* 文件。然后检查在 IdP (Azure) 上配置的公司租户名称是否与最初在 Microsoft Azure 中设置 Active Directory 时所用的域名匹配。
+ 如果收到请求中指定的回复 URL 与为应用程序配置的回复 URL 不一致的错误，请验证**重定向 URI** 是否与回复 URL 相同。

  在 Microsoft Azure 门户上，导航到您的应用程序的**应用程序注册**页面。然后检查重定向 URI 是否与回复 URL 一致。
+ 如果收到“未经授权错误”意外响应，请验证是否已完成**移动和桌面应用程序**配置。

  在 Microsoft Azure 门户上，导航到您的应用程序的**应用程序注册**页面。然后导航到**身份验证**，检查是否已将**移动和桌面应用程序**配置为使用 http://localhost/redshift/ 作为重定向 URI。

# Ping Identity


您可以将 Ping Identity 作为身份提供者 (IdP) 以访问 Amazon Redshift 集群。本教程将向您展示如何将 Ping Identity 用作身份提供者（IdP）来访问 Amazon Redshift 集群。

## 第 1 步：设置 Ping Identity 和您的 AWS 账户相互信任


以下过程介绍如何使用 PingOne 门户建立信任关系。

**将 Ping 身份和您的 AWS 账户设置为相互信任**

1. 创建或使用现有的 Amazon Redshift 集群，以使 Ping 身份用户连接到该集群。要配置连接，需要此集群的某些属性，例如集群标识符。有关更多信息，请参阅[创建集群](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

1. 在 PingOne 门户上添加 Amazon Redshift 以作为新的 SAML 应用程序。有关详细步骤，请参阅 [Ping Identity 文档](https://docs.pingidentity.com/)。

   1. 转到**我的应用程序**。

   1. 在**添加应用程序**下面，选择**新建 SAML 应用程序**。

   1. 对于**应用程序名称**，请输入 **Amazon Redshift**。

   1. 对于**协议版本**，请选择 **SAML v2.0**。

   1. 对于**类别**，请选择 ***your-application-category***。

   1. 对于**断言消费者服务(ACS)**，请键入 ***your-redshift-local-host-url***。这是 SAML 断言重定向到的本地主机和端口。

   1. 对于**实体 ID**，请输入 `urn:amazon:webservices`。

   1. 对于**签名**，请选择**签名断言**。

   1. 在 **SSO 属性映射**部分中，创建声明，如下表中所示。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/setup-identity-provider-ping.html)

1. 对于**组访问权限**，请设置以下组访问权限（如果需要）：
   + **https://aws.amazon.com/SAML/Attributes/Role**
   + **https://aws.amazon.com/SAML/Attributes/RoleSessionName**
   + **https://redshift.amazon.com/SAML/Attributes/AutoCreate**
   + **https://redshift.amazon.com/SAML/Attributes/DbUser**

1. 查看设置，并在必要时进行更改。

1. 将**启动单点登录(SSO) URL** 作为浏览器 SAML 插件的登录 URL。

1. 在 IAM 控制台上创建 IAM SAML 身份提供者。您提供的元数据文档是您在设置 Ping Identity 时保存的联合元数据 XML 文件。有关详细步骤，请参阅 *IAM 用户指南*中的[创建和管理 IAM 身份提供者（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 控制台上为 SAML 2.0 联合身份创建 IAM 角色。有关详细步骤，请参阅 *IAM 用户指南*中的[创建用于 SAML 的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 创建一个 IAM 策略，您可以将其附加到您在 IAM 控制台上为 SAML 2.0 联合身份验证创建的 IAM 角色。有关详细步骤，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。有关 Azure AD 示例，请参阅[设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。

## 第 2 步：设置 JDBC 或 ODBC，以便向 Ping Identity 进行身份验证


------
#### [ JDBC ]

**设置 JDBC 以在 Ping Identity 中进行身份验证**
+ 配置数据库客户端以使用 Ping Identity 单点登录通过 JDBC 连接到集群。

  您可以使用任何采用 JDBC 驱动程序的客户端通过 Ping Identity 单点登录进行连接，也可以使用像 Java 这样的语言通过脚本进行连接。有关安装和配置信息，请参阅[为 Amazon Redshift 配置 JDBC 驱动程序版本 2.x 连接](jdbc20-install.md)。

  例如，您可以使用 SQLWorkbench/J 作为客户端。当您配置 SQLWorkbench/J 时，数据库的 URL 使用以下格式。

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  如果您使用 SQLWorkbench/J 作为客户端，请执行以下步骤：

  1. 启动 SQL Workbench/J。在**选择连接配置文件**页面中，添加一个**配置文件组**，例如，**Ping**。

  1. 对于**连接配置文件**，请输入 ***your-connection-profile-name***，例如，**Ping**。

  1. 选择**管理驱动程序**，然后选择 **Amazon Redshift**。选择**库**旁边的**打开文件夹**图标，然后选择适当的 JDBC .jar 文件。

  1. 在**选择连接配置文件**页面上，向连接配置文件添加信息，如下所示：
     + 对于**用户**，请输入您的 PingOne 用户名。这是您用于单点登录的 PingOne 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。
     + 对于**密码**，请输入您的 PingOne 密码。
     + 对于**驱动程序**，请选择 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 对于 **URL**，请输入 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***。

  1. 选择**扩展属性**并执行以下操作之一：
     + 对于 **login\$1url**，请输入 ***your-ping-sso-login-url***。该值指定 URL 将单点登录用作登录时的身份验证方法。
     + 对于 Ping Identity，请为 **plugin\$1name** 输入 **com.amazon.redshift.plugin.PingCredentialsProvider**。此值指定驱动程序使用 Ping Identity 单点登录作为身份验证方法。
     + 对于具有单点登录的 Ping Identity，请为 **plugin\$1name** 输入 **com.amazon.redshift.plugin.BrowserSamlCredentialsProvider**。该值指定驱动程序将具有单点登录的 Ping Identity PingOne 用作身份验证方法。

------
#### [ ODBC ]

**设置 ODBC 以在 Ping Identity 中进行身份验证**
+ 配置数据库客户端以使用 Ping Identity PingOne 单点登录通过 ODBC 连接到集群。

  Amazon Redshift 提供了适用于 Linux、Windows 和 macOS 操作系统的 ODBC 驱动程序。在安装 ODBC 驱动程序之前，请确定您的 SQL 客户端工具是 32 位还是 64 位。安装符合 SQL 客户端工具要求的 ODBC 驱动程序。

  在 Windows 上的 **Amazon Redshift ODBC 驱动程序 DSN 安装**页的**连接设置**下，输入以下信息：
  + 对于**数据源名称**，输入 ***your-DSN***。这将指定用作 ODBC 配置文件名称的数据源名称。
  + 对于**身份验证类型**，请执行以下操作之一：
    + 对于 Ping Identity 配置，请选择**身份提供者：Ping Federate**。这是 ODBC 驱动程序在通过 Ping Identity 单点登录进行身份验证时使用的身份验证方法。
    + 对于具有单点登录的 Ping Identity 配置，请选择**身份提供者：浏览器 SAML**。这是 ODBC 驱动程序在使用具有单点登录的 Ping Identity 进行身份验证时使用的身份验证方法。
  + 对于**集群 ID**，请输入 ***your-cluster-identifier***。
  + 对于**区域**，请输入 ***your-cluster-region***。
  + 对于**数据库**，请输入 ***your-database-name***。
  + 对于**用户**，请输入 ***your-ping-username***。这是您用于单点登录的 PingOne 账户的用户名，该账户有权访问您在尝试进行身份验证时使用的集群。请仅将其用于**身份验证类型**为**身份提供者: PingFederate**的情况。
  + 对于**密码**，请输入 ***your-ping-password***。请仅将其用于 **Auth type (身份验证类型)** 为 **Identity Provider: PingFederate (身份提供者: PingFederate)** 的情况。
  + 对于**侦听端口**，请输入 ***your-listen-port***。这是本地服务器正在侦听的端口。默认值为 7890。这仅适用于浏览器 SAML 插件。
  +  对于**响应超时**，请输入 ***the-number-of-seconds***。这是 IdP 服务器发回响应时超时之前等待的秒数。最小秒数必须为 10。如果建立连接的用时长于此阈值，则连接将被中止。这仅适用于浏览器 SAML 插件。
  + 对于**登录 URL**，请输入 ***your-login-url***。这仅适用于浏览器 SAML 插件。

  在 macOS 和 Linux 上，按如下方式编辑 `odbc.ini` 文件：
**注意**  
所有条目不区分大小写。
  + 对于 **clusterid**，请输入 ***your-cluster-identifier***。这是已创建的 Amazon Redshift 集群的名称。
  + 对于**区域**，请输入 ***your-cluster-region***。这是已创建的 Amazon Redshift 集群的 AWS 区域。
  + 对于**数据库**，请输入 ***your-database-name***。这是您尝试在 Amazon Redshift 集群上访问的数据库的名称。
  + 对于**区域设置**，请输入 **en-us**。这是显示错误消息的语言。
  + 对于 **iam**，请输入 **1**。此值指定要使用 IAM 凭证进行身份验证的驱动程序。
  + 对于 **plugin\$1name**，请执行以下操作之一：
    + 对于 Ping Identity 配置，请输入 **BrowserSAML**。这是 ODBC 驱动程序在使用 Ping Identity 进行身份验证时所采用的身份验证方法。
    + 对于具有单点登录的 Ping Identity 配置，请输入 **Ping**。这是 ODBC 驱动程序在使用具有单点登录的 Ping Identity 进行身份验证时使用的身份验证方法。
  + 对于 **uid**，请输入 ***your-ping-username***。这是您用于单点登录的 Microsoft Azure 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。请仅将其用于 **plugin\$1name** 为 **Ping** 的情况。
  + 对于**密码**，请输入 ***your-ping-password***。请仅将其用于 **plugin\$1name** 为 **Ping** 的情况。
  + 对于 **login\$1url**，请输入 ***your-login-url***。这是返回 SAML 响应的启动单点登录 URL。这仅适用于浏览器 SAML 插件。
  + 对于 **idp\$1response\$1timeout**，请输入 ***the-number-of-seconds***。这是等待 PingOne Identity 响应的指定时间段（以秒为单位）。这仅适用于浏览器 SAML 插件。
  + 对于**侦听端口**，请输入 ***your-listen-port***。这是本地服务器正在侦听的端口。默认值为 7890。这仅适用于浏览器 SAML 插件。

  在 macOS 和 Linux 上，还要编辑配置文件设置以添加以下导出。

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

# Okta


您可以将 Okta 作为身份提供者 (IdP) 以访问 Amazon Redshift 集群。本教程将向您展示如何将 Okta 用作身份提供者（IdP）来访问 Amazon Redshift 集群。

## 第 1 步：设置 Okta 和您的 AWS 账户相互信任


以下过程介绍如何建立信任关系。

**将 Okta 和您的 AWS 账户设置为相互信任**

1. 创建或使用现有的 Amazon Redshift 集群，以使 Okta 用户连接到该集群。要配置连接，需要此集群的某些属性，例如集群标识符。有关更多信息，请参阅[创建集群](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

1. 在 Okta 门户上添加 Amazon Redshift 以作为新应用程序。有关详细步骤，请参阅 [Okta 文档](https://developer.okta.com/docs/)。
   + 选择**添加应用程序**。
   + 在**添加应用程序**下面，选择**创建新的应用程序**。
   + 在**创建新添加应用程序集成**页面上，为**平台** 选择 **Web**。
   + 对于**登录方法**，请选择 **SAML v2.0**。
   + 在**常规设置**页面上，为**应用程序名称** 输入 ***your-redshift-saml-sso-name***。这是您的应用程序的名称。
   + 在 **SAML 设置**页面上，为**单点登录 URL** 输入 ***your-redshift-local-host-url***。这是 SAML 断言重定向到的本地主机和端口，例如 `http://localhost:7890/redshift/`。

1. 将**单点登录 URL** 作为**收件人 URL** 和**目标 URL**。

1. 对于**签名**，请选择**签名断言**。

1. 对于**受众 URI (SP 实体 ID)**，为声明输入 **urn:amazon:webservices**，如下表中所示。

1.  在**高级设置**部分中，为 **SAML 颁发者 ID** 输入 ***your-Identity-Provider-Issuer-ID***，您可以在**查看设置说明**部分中找到该 ID。

1. 在**属性语句**部分中，创建声明，如下表中所示。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/setup-identity-provider-okta.html)

1. 在**应用程序嵌入式链接**部分中，找到可用作浏览器 SAML 插件登录 URL 的 URL。

1. 在 IAM 控制台上创建 IAM SAML 身份提供者。您提供的元数据文档是您在设置 Okta 时保存的联合元数据 XML 文件。有关详细步骤，请参阅 *IAM 用户指南*中的[创建和管理 IAM 身份提供者（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 控制台上为 SAML 2.0 联合身份创建 IAM 角色。有关详细步骤，请参阅 *IAM 用户指南*中的[创建用于 SAML 的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 创建一个 IAM 策略，您可以将其附加到您在 IAM 控制台上为 SAML 2.0 联合身份验证创建的 IAM 角色。有关详细步骤，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。有关 Azure AD 示例，请参阅[设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。

## 第 2 步：设置 JDBC 或 ODBC，以便向 Okta 进行身份验证


------
#### [ JDBC ]

**设置 JDBC 以在 Okta 中进行身份验证**
+ 将数据库客户端配置为通过 JDBC 并使用 Okta 单点登录连接到集群。

  您可以使用任何采用 JDBC 驱动程序的客户端通过 Okta 单点登录进行连接，也可以使用像 Java 这样的语言通过脚本进行连接。有关安装和配置信息，请参阅[为 Amazon Redshift 配置 JDBC 驱动程序版本 2.x 连接](jdbc20-install.md)。

  例如，您可以使用 SQLWorkbench/J 作为客户端。当您配置 SQLWorkbench/J 时，数据库的 URL 使用以下格式。

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  如果您使用 SQLWorkbench/J 作为客户端，请执行以下步骤：

  1. 启动 SQL Workbench/J。在**选择连接配置文件**页面中，添加一个**配置文件组**，例如，**Okta**。

  1. 对于**连接配置文件**，请输入 ***your-connection-profile-name***，例如，**Okta**。

  1. 选择**管理驱动程序**，然后选择 **Amazon Redshift**。选择**库**旁边的**打开文件夹**图标，然后选择适当的 JDBC .jar 文件。

  1. 在**选择连接配置文件**页面上，向连接配置文件添加信息，如下所示：
     + 对于**用户**，请输入您的 Okta 用户名。这是您用于单点登录的 Okta 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。
     + 对于**密码**，请输入您的 Okta 密码。
     + 对于**驱动程序**，请选择 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 对于 **URL**，请输入 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***。

  1. 选择**扩展属性**并执行以下操作之一：
     + 对于 **login\$1url**，请输入 ***your-okta-sso-login-url***。该值指定 URL 将单点登录作为身份验证方法以登录到 Okta。
     + 对于 Okta 单点登录，请为 **plugin\$1name** 输入 **com.amazon.redshift.plugin.OktaCredentialsProvider**。此值指定驱动程序使用 Okta 单点登录作为身份验证方法。
     + 对于具有 MFA 的 Okta 单点登录，请为 **plugin\$1name** 输入 **com.amazon.redshift.plugin.BrowserSamlCredentialsProvider**。此值指定驱动程序将具有 MFA 的 Okta 单点登录作为身份验证方法。

------
#### [ ODBC ]

**设置 ODBC 以在 Okta 中进行身份验证**
+ 将数据库客户端配置为通过 ODBC 并使用 Okta 单点登录连接到集群。

  Amazon Redshift 提供了适用于 Linux、Windows 和 macOS 操作系统的 ODBC 驱动程序。在安装 ODBC 驱动程序之前，请确定您的 SQL 客户端工具是 32 位还是 64 位。安装符合 SQL 客户端工具要求的 ODBC 驱动程序。

  在 Windows 上的 **Amazon Redshift ODBC 驱动程序 DSN 安装**页的**连接设置**下，输入以下信息：
  + 对于**数据源名称**，输入 ***your-DSN***。这将指定用作 ODBC 配置文件名称的数据源名称。
  + 对于**身份验证类型**，请执行以下操作之一：
    + 对于 Okta 单点登录配置，请选择 **Identity Provider: Okta**。这是 ODBC 驱动程序在通过 Okta 单点登录进行身份验证时使用的身份验证方法。
    + 对于具有 MFA 的 Okta 单点登录配置，请选择 **Identity Provider: Browser SAML**。这是 ODBC 驱动程序在通过具有 MFA 的 Okta 单点登录进行身份验证时使用的身份验证方法。
  + 对于**集群 ID**，请输入 ***your-cluster-identifier***。
  + 对于**区域**，请输入 ***your-cluster-region***。
  + 对于**数据库**，请输入 ***your-database-name***。
  + 对于**用户**，请输入 ***your-okta-username***。这是您用于单点登录的 Okta 账户的用户名，该账户有权访问您在尝试进行身份验证时使用的集群。请仅将其用于**身份验证类型**为**身份提供者: Okta** 的情况。
  + 对于**密码**，请输入 ***your-okta-password***。请仅将其用于 **Auth type (身份验证类型)** 为 **Identity Provider: Okta (身份提供者: Okta)** 的情况。

  在 macOS 和 Linux 上，按如下方式编辑 `odbc.ini` 文件：
**注意**  
所有条目不区分大小写。
  + 对于 **clusterid**，请输入 ***your-cluster-identifier***。这是已创建的 Amazon Redshift 集群的名称。
  + 对于**区域**，请输入 ***your-cluster-region***。这是已创建的 Amazon Redshift 集群的 AWS 区域。
  + 对于**数据库**，请输入 ***your-database-name***。这是您尝试在 Amazon Redshift 集群上访问的数据库的名称。
  + 对于**区域设置**，请输入 **en-us**。这是显示错误消息的语言。
  + 对于 **iam**，请输入 **1**。此值指定要使用 IAM 凭证进行身份验证的驱动程序。
  + 对于 **plugin\$1name**，请执行以下操作之一：
    + 对于具有 MFA 的 Okta 单点登录配置，请输入 **BrowserSAML**。这是 ODBC 驱动程序在通过具有 MFA 的 Okta 单点登录进行身份验证时使用的身份验证方法。
    + 对于 Okta 单点登录配置，请输入 **Okta**。这是 ODBC 驱动程序在通过 Okta 单点登录进行身份验证时使用的身份验证方法。
  + 对于 **uid**，请输入 ***your-okta-username***。这是您用于单点登录的 Okta 账户的用户名，该账户有权访问您在尝试进行身份验证时使用的集群。请仅将其用于 **plugin\$1name** 为 **Okta** 的情况。
  + 对于**密码**，请输入 ***your-okta-password***。请仅将其用于 **plugin\$1name** 为 **Okta** 的情况。
  + 对于 **login\$1url**，请输入 ***your-login-url***。这是返回 SAML 响应的启动单点登录 URL。这仅适用于浏览器 SAML 插件。
  + 对于 **idp\$1response\$1timeout**，请输入 ***the-number-of-seconds***。这是等待 PingOne 响应的指定时间段（以秒为单位）。这仅适用于浏览器 SAML 插件。
  + 对于**侦听端口**，请输入 ***your-listen-port***。这是本地服务器正在侦听的端口。默认值为 7890。这仅适用于浏览器 SAML 插件。

  在 macOS 和 Linux 上，还要编辑配置文件设置以添加以下导出。

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

# 授权 Amazon Redshift 代表您访问 AWS 服务
授权访问 AWS 服务

某些 Amazon Redshift 功能要求 Amazon Redshift 代表您访问其他 AWS 服务。例如，[COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html) 和 [UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html) 命令可使用 Simple Storage Service（Amazon S3）存储桶将数据加载或卸载到您的 Amazon Redshift 集群中。[CREATE EXTERNAL FUNCTION](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html) 命令可以使用标量 Lambda 用户定义的函数 (UDF) 调用 AWS Lambda 函数。Amazon Redshift Spectrum 可以在 Amazon Athena 或 AWS Glue 中使用数据目录。要让您的 Amazon Redshift 集群代表您执行操作，请为这些集群提供安全凭证。提供安全凭证的首选方法是指定一个 AWS Identity and Access Management (IAM) 角色。对于 COPY 和 UNLOAD，您可以提供临时凭证。

如果用户需要在 AWS 管理控制台之外与 AWS 交互，则需要编程式访问权限。授予编程式访问权限的方法取决于访问 AWS 的用户类型。

要向用户授予编程式访问权限，请选择以下选项之一。


****  

| 哪个用户需要编程式访问权限？ | 目的 | 方式 | 
| --- | --- | --- | 
| IAM | （推荐）使用控制台凭证作为临时凭证来签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/authorizing-redshift-service.html)  | 
|  人力身份 （在 IAM Identity Center 中管理的用户）  | 使用临时凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/authorizing-redshift-service.html)  | 
| IAM | 使用临时凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 | 按照《IAM 用户指南》中[将临时凭证用于 AWS 资源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)中的说明进行操作。 | 
| IAM | （不推荐使用）使用长期凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/authorizing-redshift-service.html)  | 

接下来，了解如何创建具有访问其他 AWS 服务的适当权限的 IAM 角色。当您执行 Amazon Redshift 命令时，还需要将该角色与您的集群关联并指定角色的 Amazon Resource Name (ARN)。有关更多信息，请参阅 [使用 IAM 角色授权 COPY、UNLOAD、CREATE EXTERNAL FUNCTION 和 CREATE EXTERNAL SCHEMA 操作使用 IAM 角色授权执行操作](copy-unload-iam-role.md)。

此外，超级用户还可以向特定用户和组授予 ASSUMEROLE 权限，以便为 COPY 和 UNLOAD 操作提供对角色的访问权限。有关更多信息，请参阅 *Amazon Redshift 数据库开发人员指南*中的 [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)。

## 创建 IAM 角色以允许 Amazon Redshift 集群访问 AWS 服务


## 创建具有权限的 IAM 角色


要创建 IAM 角色以允许您的 Amazon Redshift 集群代表您与其他 AWS 服务通信，请执行以下步骤。本节中使用的值是示例，您可以根据需要选择值。<a name="create-iam-role-for-aws-services"></a>

**要创建 IAM 角色以允许 Amazon Redshift 访问 AWS 服务**

1. 打开 [IAM 控制台](https://console.aws.amazon.com/iam/home?#home)。

1. 在导航窗格中，选择**角色**。

1. 选择 **Create role**（创建角色）。

1. 选择 **AWS 服务**，然后选择 **Redshift**。

1. 在 **Select your use case** 下，选择 **Redshift - Customizable**，然后选择 **Next: Permissions**。此时显示 **Attach permissions policy** 页面。

1. 对于使用 COPY 访问 Simple Storage Service（Amazon S3），作为示例，您可以使用 **AmazonS3ReadOnlyAccess** 并附加。要使用 COPY 或 UNLOAD 访问 Simple Storage Service（Amazon S3），我们建议您创建托管式策略，以相应地限制对所需存储桶和前缀的访问。对于读取和写入操作，我们建议强制执行最低权限，并仅限于 Amazon Redshift 要求的 Simple Storage Service（Amazon S3）存储桶和键前缀。

   要想为 CREATE EXTERNAL FUNCTION 命令调用 Lambda 函数，请添加 **AWSLambdaRole**。

   对于 Redshift Spectrum，除 Simple Storage Service（Amazon S3）访问以外，添加 **AWSGlueConsoleFullAccess** 或 **AmazonAthenaFullAccess**。

   选择 **下一步：标签**。

1. 此时将显示**添加标签**页面。您可以选择性地添加标签。选择**下一步：审核**。

1. 对于**角色名称**，键入一个角色名称，例如 **RedshiftCopyUnload**。选择****创建角色****。

1. 使用新角色的集群中的所有用户都可使用该角色。如需限制访问，只允许特定集群中的特定用户、或特定区域中的集群访问，请编辑该角色的信任关系。有关更多信息，请参阅 [限制对 IAM 角色的访问](authorizing-redshift-service-database-users.md)。

1. 将角色与您的集群关联。您可以在创建集群时关联 IAM 角色，或将角色添加到现有集群中。有关更多信息，请参阅 [将 IAM 角色与集群相关联](copy-unload-iam-role-associating-with-clusters.md)。
**注意**  
要限制对特定数据的访问，请使用授予所需最少权限的 IAM 角色。

# 限制对 IAM 角色的访问


预设情况下，对 Amazon Redshift 集群可用的 IAM 角色对集群上的所有用户都可用。您可选择将 IAM 角色限制为特定集群上的特定 Amazon Redshift 数据库用户，或限制为特定区域。

要仅允许特定数据库用户使用 IAM 角色，请执行以下步骤。<a name="identify-db-users-for-iam-role"></a>

**标识对 IAM 角色具有访问权限的特定数据库用户**

1. 标识您的 Amazon Redshift 集群中的数据库用户的 Amazon Resource Name (ARN)。数据库用户的 ARN 采用以下格式：`arn:aws:redshift:region:account-id:dbuser:cluster-name/user-name`。

   对于 Amazon Redshift Serverless，请使用以下 ARN 格式：`arn:aws:redshift:region:account-id:dbuser:serverless-account-id-workgroup-id/user-name`。

1. 打开 [IAM 控制台](https://console.aws.amazon.com/iam/home?#home)。

1. 在导航窗格中，选择**角色**。

1. 选择要限制到特定 Amazon Redshift 数据库用户的 IAM 角色。

1. 选择 **Trust Relationships** 选项卡，然后选择 **Edit Trust Relationship**。允许 Amazon Redshift 代表您访问其他 AWS 服务的新 IAM 角色具有以下信任关系：

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "redshift.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 向信任关系的 `sts:AssumeRole` 操作部分添加一个条件以将 `sts:ExternalId` 字段限制为您指定的值。为您要授予对 IAM 角色的访问权限的每个数据库用户包含一个 ARN。外部 ID 可以是任何唯一的字符串。

   例如，以下信任关系指定只有区域 `user1` 中的集群 `user2` 上的数据库用户 `my-cluster` 和 `us-west-2` 有权使用此 IAM 角色。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
     {
       "Effect": "Allow",
       "Principal": { 
         "Service": "redshift.amazonaws.com" 
       },
       "Action": "sts:AssumeRole",
       "Condition": {
         "StringEquals": {
           "sts:ExternalId": [
             "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user1",
             "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user2"
           ]
         }
       }
     }]
   }
   ```

------

1. 选择 **Update Trust Policy**。

# 将 IAM 角色限制为某个 AWS 区域


您可将 IAM 角色限制为仅在某个特定 AWS 区域中可访问。预设情况下，Amazon Redshift 的 IAM 角色不会限制到任何单一区域。

要按区域限制对 IAM 角色的使用，请执行以下步骤。<a name="identify-regionsfor-iam-role"></a>

**为 IAM 角色标识允许的区域**

1. 通过以下网址打开 [IAM 控制台](https://console.aws.amazon.com/iam/home?#home)：[https://console.aws.amazon.com/](https://console.aws.amazon.com/)。

1. 在导航窗格中，选择 **Roles**（角色）。

1. 选择要用特定区域修改的角色。

1. 选择 **Trust Relationships (信任关系)** 选项卡，然后选择 **Edit Trust Relationship (编辑信任关系)**。允许 Amazon Redshift 代表您访问其他 AWS 服务的新 IAM 角色具有以下信任关系：

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "redshift.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 使用您要允许对其使用角色的特定区域的列表修改 `Service` 的 `Principal` 列表。`Service` 列表中的每个区域都必须采用以下格式：`redshift.region.amazonaws.com`。

   例如，以下编辑过的信任关系仅允许在 `us-east-1` 和 `us-west-2` 区域中使用 IAM 角色。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": [
             "redshift.us-east-1.amazonaws.com",
             "redshift.us-west-2.amazonaws.com"
           ]
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 选择 **Update Trust Policy**

# 在 Amazon Redshift 中串联 IAM 角色
串联 IAM 角色

当您将角色附加到集群时，集群可以代入该角色以您的名义访问 Simple Storage Service（Amazon S3）、Amazon Athena、AWS Glue 和 AWS Lambda。如果附加到集群的角色无法访问必要的资源，则可以串联到另一个角色 (可能属于其他账户)。然后，您的集群临时代入串联的角色来访问数据。您还可以通过串联角色来授予跨账户访问权限。链中的每个角色都会代入链中的下一个角色，直到集群承担位于链尾的角色。您可以关联的最大 IAM 角色数量受配额限制。有关更多信息，请参阅 [Amazon Redshift 对象的配额](amazon-redshift-limits.md#amazon-redshift-limits-quota)中的“Amazon Redshift 用于访问其他 AWS 服务的集群 IAM 角色”。

**注意**  
您必须指定 IAM 角色才能使链正常运行。

例如，假设公司 A 想要访问属于公司 B 的 Simple Storage Service（Amazon S3）存储桶中的数据。公司 A 为 Amazon Redshift 创建一个名为 `RoleA` 的 AWS 服务角色并将其附加到集群上。公司 B 创建一个名为 `RoleB` 的角色，该角色有权访问公司 B 存储桶中的数据。要访问公司 B 存储桶中的数据，公司 A 需要使用串联 `iam_role` 和 `RoleA` 的 `RoleB` 参数运行 COPY 命令。在 COPY 操作的持续时间内，`RoleA` 将临时代入 `RoleB` 以访问 Simple Storage Service（Amazon S3）存储桶。

要串联角色，您可以在角色之间建立信任关系。代入其他角色的角色 (例如，`RoleA`) 必须具有允许其代入下一个串联的角色 (例如，`RoleB`) 的权限策略。反过来，传递权限的角色 (`RoleB`) 必须具有允许其将权限传递给上一个串联的角色 (`RoleA`) 的信任策略。有关更多信息，请参阅 IAM 用户指南中的[使用 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)。

链中的第一个角色必须是附加到集群的角色。第一个角色以及代入链中下一个角色的每个后续角色都必须具有包含特定语句的策略。该语句对 `Allow`操作以及 `sts:AssumeRole ` 元素中的下一个角色的 Amazon Resource Name (ARN) 具有 `Resource` 效果。在我们的示例中，`RoleA` 具有允许其代入由 AWS 账户 `210987654321` 所有的 `RoleB` 的以下权限策略。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt1487639602000",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": "arn:aws:iam::111122223333:role/RoleB"        
       }
    ]
}
```

------

传递给其他角色的角色必须与代入该角色的角色或拥有该角色的 AWS 账户建立信任关系。在我们的示例中，`RoleB` 具有与 `RoleA` 建立信任关系的以下信任策略。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/RoleA"
      }
    }
  ]
}
```

------

以下信任策略与 `RoleA`、AWS 账户 `123456789012` 的拥有者建立信任关系。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      }
    }      
  ]
}
```

------

**注意**  
要将角色串联授权限制给特定用户，请定义条件。有关更多信息，请参阅 [限制对 IAM 角色的访问](authorizing-redshift-service-database-users.md)。

当您运行 UNLOAD、COPY、CREATE EXTERNAL FUNCTION 或 CREATE EXTERNAL SCHEMA 命令时，可以通过在 `iam_role` 参数中包括一个逗号分隔的角色 ARN 列表来串联角色。下面显示了在 `iam_role` 参数中串联角色的语法。

```
unload ('select * from venue limit 10') 
to 's3://acmedata/redshift/venue_pipe_'
IAM_ROLE 'arn:aws:iam::<aws-account-id-1>:role/<role-name-1>[,arn:aws:iam::<aws-account-id-2>:role/<role-name-2>][,...]';
```

**注意**  
整个角色链用单引号括起来，不能包含空格。

在以下示例中，`RoleA` 将附加到属于 AWS 账户 `123456789012` 的集群。属于账户 `210987654321` 的 `RoleB` 具有访问名为 `s3://companyb/redshift/` 的存储桶的权限。以下示例将 `RoleA` 和 `RoleB` 进行串联以将数据卸载到 s3://companyb/redshift/ 存储桶。

```
unload ('select * from venue limit 10') 
to 's3://companyb/redshift/venue_pipe_'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

以下示例使用 COPY 命令加载已在上一个示例中卸载的数据。

```
copy venue 
from 's3://companyb/redshift/venue_pipe_'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

在以下示例中，CREATE EXTERNAL SCHEMA 使用串联的角色代入角色 `RoleB`。

```
create external schema spectrumexample from data catalog 
database 'exampledb' region 'us-west-2' 
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

在以下示例中，CREATE EXTERNAL FUNCTION 使用串联的角色代入角色 `RoleB`。

```
create external function lambda_example(varchar)
returns varchar
volatile
lambda 'exampleLambdaFunction'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

# 使用 IAM 角色授权 COPY、UNLOAD、CREATE EXTERNAL FUNCTION 和 CREATE EXTERNAL SCHEMA 操作
使用 IAM 角色授权执行操作

您可使用 [COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html) 命令将数据加载（或导入）到 Amazon Redshift，使用 [UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html) 命令从 Amazon Redshift 卸载（或导出）数据。您可以使用 CREATE EXTERNAL FUNCTION 命令创建用户定义的函数，这些函数从 AWS Lambda 调用函数。

在使用 Amazon Redshift Spectrum 时，您要使用 [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) 命令来指定包含您的数据的 Simple Storage Service（Amazon S3）存储桶的位置。当您运行 COPY、UNLOAD 或 CREATE EXTERNAL SCHEMA 命令时，会提供安全凭证。这些凭证授权您的 Amazon Redshift 集群在目标目的地 [如 Simple Storage Service（Amazon S3）存储桶] 中读取或写入数据。

运行 CREATE EXTERNAL FUNCTION 时，您可以使用 IAM 角色参数提供安全凭证。这些凭证授权您的 Amazon Redshift 集群从 AWS Lambda 调用 Lambda 函数。提供安全凭证的首选方法是指定一个 AWS Identity and Access Management (IAM) 角色。对于 COPY 和 UNLOAD，您可以提供临时凭证。有关创建 IAM 角色的信息，请参阅[授权 Amazon Redshift 代表您访问 AWS 服务](authorizing-redshift-service.md)。

如果用户需要在 AWS 管理控制台之外与 AWS 交互，则需要编程式访问权限。授予编程式访问权限的方法取决于访问 AWS 的用户类型。

要向用户授予编程式访问权限，请选择以下选项之一。


****  

| 哪个用户需要编程式访问权限？ | 目的 | 方式 | 
| --- | --- | --- | 
| IAM | （推荐）使用控制台凭证作为临时凭证来签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/copy-unload-iam-role.html)  | 
|  人力身份 （在 IAM Identity Center 中管理的用户）  | 使用临时凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/copy-unload-iam-role.html)  | 
| IAM | 使用临时凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 | 按照《IAM 用户指南》中[将临时凭证用于 AWS 资源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)中的说明进行操作。 | 
| IAM | （不推荐使用）使用长期凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/copy-unload-iam-role.html)  | 

使用 IAM 角色的步骤如下所示：
+ 创建要与您的 Amazon Redshift 集群结合使用的 IAM 角色。
+ 将 IAM 角色与集群关联。
+ 在调用 COPY、UNLOAD、CREATE EXTERNAL SCHEMA 或 CREATE EXTERNAL FUNCTION 命令时包含 IAM 角色的 ARN。

# 将 IAM 角色与集群相关联


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

## 将 IAM 角色与集群关联所需的权限


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

## 管理 IAM 角色与集群的关联


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

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

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

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

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

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

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

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

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

您可以使用以下方法，通过 AWS 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` AWS 账户的 IAM 角色的关联。

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier "my-redshift-cluster" \
    --remove-iam-roles "arn:aws:iam::123456789012:role/RedshiftCopyUnload"
```

### 使用 AWS CLI 列出集群的 IAM 角色关联


要列出与 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"
                }
            ],
            ...
        }
    ]
}
```

有关使用 AWS CLI 的更多信息，请参阅 *[AWS CLI 用户指南](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)*。

# 创建一个 IAM 角色作为 Amazon Redshift 的默认角色
创建 IAM 角色作为默认角色

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

## 在控制台中创建的 IAM 角色


当您使用 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 托管式策略的权限


以下示例显示了 `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 角色


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

### 默认创建 IAM 角色


在控制台上，您可以为集群创建一个 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 角色


您可以从集群中移除一个或多个 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 角色与集群关联


您可以将一个或多个 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 角色设置为默认角色


您可以将 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 角色设置为不再是集群的默认角色


您可以使 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 角色


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

### 创建默认设置为 IAM 角色的 Amazon Redshift 集群


要创建 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 角色


要添加与集群关联的一个或多个 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 角色


要删除与集群关联的一个或多个 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 角色设置为集群的默认角色


要将关联的 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 角色设置为集群的默认角色


要将未关联的 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 角色设置为其默认角色


从快照还原集群时，您可以关联现有 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"
            }
        ],
        ...
    }
}
```

# 使用联合身份管理 Amazon Redshift 对本地资源和 Amazon Redshift Spectrum 外部表的访问权限
使用联合身份管理对本地资源和外部表的访问权限

将 AWS 中的身份联合验证和 `GetDatabaseCredentials` 提供的凭证结合使用，可以简化对本地数据和外部数据的授权和访问。在本教程中，我们将说明如何使用 AWS 身份联合验证（而不是使用特定 IAM 角色）提供对资源的访问权限。

目前，要向用户提供对驻留在 Amazon S3 中的外部数据的访问权限，您需要创建一个具有权限策略中定义的权限的 IAM 角色。之后，附加了此角色的用户便能访问外部数据。虽然这行得通，但如果您想提供粒度规则（例如，使特定列对特定用户不可用），则可能需要在外部架构上进行其他配置。

利用由 `GetDatabaseCredentials` 提供的凭证，身份联合验证可以使用更易于指定和更改的粒度 IAM 规则提供对 AWS Glue 和 Redshift Spectrum 资源的访问权限。这更易于应用符合您的业务规则的访问权限。

使用联合凭证的好处如下：
+ 您不必为 Redshift Spectrum 管理集群附加的 IAM 角色。
+ 集群管理员可以创建一个可供具有不同 IAM 上下文的使用者访问的外部架构。例如，这对于对表执行列筛选会很有用，在此情况下，其他使用者将查询同一外部架构并在返回的记录中获得不同的字段。
+ 您可以使用具有 IAM 权限的用户查询 Amazon Redshift，而不是仅使用角色。

## 准备身份以使用联合身份进行登录


在使用联合身份登录之前，您必须执行多个预备步骤。这些说明假定您目前有一个 Redshift Spectrum 外部架构，该架构引用了存储在 Amazon S3 存储桶中的数据文件，并且该存储桶与您的 Amazon Redshift 集群或 Amazon Redshift Serverless 数据仓库位于同一账户中。

1. 创建一个 IAM 身份。这可以是用户或 IAM 角色。使用 IAM 支持的任何名称。

1. 将权限策略附加到此身份。指定以下任一项：
   + `redshift:GetClusterCredentialsWithIAM`（适用于 Amazon Redshift 预调配集群）
   + `redshift-serverless:GetCredentials`（适用于 Amazon Redshift Serverless）

   您可以使用 IAM 控制台通过策略编辑器添加权限。

   IAM 身份还需要对外部数据的访问权限。通过直接添加以下 AWS 托管式策略，授予对 Amazon S3 的访问权限：
   + `AmazonS3ReadOnlyAccess`
   + `AWSGlueConsoleFullAccess`

    如果您使用 AWS Glue 准备外部数据，则需要最后一个托管式策略。有关授予对 Amazon Redshift Spectrum 的访问权限的步骤的更多信息，请参阅[为 Amazon Redshift 创建 IAM 角色](https://docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum-create-role.html)，它是 Amazon Redshift 和 Redshift Spectrum 入门指南的一部分。此部分介绍了添加 IAM 策略以访问 Redshift Spectrum 的步骤。

1. 设置 SQL 客户端以连接到 Amazon Redshift。使用 Amazon Redshift JDBC 驱动程序，并将用户的凭证添加到此工具的凭证属性中。像 SQL Workbench/J 这样的客户端非常适合执行此操作。设置以下客户端连接扩展属性：
   + *AccessKeyID* – 您的访问密钥标识符。
   + *SecretAccessKey* – 您的秘密访问密钥。（请注意，如果您不使用加密，则传输私有密钥会带来安全风险。） 
   + *SessionToken* – IAM 角色的一组临时凭证。
   + *groupFederation* – 如果要为预调配集群配置联合身份，则设置为 `true`。如果您使用的是 Amazon Redshift Serverless，请不要设置此参数。
   + *LogLevel* – 整数日志级别值。该项为可选项。

1. 将 URL 设置为在 Amazon Redshift 或 Amazon Redshift Serverless 控制台中找到的 JDBC 端点。将 URL 架构替换为 *jdbc:redshift:iam:* 并使用此格式：
   + 适用于 Amazon Redshift 预调配集群的格式：`jdbc:redshift:iam://<cluster_id>.<unique_suffix>.<region>.redshift.amazonaws.com:<port>/<database_name>`

     示例：`jdbc:redshift:iam://test1.12345abcdefg.us-east-1.redshift.amazonaws.com:5439/dev`
   + 适用于 Amazon Redshift Serverless 的格式：`jdbc:redshift:iam://<workgroup-name>.<account-number>.<aws-region>.redshift-serverless.amazonaws.com:5439:<port>/<database_name>`

     示例：`jdbc:redshift:iam://default.123456789012.us-east-1.redshift-serverless.amazonaws.com:5439/dev`

   在您首次使用 IAM 身份连接到数据库后，Amazon Redshift 会自动创建一个同名 Amazon Redshift 身份，其前缀为 `IAM:`（对于用户）或 `IAMR:`（对于 IAM 角色）。本主题中的剩余步骤展示了适用于用户的示例。

   如果未自动创建 Redshift 用户，您可以通过以下方式创建一个此类用户：运行 `CREATE USER` 语句、使用管理员账户并以格式 `IAM:<user name>` 指定用户名。

1.  作为 Amazon Redshift 集群管理员，向 Redshift 用户授予访问外部架构所需的权限。

   ```
   GRANT ALL ON SCHEMA my_schema to "IAM:my_user";
   ```

   要使 Redshift 用户能够在外部架构中创建表，他们必须是架构所有者。例如：

   ```
   ALTER SCHEMA my_schema owner to "IAM:my_user";
   ```

1. 要验证配置，请在授予权限后，使用 SQL 客户端以用户身份运行查询。此查询示例从外部表中检索数据。

   ```
   SELECT * FROM my_schema.my_table;
   ```

## 开始将身份和授权传播到 Redshift Spectrum


要传递联合身份以查询外部表，请将 `SESSION` 设置为 `CREATE EXTERNAL SCHEMA` 的 `IAM_ROLE` 查询参数的值。以下步骤说明如何设置和利用 `SESSION` 授予对外部架构的查询权限。

1. 创建本地表和外部表。使用 AWS Glue 编写目录的外部表适合此操作。

1. 使用 IAM 身份连接到 Amazon Redshift。如上一节中所述，在身份连接到 Amazon Redshift 时，将创建一个 Redshift 数据库用户。如果用户以前不存在，则将创建该用户。如果用户是新用户，则管理员必须向其授予在 Amazon Redshift 中执行任务（例如查询和创建表）的权限。

1. 使用管理员账户连接到 Redshift。运行该命令以使用 `SESSION` 值创建外部架构。

   ```
   create external schema spectrum_schema from data catalog
   database '<my_external_database>' 
   region '<my_region>'
   iam_role 'SESSION'
   catalog_id '<my_catalog_id>';
   ```

   请注意，在此示例中，将设置 `catalog_id`。这是随功能一起添加的新设置，因为 `SESSION` 替换了特定角色。

   在此示例中，查询中的值将模仿实际值的显示方式。

   ```
   create external schema spectrum_schema from data catalog
   database 'spectrum_db' 
   region 'us-east-1'
   iam_role 'SESSION'
   catalog_id '123456789012'
   ```

   在此情况下，`catalog_id` 值是您的 AWS 账户 ID。

1. 使用您在步骤 2 中连接的 IAM 身份运行查询以访问外部数据。例如：

   ```
   select * from spectrum_schema.table1;
   ```

   例如，在此情况下，`table1` 可以是 Amazon S3 存储桶中某个文件中的采用 JSON 格式的数据。

1. 如果您已有一个使用集群附加的 IAM 角色的外部架构并指向您的外部数据库或架构，则可以替换现有架构并使用联合身份（如这些步骤中所述），也可以创建一个新的架构。

`SESSION` 表示使用联合身份凭证用于查询外部架构。在使用 `SESSION` 查询参数时，请务必设置 `catalog_id`。由于它指向用于架构的数据目录，因此它是必需的。之前，`catalog_id` 是从分配给 `iam_role` 的值中检索的。当您通过此方式设置身份和授权传播时，例如，通过使用联合凭证查询外部架构来传播到 Redshift Spectrum 时，不需要通过 IAM 角色进行授权。

### 使用说明


常见的连接错误如下：*检索临时凭证时出现 IAM 错误：无法使用提供的解组器对异常响应进行解组*。此错误是由于使用旧版 JDBC 驱动程序造成的。联合身份所需的最低驱动程序版本为 2.1.0.9。您可以从[下载 Amazon Redshift JDBC 驱动程序版本 2.x](https://docs.aws.amazon.com/redshift/latest/mgmt/jdbc20-download-driver.html) 获取 JDBC 驱动程序。

### 其他资源


这些链接为管理外部数据的访问提供了额外信息。
+ 您仍可以使用 IAM 角色访问 Redshift Spectrum 数据。有关更多信息，请参阅 [授权 Amazon Redshift 代表您访问 AWS 服务](authorizing-redshift-service.md)。
+ 当您使用 AWS Lake Formation 管理对外部表的访问权限时，您可以使用具有联合 IAM 身份的 Redshift Spectrum 对其进行查询。您不再需要管理集群附加的 IAM 角色，Redshift Spectrum 可以查询向 AWS Lake Formation 注册的数据。有关更多信息，请参阅[将 AWS Lake Formation 与 Amazon Redshift Spectrum 结合使用](https://docs.aws.amazon.com/lake-formation/latest/dg/RSPC-lf.html)。

# 使用 AWS Secrets Manager 管理 Amazon Redshift 管理员密码
管理管理员密码

 Amazon Redshift 可以与 AWS Secrets Manager 集成，以便使用加密密钥来生成和管理您的管理员凭证。使用 AWS Secrets Manager，您可以将管理员密码替换为 API 调用，以便在需要时以编程方式检索密钥。使用密钥而不是硬编码凭证可以降低这些凭证被公开或泄漏的风险。有关 AWS Secrets Manager 的更多信息，请参阅《*AWS Secrets Manager 用户指南》。*[https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

在执行以下操作之一时，您可以使用 AWS Secrets Manager 来指定由 Amazon Redshift 管理您的管理员密码：
+ 创建预置集群或无服务器命名空间
+ 编辑、更新或修改预置集群或无服务器命名空间的管理员凭证
+ 从快照还原集群或无服务器命名空间

当您在 AWS Secrets Manager 中指定由 Amazon Redshift 来管理管理员密码时，Amazon Redshift 会生成密码并将其存储在 Secrets Manager 中。您可以直接在 AWS Secrets Manager 中访问密钥以检索管理员用户的凭证。（可选）如果您需要从其他 AWS 账户访问密钥，您可以指定客户管理的密钥来加密密钥。您也可以使用 AWS Secrets Manager 提供的 KMS 密钥。

Amazon Redshift 管理密钥的设置，默认情况下每 30 天轮换一次密钥。您可以随时手动轮换密钥。如果您删除管理 AWS Secrets Manager 中密钥的预置集群或无服务器命名空间，则该密钥及其关联的元数据也会被删除。

要使用密钥管理的凭证连接到集群或无服务器命名空间，您可以使用 Secrets Manager 控制台或 `GetSecretValue` Secrets Manager API 调用，从 AWS Secrets Manager 检索密钥。有关更多信息，请参阅《AWS Secrets Manager 用户指南》**中的[从 AWS Secrets Manager 中检索密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets.html)和[使用 AWS Secrets Manager 密钥中的凭证连接到 SQL 数据库](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_jdbc.html)。

## AWS Secrets Manager 集成所需的权限


用户必须拥有所需的权限才能执行与 AWS Secrets Manager 集成相关的操作。创建 IAM 策略，以便授予权限对所需的指定资源执行特定的 API 操作。然后，将这些策略附加到需要这些权限的 IAM 权限集或角色。有关更多信息，请参阅 [Amazon Redshift 中的 Identity and Access Management](redshift-iam-authentication-access-control.md)。

指定 Amazon Redshift 管理 AWS Secrets Manager 中管理员密码的用户必须具有执行以下操作的权限：
+ `secretsmanager:CreateSecret`
+ `secretsmanager:RotateSecret`
+ `secretsmanager:DescribeSecret`
+ `secretsmanager:UpdateSecret`
+ `secretsmanager:DeleteSecret`
+ `secretsmanager:GetRandomPassword`
+ `secretsmanager:TagResource`

如果用户想要为预置集群在 `MasterPasswordSecretKmsKeyId` 参数中传递 KMS 密钥，或者想要为无服务器命名空间在 `AdminPasswordSecretKmsKeyId` 参数中传递 KMS 密钥，则在上面列出的权限之外，他们还需要以下权限。
+ `kms:Decrypt`
+ `kms:GenerateDataKey`
+ `kms:CreateGrant`
+ `kms:RetireGrant`

## 管理员密码密钥轮换


默认情况下，Amazon Redshift 每 30 天自动轮换一次密钥，以确保您的凭证不会长时间保持不变。当 Amazon Redshift 轮换管理员密码密钥时，AWS Secrets Manager 会更新现有密钥以包含新的管理员密码。Amazon Redshift 更改集群的管理员密码，使其与更新后的密钥中的密码相匹配。

您可以立即轮换密钥，而不必等待使用 AWS Secrets Manager 的计划轮换。有关轮换密钥的更多信息，请参阅**《AWS Secrets Manager 用户指南》中的[轮换 AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_jdbc.html)。

## 将 AWS Secrets Manager 与 Amazon Redshift 配合使用时的注意事项


 使用 AWS Secrets Manager 管理您的预置集群或无服务器命名空间的管理员凭证时，请注意以下几点：
+  当您暂停某个集群而集群的管理员凭证由 AWS Secrets Manager 管理时，您集群的密钥不会被删除，并且系统将继续向您收取该密钥的费用。只有在您删除集群时才会删除密钥。
+  如果您的集群在 Amazon Redshift 尝试轮换其上附加的密钥时处于暂停状态，则轮换将失败。在这种情况下，Amazon Redshift 会停止自动轮换，即使在您恢复集群后也不会尝试再次轮换。您必须使用 `secretsmanager:RotateSecret` API 调用重新启动自动轮换计划，才能让 AWS Secrets Manager 继续自动轮换您的密钥。
+  如果在 Amazon Redshift 尝试轮换其上附加的密钥时，您的无服务器命名空间没有关联工作组，则轮换将失败并且不会尝试再次轮换，即使您关联了工作组也是如此。您必须使用 `secretsmanager:RotateSecret` API 调用重新启动自动轮换计划，才能让 AWS Secrets Manager 继续自动轮换您的密钥。

# 在 Amazon Redshift 中检索密钥的 Amazon 资源名称（ARN）
检索密钥的 ARN

您可以使用 Amazon Redshift 控制台，查看由 AWS Secrets Manager 管理的所有密钥的 Amazon 资源名称（ARN）。在拥有密钥的 ARN 时，您可以使用 AWS Secrets Manager 查看有关密钥的详细信息以及密钥中的加密数据。有关使用 ARN 检索密钥更多信息，请参阅《AWS Secrets Manager 用户指南》**中的[检索密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets.html)。

**查看有关 Amazon Redshift 预置集群的密钥的详细信息**  
使用 Amazon Redshift 控制台查看集群的密钥的 Amazon 资源名称（ARN），步骤如下：  

1. 登录 AWS 管理控制台 并打开 Amazon Redshift 控制台。

1. 在**集群概览**窗格中，选择要查看其密钥的集群。

1. 选择**属性**选项卡。

1. 查看**管理员凭证 ARN** 下密钥的 ARN。此 ARN 是密钥的标识符，您可以在 AWS Secrets Manager 中用它来查看密钥的详细信息。

**查看有关 Amazon Redshift Serverless 命名空间的密钥的详细信息**  
使用 Amazon Redshift 控制台查看无服务器命名空间的密钥的 Amazon 资源名称（ARN），步骤如下：  

1. 登录 AWS 管理控制台 并打开 Amazon Redshift 控制台。

1. 在**预置集群**控制面板中，选择页面右上角的**转到无服务器**。

1. 在**无服务器控制面板**中，滚动到**命名空间/工作组**窗格，然后选择要查看其密钥的命名空间。

1. 在**一般信息**窗格中，在**管理员凭证 ARN** 下查看密钥的 ARN。此 ARN 是密钥的标识符，您可以在 AWS Secrets Manager 中用它来查看密钥的详细信息。

# 为数据库连接凭证创建密钥


您可以创建 Secrets Manager 密钥来存储用于连接到 Amazon Redshift 预置集群或 Redshift Serverless 命名空间和工作组的凭证。在 Amazon Redshift 查询编辑器 v2 中计划查询时，也可以使用该密钥。

**使用 Secrets Manager 控制台为 Amazon Redshift 预调配集群中的数据库创建密钥**

1. 打开 Secrets Manager 控制台（[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)）。

1. 导航到**密钥**列表，然后选择**存储新密钥**。

1. 选择 **Amazon Redshift 数据仓库的凭证**。在创建密钥的步骤中输入您的信息，如下所示：
   + 在**用户名**的**凭证**中，输入数据仓库管理用户的名称。
   + 在**密码**的**凭证**中，输入**用户名**的密码。
   + 对于**加密密钥**，请选择您的加密密钥。
   + 对于**数据仓库**，请选择包含您的数据的 Amazon Redshift 预调配集群。
   + 对于**密钥名称**，输入密钥的名称。
   + 对于**描述**，请输入密钥的描述。
   + 对于**标签**，输入带有字词 **Redshift** 的**标签键**。当您尝试使用 Amazon Redshift 查询编辑器 v2 连接到数据仓库时，需要使用此标签键来列出密钥。该密钥的标签键必须以字符串 **Redshift** 开头，才能在管理控制台上的 AWS Secrets Manager 下列出该密钥。

1. 继续通过多个步骤输入有关密钥的信息，直到您在**审核**步骤中**存储**您所做的更改。

   您的凭证、引擎、主机、端口和集群标识符的特定值存储在密钥中。此外，该密钥还使用标签键 `Redshift` 进行标记。

**使用 Redshift Serverless 控制台为 Redshift Serverless 命名空间中的数据库创建密钥**

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

1. 选择 **Redshift Serverless** 并导航到**命名空间配置**。

1. 选择要为其创建密钥凭证的命名空间。

1. 打开**操作**、**编辑管理员凭证**。

1. 对于**管理员密码**，请选择**在 AWS Secrets Manager 中管理管理员凭证**。

1. 选择**保存更改**以保存您的更改。

确认出现一条消息，说明已成功更改密码。您也可以在 Secrets Manager 控制台中查看密钥。您可以使用该密钥，在 Redshift Serverless 控制台和 Amazon Redshift 查询编辑器 v2 中通过 AWS Secrets Manager 连接方法连接到工作组中的数据库。该密钥的标签键必须以字符串“Redshift”开头，才能在查询编辑器 v2 Web 应用程序中列出该密钥。该密钥的标签键必须以字符串 **Redshift** 开头，才能在管理控制台上的 AWS Secrets Manager 下列出该密钥。

**使用 Secrets Manager 控制台为 Redshift Serverless 命名空间中的数据库创建密钥**

1. 打开 Secrets Manager 控制台（[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)）。

1. 导航到**密钥**列表，然后选择**存储新密钥**。

1. 选择 **Amazon Redshift 数据仓库的凭证**。在创建密钥的步骤中输入您的信息，如下所示：
   + 在**用户名**的**凭证**中，输入数据仓库管理用户的名称。
   + 在**密码**的**凭证**中，输入**用户名**的密码。
   + 对于**加密密钥**，请选择您的加密密钥。
   + 对于**数据仓库**，请选择包含您的数据的 Redshift Serverless 命名空间。
   + 对于**密钥名称**，输入密钥的名称。
   + 对于**描述**，请输入密钥的描述。
   + 对于**标签**，输入带有字词 **Redshift** 的**标签键**。当您尝试使用 Amazon Redshift 查询编辑器 v2 连接到数据仓库时，需要使用此标签键来列出密钥。该密钥的标签键必须以字符串 **Redshift** 开头，才能在管理控制台上的 AWS Secrets Manager 下列出该密钥。

1. 继续通过多个步骤输入有关密钥的信息，直到您在**审核**步骤中**存储**您所做的更改。

   您的凭证、数据库名称、主机、端口、命名空间和引擎的特定值存储在密钥中。此外，该密钥还使用标签键 `Redshift` 进行标记。

**使用 AWS CLI 为 Redshift Serverless 命名空间中的数据库创建密钥**

您可以使用 AWS CLI 创建密钥。一种方法是使用 AWS CloudShell 来运行 Secrets Manager AWS CLI 命令，如下所示。您必须具有适当的权限才能运行 AWS CLI 命令，如以下过程所示。

1. 在 AWS 控制台上，打开 AWS CloudShell 命令提示符。有关 AWS CloudShell 的更多信息，请参阅《AWS CloudShell User Guide》**中的[What is AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)。

1. 例如，对于密钥 `MyTestSecret`，输入一条 Secrets Manager 命令，来存储用于连接数据库或计划 Amazon Redshift 查询编辑器 v2 查询的密钥。将命令中的以下值替换为环境的值：
   + *admin* 是数据仓库的管理员用户名。
   + *passw0rd* 是管理员的密码。
   + *dev* 是数据仓库中的初始数据库名称。
   + *region* 是包含数据仓库的 AWS 区域。例如 `us-east-1`。
   + *123456789012* 为 AWS 账户。
   + *namespace-id* 是类似于 `c3928f0e-c889-4d2b-97a5-5738324d5d3e` 的命名空间标识符。您可以在 Amazon Redshift 控制台中的无服务器命名空间详细信息页面上找到该标识符。

   ```
   aws secretsmanager create-secret \
   --name MyTestSecret \
   --description "My test secret created with the CLI." \
   --secret-string "{\"username\":\"admin\",\"password\":\"passw0rd\",\"dbname\":\"dev\",\"engine\":\"redshift\"}" \
   --tags "[{\"Key\":\"redshift-serverless:namespaceArn\",\"Value\":\"arn:aws:redshift-serverless:region:123456789012:namespace/namespace-id\"}]"
   ```

# Amazon Redshift 中的日志记录和监控
日志记录和监控

监控是保持 Amazon Redshift 和您的 AWS 解决方案的可靠性、可用性和性能的重要方面。您可以从 AWS 解决方案的各个部分收集监控数据，以便您可以更轻松地调试多点故障（如果发生）。AWS 提供了多种工具来监控您的 Amazon Redshift 资源并对潜在事件做出响应：

**Amazon CloudWatch 警报**  
使用 Amazon CloudWatch 警报，您可以在指定时间段内监控某个指标。如果指标超过给定阈值，则会向 Amazon SNS 主题或 AWS Auto Scaling 策略发送通知。CloudWatch 警报将不会调用操作，因为这些操作处于特定状态。而是必须在状态已改变并在指定的若干个时间段内保持不变后才调用。有关更多信息，请参阅 [创建警报](performance-metrics-alarms.md)。有关 指标的列表，请参阅 [Amazon Redshift 中的性能数据](metrics-listing.md)。

**AWS CloudTrail 日志**  
CloudTrail 会提供用户、IAM 角色或 AWS 服务在 Amazon Redshift 中所执行的 API 操作的记录。使用 CloudTrail 收集的信息，您可以确定向 Amazon Redshift 发出了什么请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间以及其他详细信息。有关更多信息，请参阅 [使用 Cloudtrail 进行日志记录](logging-with-cloudtrail.md)。

# 数据库审计日志记录
数据库审计日志记录

Amazon Redshift 记录您的数据库中的连接和用户活动相关信息。这些日志有助于您监控数据库以确保安全并进行故障排除，该流程称为*数据库审计*。可以存储日志的位置包括：
+ *Amazon S3 存储桶* - 这为负责监控数据库中活动的用户提供了访问权限以及数据安全功能。
+ *Amazon CloudWatch* - 您可以使用 CloudWatch 中内置的功能（例如可视化功能和设置操作）查看审计日志记录数据。

**注意**  
[SYS\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/SYS_CONNECTION_LOG.html) 收集 Amazon Redshift Serverless 的连接日志数据。请注意，当您收集 Amazon Redshift Serverless 的审计日志记录数据时，无法将其发送到日志文件，只能发送到 CloudWatch。

**Topics**
+ [

## Amazon Redshift 日志
](#db-auditing-logs)
+ [

## 审计日志和 Amazon CloudWatch
](#db-auditing-cloudwatch-provisioned)
+ [

# 启用审计日志记录
](db-auditing-console.md)
+ [

# 安全日志记录
](db-auditing-secure-logging.md)

## Amazon Redshift 日志


Amazon Redshift 在以下日志文件中记录信息：
+ *连接日志* – 记录身份验证尝试以及连接与断开连接。
+ *用户日志* – 记录与数据库用户定义更改相关的信息。
+ *用户活动日志* – 记录在数据库中运行之前的每个查询。

连接日志和用户日志主要用于实现安全性。您可以使用连接日志来监控连接到数据库的用户信息以及相关的连接信息。这些信息可能是他们的 IP 地址、发出请求的时间以及使用的身份验证类型等。您可以使用用户日志来监控数据库用户定义更改。

用户活动日志主要用于进行故障排除。它会跟踪用户及系统在数据库中执行的查询类型的相关信息。

连接日志和用户日志均对应于数据库的系统表中存储的信息。您可以使用系统表获取相同的信息，但日志文件可提供更简单的检索和查看机制。日志文件依赖 Simple Storage Service（Amazon S3）权限（而非数据库权限）针对表执行查询。此外，通过查看日志文件中的信息（而非查询系统表），您可以减少与数据库互动产生的任何影响。

**注意**  
日志文件没有系统日志表（即 [STL\$1USERLOG](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_USERLOG.html) 和 [STL\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_CONNECTION_LOG.html)）那么新。早于 (但不包括) 最新记录的记录将被复制到日志文件。

**注意**  
对于 Amazon Redshift Serverless，[SYS\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/SYS_CONNECTION_LOG.html) 收集连接日志数据。当您收集 Amazon Redshift Serverless 的审计日志记录数据时，无法将其发送到日志文件，只能发送到 CloudWatch。

### 连接日志


记录身份验证尝试以及连接与断开连接。下表介绍了连接日志中的信息。有关这些字段的更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [STL\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_CONNECTION_LOG.html)。有关为 Amazon Redshift Serverless 收集的连接日志数据的更多信息，请参阅 [SYS\$1CONCON\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/SYS_CONNECTION_LOG.html)。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/db-auditing.html)

### 用户日志


 记录数据库用户的以下更改的详细信息。
+ 创建用户
+ 删除用户
+ 更改用户（重命名）
+ 更改用户（更改属性）

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/db-auditing.html)

查询 [SYS\$1USERLOG](https://docs.aws.amazon.com/redshift/latest/dg/SYS_USERLOG.html) 系统视图，以查找有关用户更改的更多信息。此视图包括来自 Amazon Redshift Serverless 的日志数据。

### 用户活动日志


记录在数据库中运行之前的每个查询。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/db-auditing.html)

## 审计日志和 Amazon CloudWatch


 在 Amazon Redshift 中，原定设置情况下审计日志记录处于未启用状态。当您针对集群打开日志记录时，Amazon Redshift 将日志导出到 Amazon CloudWatch 中，或创建日志并将其上载到 Simple Storage Service (Amazon S3) 中，以捕获从启用审计日志记录的时间到当前时间的数据。每个日志记录更新都是以前日志的延续。

在 CloudWatch 或 Simple Storage Service (Amazon S3) 中存储审计日志记录是一个可选流程。记录到数据表并非可选流程，而会自动发生。有关系统表日志记录的更多信息，请参阅 Amazon Redshift 数据库开发人员指南中的[系统表参考](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_system-tables.html)。

您可以通过使用 AWS 管理控制台、Amazon Redshift API 参考或 AWS Command Line Interface (AWS CLI) 一起启用连接日志、用户日志以及用户活动日志。对于用户活动日志，您还必须启用 `enable_user_activity_logging` 数据库参数。如果您仅启用审计日志记录功能，但不启用相关参数，则数据库审计日志将仅为连接日志和用户日志记录信息，而不为用户活动日志记录信息。`enable_user_activity_logging` 参数预设情况下未启用 (`false`)。您可以将它设置为 `true` 以启用用户活动日志。有关更多信息，请参阅 [Amazon Redshift 参数组](working-with-parameter-groups.md)。

在对 CloudWatch 启用日志记录后，Amazon Redshift 将集群连接、用户和用户活动日志数据导出到 Amazon CloudWatch Logs 日志组。就 架构 而言，日志数据不会改变。CloudWatch 专为监控应用程序而构建，您可以使用它来执行实时分析或将其设置为采取措施。还可以使用 Amazon CloudWatch Logs 在持久性存储中存储日志记录。

使用 CloudWatch 查看日志是在 Simple Storage Service (Amazon S3 )中存储日志文件的推荐替代方法。它不需要太多的配置，而且可能符合您的监控要求，尤其是如果您已经使用它来监控其他服务和应用程序。

### Amazon CloudWatch 中的日志组和日志事件


在选择要导出的 Amazon Redshift 日志后，您可以在 Amazon CloudWatch Logs 中监控日志事件。将使用以下前缀为 Amazon Redshift 无服务器自动创建新的日志组，其中 `log_type` 表示日志类型。

```
/aws/redshift/cluster/<cluster_name>/<log_type>
```

例如，如果您选择导出连接日志，则日志数据将存储在以下日志组中。

```
/aws/redshift/cluster/cluster1/connectionlog
```

使用日志流将日志事件导出到日志组。要在无服务器端点的日志事件中搜索信息，请使用 Amazon CloudWatch Logs 控制台、AWS CLI 或 Amazon CloudWatch Logs API。有关搜索和筛选日志数据的信息，请参阅[使用筛选条件从日志事件创建指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html)。

在 CloudWatch 中，您可以使用所提供的旨在实现粒度和灵活性的查询语法搜索日志数据。有关更多信息，请参阅 [CloudWatch Logs Insights 查询语法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html)。

### 迁移到 Amazon CloudWatch 审计日志记录


在任何情况下，如果您要向 Simple Storage Service (Amazon S3) 发送日志并更改配置（例如向 CloudWatch 发送日志），保留在 Simple Storage Service (Amazon S3) 中的日志都不会受到影响。您仍可以在日志数据所在的 Simple Storage Service (Amazon S3) 存储桶中查询日志数据。

### Amazon S3 中的日志文件


Simple Storage Service（Amazon S3）中的 Amazon Redshift 日志文件的数量和大小在很大程度上取决于您集群中的活动。如果您有一个活动的集群生成了大量日志，则 Amazon Redshift 可能会更频繁地生成日志文件。对于同一类活动，您可能有一系列日志文件，例如同一个小时有多个连接日志。

当 Amazon Redshift 使用 Simple Storage Service (Amazon S3) 存储日志时，您需要为在 Simple Storage Service (Amazon S3) 中使用的存储支付相应费用。在对 Simple Storage Service (Amazon S3) 配置日志记录之前，应计划需存储日志文件的时长。在此过程中，请确定何时可根据审计需求删除或归档日志文件。您制定的计划在很大程度上取决于您存储的数据类型，例如需满足合规性或法规要求的数据。有关 Simple Storage Service（Amazon S3）定价的更多信息，请转至 [Amazon Simple Storage Service（S3）定价](https://aws.amazon.com/s3/pricing/)。

#### 对 Amazon S3 启用日志记录时的限制


审计日志记录具有以下约束：
+ 您只能使用 Amazon S3 托管式密钥（SSE-S3）加密（AES-256）。
+ Amazon S3 桶必须关闭 S3 对象锁定功能。

#### Amazon Redshift 审计日志记录的存储桶权限


当您对 Simple Storage Service (Amazon S3) 启用日志记录时，Amazon Redshift 会收集日志记录信息并将其上载到 Simple Storage Service (Amazon S3) 中存储的日志文件。您可以使用现有存储桶或新存储桶。Amazon Redshift 需要对存储桶具备以下 IAM 权限：
+ `s3:GetBucketAcl` 该服务要求对 Simple Storage Service（Amazon S3）存储桶具备读取权限，以便可以识别存储桶拥有者。
+ `s3:PutObject` 该服务要求具备放置对象权限，以便上载日志。此外，开启日志记录的用户或 IAM 角色必须具有对 Amazon S3 桶的 `s3:PutObject` 权限。每次上传日志时，该服务就会确定当前存储桶拥有者与启用日志记录时的存储桶拥有者是否一致。如果这些拥有者不匹配，您将收到一条错误。

如果启用审计日志记录时，您选择了创建新存储桶的选项，则会对其应用正确的权限。不过，如果您在 Simple Storage Service（Amazon S3）中创建自己的存储桶或使用现有存储桶，请确保添加包含存储桶名称的存储桶策略。日志使用服务主体凭证传送。对于大多数 AWS 区域，您可添加 Redshift 服务主体名称，*redshift t.amazonaws.com*。

该存储桶策略使用以下格式。*ServiceName* 和 *BucketName* 是您自己的值的占位符。还可在存储桶策略中指定关联的操作和资源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Put bucket policy needed for audit logging",
            "Effect": "Allow",
            "Principal": {
                "Service": "ServiceName"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetBucketAcl"
            ],
            "Resource": [
                "arn:aws:s3:::BucketName",
                "arn:aws:s3:::BucketName/*"
            ]
        }
    ]
}
```

------

以下示例就是针对美国东部（弗吉尼亚北部）区域的存储桶策略，该存储桶名为 `AuditLogs`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Put bucket policy needed for audit logging",
            "Effect": "Allow",
            "Principal": {
                "Service": "redshift.amazonaws.com"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetBucketAcl"
            ],
            "Resource": [
                "arn:aws:s3:::AuditLogs",
                "arn:aws:s3:::AuditLogs/*"
            ]
        }
    ]
}
```

------

原定设置情况下未启用的区域（也称为“选择加入”区域）需要特定于区域的服务主体名称。对于这些内容，服务主体名称包括区域，格式为 `redshift.region.amazonaws.com`。例如，*redshift.ap-east-1.amazonaws.com* 针对亚太地区（香港）区域。有关默认情况下未启用的区域列表，请参阅《AWS 一般参考》**中的[管理 AWS 区域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)。

**注意**  
特定于区域的服务主体名称与集群所在的区域对应。

##### 日志文件的最佳实践


 当 Redshift 将日志文件上载到 Simple Storage Service（Amazon S3）时，可以分段上载大型文件。如果分段上载不成功，则文件的一部分可能会保留在 Simple Storage Service（Amazon S3）存储桶中。这可能会导致额外的存储成本，因此了解什么情况下分段上载会失败非常重要。有关审计日志的分段上载的详细说明，请参阅[使用分段上载来上载和复制对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)和[中止分段上载](https://docs.aws.amazon.com/AmazonS3/latest/userguide/abort-mpu.html)。

有关创建 S3 存储桶和添加存储桶策略的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[创建通用存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)和 [Amazon S3 的存储桶策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)。

#### Amazon Redshift 审计日志记录的存储桶结构


预设情况下，Amazon Redshift 通过使用下列存储桶和对象结构在 Simple Storage Service（Amazon S3）存储桶中整理日志文件：``

`AWSLogs/AccountID/ServiceName/Region/Year/Month/Day/AccountID_ServiceName_Region_ClusterName_LogType_Timestamp.gz` 

例如：`AWSLogs/123456789012/redshift/us-east-1/2013/10/29/123456789012_redshift_us-east-1_mycluster_userlog_2013-10-29T18:01.gz`

如果您提供 Simple Storage Service（Amazon S3）键前缀，则该前缀放在密钥开头。

例如，如果指定前缀 myprefix：`myprefix/AWSLogs/123456789012/redshift/us-east-1/2013/10/29/123456789012_redshift_us-east-1_mycluster_userlog_2013-10-29T18:01.gz`

Simple Storage Service（Amazon S3）键前缀不得超过 512 个字符。其中不得包含空格（ ）、双引号（“）、单引号（‘）、反斜杠（\$1）。此外还有很多不得使用的特殊字符和控制字符。这些字符的十六进制代码如下：
+ x00 – x20
+ x 22
+ x 27
+ x5c
+ x7f 或更大

### Amazon S3 中的审计日志记录注意事项


 Amazon Redshift 审计日志记录可能会因如下原因而中断：
+  Amazon Redshift 无权将日志上载到 Simple Storage Service（Amazon S3）存储桶中。验证相应存储桶是否配置了适当的 IAM 策略。有关更多信息，请参阅 [Amazon Redshift 审计日志记录的存储桶权限](#db-auditing-bucket-permissions)。
+  存储桶拥有者发生变化。当 Amazon Redshift 上载日志时，它会验证存储桶拥有者与启用日志记录时的存储桶拥有者是否相同。如果存储桶拥有者发生变化，则在您配置其他存储桶以用于审计日志记录之前，Amazon Redshift 不会上载日志。
+  找不到存储桶。如果相应存储桶在 Simple Storage Service（Amazon S3）中已被删除，则 Amazon Redshift 无法上载日志。您必须重新创建该存储桶，或对 Amazon Redshift 进行配置以将日志上载到其他存储桶。

### 使用 AWS CloudTrail 的 API 调用


Amazon Redshift 与 AWS CloudTrail 集成，后者是在 Amazon Redshift 中提供用户、角色或 AWS 服务所采取操作的记录的服务。CloudTrail 将 Amazon Redshift 的所有 API 调用作为事件捕获。有关 Amazon Redshift 与 AWS CloudTrail 集成的更多信息，请参阅[使用 CloudTrail 进行日志记录](https://docs.aws.amazon.com/redshift/latest/mgmt/logging-with-cloudtrail.html)。

您可以将 CloudTrail 与 Amazon Redshift 数据库审计日志记录一起使用，也可以单独使用前者。

要了解有关 CloudTrail 的更多信息，请参阅 [AWS CloudTrail 用户指南](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。

# 启用审计日志记录


配置 Amazon Redshift 以导出审计日志数据。日志可以导出到 CloudWatch，也可以作为文件导出到 Simple Storage Service (Amazon S3) 存储桶。

## 使用控制台启用审计日志记录


### 控制台步骤


**要启用集群的审计日志记录**

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

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

1. 选择 **Properties**（属性）选项卡。在 **Database configurations**（数据库配置）面板中，依次选择 **Edit**（编辑）和 **Edit audit logging**（编辑审计日志记录）。

1. 在 **Edit audit logging**（编辑审计日志记录）页上，选择 **Turn on**（打开）并选择 **S3 bucket**（S3 存储桶）或 **CloudWatch**。我们建议使用 CloudWatch，因为管理很简单，而且它具有实现数据可视化的有用功能。

1. 选择要导出的日志。

1. 要保存您的选择，请选择 **Save changes**（保存更改）。

# 安全日志记录


如果 Amazon Redshift 记录引用一个或多个 AWS Glue Data Catalog 视图的查询，则 Amazon Redshift 在记录有关该查询的元数据时，会自动屏蔽某些系统表列和视图列中的字段。

安全日志屏蔽适用于 Amazon Redshift 在运行符合屏蔽条件的查询时生成的所有系统表和视图条目。下表列出了应用了安全日志记录、用 `******` 屏蔽文本和用 `-1` 屏蔽数字的系统视图和列。用于屏蔽文本的星号数量与原始文本中的字符数相匹配，最多 6 个字符。长度超过 6 个字符的字符串仍显示为 6 个星号。


****  

| 系统表 | 敏感列 | 
| --- | --- | 
| [SYS\$1EXTERNAL\$1QUERY\$1DETAIL](https://docs.aws.amazon.com/redshift/latest/dg/SYS_EXTERNAL_QUERY_DETAIL.html) | **列：**source\$1type、total\$1partitions、qualified\$1partitions、scanned\$1files、returned\$1rows、returned\$1bytes、file\$1format、file\$1location、external\$1query\$1text、warning\$1message。 | 
| [SYS\$1EXTERNAL\$1QUERY\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/SYS_EXTERNAL_QUERY_ERROR.html) | **列：**file\$1location、rowid、column\$1name、original\$1value、modified\$1value、trigger、action、action\$1value、error\$1code。 | 
| [SYS\$1QUERY\$1DETAIL](https://docs.aws.amazon.com/redshift/latest/dg/SYS_QUERY_DETAIL.html) | **列：**step\$1id、step\$1name、table\$1id、table\$1name、input\$1bytes、input\$1rows、output\$1bytes、output\$1rows、blocks\$1read、blocks\$1write、local\$1read\$1IO、remote\$1read\$1IO、spilled\$1block\$1local\$1disk、spilled\$1block\$1remote\$1disk、step\$1attribute。 | 
| [SYS\$1QUERY\$1HISTORY](https://docs.aws.amazon.com/redshift/latest/dg/SYS_QUERY_HISTORY.html) | **列：**returned\$1rows、returned\$1bytes。 | 
| [STL\$1AGGR](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_AGGR.html) | **列：**rows、bytes、tbl、type。 | 
| [STL\$1BCAST](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_BCAST.html) | **列：**rows、bytes、packets。 | 
| [STL\$1DDLTEXT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_DDLTEXT.html) | **列：**label、text。 | 
| [STL\$1DELETE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_DELETE.html) | **列：**rows、tbl。 | 
| [STL\$1DIST](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_DIST.html) | **列：**rows、bytes、packets。 | 
| [STL\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_ERROR.html) | **列：**file、linenum、context、error。 | 
| [STL\$1EXPLAIN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_EXPLAIN.html) | **列：**plannode、info。 | 
| [STL\$1FILE\$1SCAN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_FILE_SCAN.html) | **列：**name、line、bytes。 | 
| [STL\$1HASH](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_HASH.html) | **列：**rows、bytes、tbl、est\$1rows。 | 
| [STL\$1HASHJOIN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_HASHJOIN.html) | **列：**rows、tbl、num\$1parts、join\$1type。 | 
| [STL\$1INSERT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_INSERT.html) | **列：**rows、tbl。 | 
| [STL\$1LIMIT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_LIMIT.html) | **列：**rows。 | 
| [STL\$1MERGE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_MERGE.html) | **列：**rows。 | 
| [STL\$1MERGEJOIN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_MERGEJOIN.html) | **列：**rows、tbl。 | 
| [STL\$1NESTLOOP](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_NESTLOOP.html) | **列：**rows、tbl。 | 
| [STL\$1PARSE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_PARSE.html) | **列：**rows。 | 
| [STL\$1PLAN\$1INFO](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_PLAN_INFO.html) | **列：**startupcost、totalcost、rows、bytes。 | 
| [STL\$1PROJECT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_PROJECT.html) | **列：**rows、tbl。 | 
| [STL\$1QUERY](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_QUERY.html) | **列：**querytxt。 | 
| [STL\$1QUERY\$1METRICS](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_QUERY_METRICS.html) | **列：**max\$1rows、rows、max\$1blocks\$1read、blocks\$1read、max\$1blocks\$1to\$1disk、blocks\$1to\$1disk、max\$1query\$1scan\$1size、query\$1scan\$1size。 | 
| [STL\$1QUERYTEXT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_QUERYTEXT.html) | **列：**text。 | 
| [STL\$1RETURN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_RETURN.html) | **列：**rows、bytes。 | 
| [STL\$1S3CLIENT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_S3CLIENT.html) | **列：**bucket、key、transfer\$1size、data\$1size。 | 
| [STL\$1S3CLIENT\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_S3CLIENT_ERROR.html) | **列：**bucket、key、error、transfer\$1size。 | 
| [STL\$1SAVE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_SAVE.html) | **列：**rows、bytes、tbl。 | 
| [STL\$1SCAN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_SCAN.html) | **列：**rows、bytes、fetches、type、tbl、rows\$1pre\$1filter、rows\$1pre\$1user\$1filter、perm\$1table\$1name、scanned\$1mega\$1value。 | 
| [STL\$1SORT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_SORT.html) | **列：**rows、bytes、tbl。 | 
| [STL\$1SSHCLIENT\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_SSHCLIENT_ERROR) | **列：**ssh\$1username、endpoint、command、error。 | 
| [STL\$1TR\$1CONFLICT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_TR_CONFLICT.html) | **列：**table\$1id。 | 
| [STL\$1UNDONE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_UNDONE.html) | **列：**table\$1id。 | 
| [STL\$1UNIQUE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_UNIQUE.html) | **列：**rows、type、bytes。 | 
| [STL\$1UTILITYTEXT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_UTILITYTEXT.html) | **列：**label、text。 | 
| [STL\$1WINDOW](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_WINDOW.html) | **列：**rows。 | 
| [STV\$1BLOCKLIST](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_BLOCKLIST.html) | **列：**col、tbl、num\$1values、minvalue、maxvalue。 | 
| [STV\$1EXEC\$1STATE](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_EXEC_STATE.html) | **列：**rows、bytes、label。 | 
| [STV\$1INFLIGHT](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_INFLIGHT.html) | **列：**label、text。 | 
| [STV\$1LOCKS](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_LOCKS.html) | **列：**table\$1id。 | 
| [STV\$1QUERY\$1METRICS](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_QUERY_METRICS.html) | **列：**rows、max\$1rows、blocks\$1read、max\$1blocks\$1read、max\$1blocks\$1to\$1disk、blocks\$1to\$1disk、max\$1query\$1scan\$1size、query\$1scan\$1size。 | 
| [STV\$1STARTUP\$1RECOVERY\$1STATE](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_STARTUP_RECOVERY_STATE.html) | **列：**table\$1id、table\$1name。 | 
| [STV\$1TBL\$1PERM](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_TBL_PERM.html) | **列：**id、name、rows、sorted\$1rows、temp、block\$1count、query\$1scan\$1size。 | 
| [STV\$1TBL\$1TRANS](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_TBL_TRANS.html) | **列：**id、rows、size。 | 
| [SVCS\$1EXPLAIN](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_EXPLAIN.html) | **列：**plannode、info。 | 
| [SVCS\$1PLAN\$1INFO](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_PLAN_INFO.html) | **列：**rows、bytes。 | 
| [SVCS\$1QUERY\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_QUERY_SUMMARY.html) | **列：**step、rows、bytes、rate\$1row、rate\$1byte、label、rows\$1pre\$1filter。 | 
| [SVCS\$1S3LIST](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_S3LIST.html) | **列：**bucket、prefix、retrieved\$1files、max\$1file\$1size、avg\$1file\$1size。 | 
| [SVCS\$1S3LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_S3LOG.html) | **列：**message。 | 
| [SVCS\$1S3PARTITION\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_S3PARTITION_SUMMARY.html) | **列：**total\$1partitions、qualified\$1partitions、min\$1assigned\$1partitions、max\$1assigned\$1partitions、avg\$1assigned\$1partitions。 | 
| [SVCS\$1S3QUERY\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_S3QUERY_SUMMARY.html) | **列：**external\$1table\$1name、file\$1format、s3\$1scanned\$1rows、s3\$1scanned\$1bytes、s3query\$1returned\$1rows、s3query\$1returned\$1bytes。 | 
| [SVL\$1QUERY\$1METRICS](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_METRICS.html) | **列：**step\$1label、scan\$1row\$1count、join\$1row\$1count、nested\$1loop\$1join\$1row\$1count、return\$1row\$1count、spectrum\$1scan\$1row\$1count、spectrum\$1scan\$1size\$1mb。 | 
| [SVL\$1QUERY\$1METRICS\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_METRICS_SUMMARY.html) | **列：**step\$1label、scan\$1row\$1count、join\$1row\$1count、nested\$1loop\$1join\$1row\$1count、return\$1row\$1count、spectrum\$1scan\$1row\$1count、spectrum\$1scan\$1size\$1mb。 | 
| [SVL\$1QUERY\$1REPORT](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_REPORT.html) | **列：**rows、bytes、label、rows\$1pre\$1filter。 | 
| [SVL\$1QUERY\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_SUMMARY.html) | **列：**rows、bytes、rows\$1pre\$1filter。 | 
| [SVL\$1S3LIST](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3LIST.html) | **列：**bucket、prefix、retrieved\$1files、max\$1file\$1size、avg\$1file\$1size。 | 
| [SVL\$1S3LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3LOG.html) | **列：**message。 | 
| [SVL\$1S3PARTITION](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3PARTITION.html) | **列：**rows、bytes、label、rows\$1pre\$1filter。 | 
| [SVL\$1S3PARTITION\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3PARTITION_SUMMARY.html) | **列：**total\$1partitions、qualified\$1partitions、min\$1assigned\$1partitions、max\$1assigned\$1partitions、avg\$1assigned\$1partitions。 | 
| [SVL\$1S3QUERY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3QUERY.html) | **列：**external\$1table\$1name、file\$1format、s3\$1scanned\$1rows、s3\$1scanned\$1bytes、s3query\$1returned\$1rows、s3query\$1returned\$1bytes、files。 | 
| [SVL\$1S3QUERY\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3QUERY_SUMMARY.html) | **列：**external\$1table\$1name、file\$1format、s3\$1scanned\$1rows、s3\$1scanned\$1bytes、s3query\$1returned\$1rows、s3query\$1returned\$1bytes。 | 
| [SVL\$1S3RETRIES](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3RETRIES.html) | **列：**file\$1size、location、message。 | 
| [SVL\$1SPECTRUM\$1SCAN\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_SPECTRUM_SCAN_ERROR.html) | **列：**location、rowid、colname、original\$1value、modified\$1value、trigger、action、action\$1value、error\$1code。 | 
| [SVL\$1STATEMENTTEXT](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_STATEMENTTEXT.html) | **列：**type、text。 | 
| [SVL\$1STORED\$1PROC\$1CALL](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_STORED_PROC_CALL.html) | **列：**querytxt。 | 
| [SVL\$1STORED\$1PROC\$1MESSAGES](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_STORED_PROC_MESSAGES.html) | **列：**message、linenum、querytext。 | 
| [SVL\$1UDF\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_UDF_LOG.html) | **列：**message、funcname。 | 
| [SVV\$1DISKUSAGE](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_DISKUSAGE.html) | **列：**name、col、tbl、blocknum、num\$1values、minvalue、maxvalue。 | 
| [SVV\$1QUERY\$1STATE](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_QUERY_STATE.html) | **列：**rows、bytes、label。 | 
| [SVV\$1TABLE\$1INFO](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_TABLE_INFO.html) | **列：**table\$1id、table。 | 
| [SVV\$1TRANSACTIONS](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_TRANSACTIONS.html) | **列：**relation。 | 

有关系统表和视图的更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的[系统表和视图参考](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_system-tables.html)。有关 Amazon Redshift 的动态屏蔽查询结果的功能的信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的[动态数据掩蔽](https://docs.aws.amazon.com/redshift/latest/dg/t_ddm.html)。有关使用 Amazon Redshift 在 AWS Glue Data Catalog 中创建视图的信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [AWS Glue Data Catalog 视图](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html)。

# 使用 Cloudtrail 进行日志记录


Amazon Redshift、数据共享、Amazon Redshift Serverless、Amazon Redshift 数据 API 和查询编辑器 v2 都与 AWS CloudTrail 集成。CloudTrail 服务提供用户、角色或 AWS 服务在 Amazon Redshift 中所执行的操作的记录。CloudTrail 将 Amazon Redshift 的所有 API 调用作为事件捕获。捕获的调用包括通过 Redshift 控制台进行的调用以及对 Redshift 操作的代码调用。

如果您创建 CloudTrail 跟踪记录，则可以让 CloudTrail 事件持续传送到 Amazon S3 桶（包括 Redshift 的事件）。如果您不配置跟踪记录，则仍可在 CloudTrail 控制台中的 **Event history（事件历史记录）**中查看最新事件。通过使用 CloudTrail 收集的信息，您可以确定某些事项。这些事项包括向 Redshift 发出的请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间，以及其他详细信息。

您可以将 CloudTrail 与 Amazon Redshift 数据库审计日志记录一起使用，也可以单独使用前者。

要了解有关 CloudTrail 的更多信息，请参阅 [AWS CloudTrail 用户指南](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。

## CloudTrail 中的 信息


在您创建账户时，您的 AWS 账户中已启用 CloudTrail。发生活动时，该活动将记录在 CloudTrail 事件中，并与其他 AWS 服务事件一同保存在 **Event history**（事件历史记录）中。您可以在 AWS 账户中查看、搜索和下载最新事件。有关更多信息，请参阅《AWS CloudTrail 用户指南》**中的[使用 CloudTrail 事件历史记录查看事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

要持续记录 AWS 账户中的事件（包括 Redshift 的事件），请创建跟踪记录。CloudTrail 使用*跟踪记录* 将日志文件传送至 Amazon S3 桶。预设情况下，在控制台中创建跟踪时，此跟踪应用于所有 AWS 区域。此跟踪记录在 AWS 分区中记录所有区域中的事件，并将日志文件传送至您指定的 Amazon S3 存储桶。此外，您可以配置其他AWS服务，进一步分析在 CloudTrail 日志中收集的事件数据并采取行动。有关更多信息，请参阅《AWS CloudTrail 用户指南》**中的以下内容：
+ [创建跟踪概览](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 支持的服务和集成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-integrations)
+ [为 CloudTrail 配置 Amazon SNS 通知](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/getting_notifications_top_level.html)
+ [从多个区域接收 CloudTrail 日志文件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)和[从多个账户接收 CloudTrail 日志文件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

所有 Amazon Redshift、Amazon Redshift Serverless、数据 API、数据共享和查询编辑器 v2 操作都由 CloudTrail 记录。例如，对 `AuthorizeDatashare`、`CreateNamespace`、`ExecuteStatement` 和 `CreateConnection` 操作的调用将在 CloudTrail 日志文件中生成条目。

每个事件或日志条目都包含有关生成请求的人员信息。身份信息有助于您确定以下内容：
+ 请求是使用根凭证还是用户凭证发出的。
+ 请求是使用角色还是联合用户的临时安全凭证发出的。
+ 请求是否由其他AWS服务发出。

有关更多信息，请参阅《AWS CloudTrail 用户指南》**中的 [CloudTrail userIdentity 元素](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。

## 日志文件条目


*跟踪记录* 是一种配置，允许将事件作为日志文件传送到您指定的 Amazon S3 桶。CloudTrail 日志文件包含一个或多个日记账条目。一个*事件*表示来自任何源的一个请求，包括有关所请求的操作、操作的日期和时间、请求参数等方面的信息。CloudTrail 日志文件不是公用 API 调用的有序堆栈跟踪，因此它们不会按任何特定顺序显示。

## Amazon Redshift 数据共享示例


下面的示例显示了一个 CloudTrail 日志条目，该条目说明了 `AuthorizeDataShare` 操作。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AKIAIOSFODNN7EXAMPLE:janedoe",
        "arn": "arn:aws:sts::111122223333:user/janedoe",
        "accountId": "111122223333",
        "accessKeyId": "AKIAI44QH8DHBEXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AKIAIOSFODNN7EXAMPLE:janedoe",
                "arn": "arn:aws:sts::111122223333:user/janedoe",
                "accountId": "111122223333",
                "userName": "janedoe"
            },
            "attributes": {
                "creationDate": "2021-08-02T23:40:45Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2021-08-02T23:40:58Z",
    "eventSource": "redshift.amazonaws.com",
    "eventName": "AuthorizeDataShare",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "3.227.36.75",
    "userAgent":"aws-cli/1.18.118 Python/3.6.10 Linux/4.9.217-0.1.ac.205.84.332.metal1.x86_64 botocore/1.17.41", 
    "requestParameters": {
        "dataShareArn": "arn:aws:redshift:us-east-1:111122223333:datashare:4c64c6ec-73d5-42be-869b-b7f7c43c7a53/testshare",
        "consumerIdentifier": "555555555555"
    },
    "responseElements": {
        "dataShareArn": "arn:aws:redshift:us-east-1:111122223333:datashare:4c64c6ec-73d5-42be-869b-b7f7c43c7a53/testshare",
        "producerNamespaceArn": "arn:aws:redshift:us-east-1:123456789012:namespace:4c64c6ec-73d5-42be-869b-b7f7c43c7a53",
        "producerArn": "arn:aws:redshift:us-east-1:111122223333:namespace:4c64c6ec-73d5-42be-869b-b7f7c43c7a53",
        "allowPubliclyAccessibleConsumers": true,
        "dataShareAssociations": [
            {
                "consumerIdentifier": "555555555555",
                "status": "AUTHORIZED",
                "createdDate": "Aug 2, 2021 11:40:56 PM",
                "statusChangeDate": "Aug 2, 2021 11:40:57 PM"
            }
        ]
    },
    "requestID": "87ee1c99-9e41-42be-a5c4-00495f928422",
    "eventID": "03a3d818-37c8-46a6-aad5-0151803bdb09",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

## Amazon Redshift Serverless 示例


Amazon Redshift Serverless 与 AWS CloudTrail 集成，以提供在 Amazon Redshift Serverless 中执行的操作的记录。CloudTrail 将 Amazon Redshift Serverless 的所有 API 调用作为事件捕获。有关 Amazon Redshift Serverless 功能的更多信息，请参阅 [Amazon Redshift Serverless 功能概览](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-considerations.html)。

下面的示例显示了一个 CloudTrail 日志条目，该条目演示了 `CreateNamespace` 操作。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AAKEOFPINEXAMPLE:admin",
        "arn": "arn:aws:sts::111111111111:assumed-role/admin/admin",
        "accountId": "111111111111",
        "accessKeyId": "AAKEOFPINEXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AAKEOFPINEXAMPLE",
                "arn": "arn:aws:iam::111111111111:role/admin",
                "accountId": "111111111111",
                "userName": "admin"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2022-03-21T20:51:58Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2022-03-21T23:15:40Z",
    "eventSource": "redshift-serverless.amazonaws.com",
    "eventName": "CreateNamespace",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "56.23.155.33",
    "userAgent": "aws-cli/2.4.14 Python/3.8.8 Linux/5.4.181-109.354.amzn2int.x86_64 exe/x86_64.amzn.2 prompt/off command/redshift-serverless.create-namespace",
    "requestParameters": {
        "adminUserPassword": "HIDDEN_DUE_TO_SECURITY_REASONS",
        "adminUsername": "HIDDEN_DUE_TO_SECURITY_REASONS",
        "dbName": "dev",
        "namespaceName": "testnamespace"
    },
    "responseElements": {
        "namespace": {
            "adminUsername": "HIDDEN_DUE_TO_SECURITY_REASONS",
            "creationDate": "Mar 21, 2022 11:15:40 PM",
            "defaultIamRoleArn": "",
            "iamRoles": [],
            "logExports": [],
            "namespaceArn": "arn:aws:redshift-serverless:us-east-1:111111111111:namespace/befa5123-16c2-4449-afca-1d27cb40fc99",
            "namespaceId": "8b726a0c-16ca-4799-acca-1d27cb403599",
            "namespaceName": "testnamespace",
            "status": "AVAILABLE"
        }
    },
    "requestID": "ed4bb777-8127-4dae-aea3-bac009999163",
    "eventID": "1dbee944-f889-4beb-b228-7ad0f312464",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111111111111",
    "eventCategory": "Management",
}
```

## Amazon Redshift 数据 API 示例


下面的示例显示了一个 CloudTrail 日志条目，该条目演示了 `ExecuteStatement` 操作。

```
{
    "eventVersion":"1.05",
    "userIdentity":{
        "type":"IAMUser",
        "principalId":"AKIAIOSFODNN7EXAMPLE:janedoe",
        "arn":"arn:aws:sts::123456789012:user/janedoe",
        "accountId":"123456789012",
        "accessKeyId":"AKIAI44QH8DHBEXAMPLE",
        "userName": "janedoe"
    },
    "eventTime":"2020-08-19T17:55:59Z",
    "eventSource":"redshift-data.amazonaws.com",
    "eventName":"ExecuteStatement",
    "awsRegion":"us-east-1",
    "sourceIPAddress":"192.0.2.0",
    "userAgent":"aws-cli/1.18.118 Python/3.6.10 Linux/4.9.217-0.1.ac.205.84.332.metal1.x86_64 botocore/1.17.41",
    "requestParameters":{
        "clusterIdentifier":"example-cluster-identifier",
        "database":"example-database-name",
        "dbUser":"example_db_user_name",
        "sql":"***OMITTED***"
    },
    "responseElements":{
        "clusterIdentifier":"example-cluster-identifier",
        "createdAt":"Aug 19, 2020 5:55:58 PM",
        "database":"example-database-name",
        "dbUser":"example_db_user_name",
        "id":"5c52b37b-9e07-40c1-98de-12ccd1419be7"
    },
    "requestID":"00c924d3-652e-4939-8a7a-cd0612eeb8ac",
    "eventID":"c1fb7076-102f-43e5-9ec9-40820bcc1175",
    "readOnly":false,
    "eventType":"AwsApiCall",
    "recipientAccountId":"123456789012"
}
```

下面的示例显示了一个 CloudTrail 日志条目，该条目说明了 `ExecuteStatement` 操作，显示了幂等性所用的 `clientToken`。

```
{
    "eventVersion":"1.05",
    "userIdentity":{
        "type":"IAMUser",
        "principalId":"AKIAIOSFODNN7EXAMPLE:janedoe",
        "arn":"arn:aws:sts::123456789012:user/janedoe",
        "accountId":"123456789012",
        "accessKeyId":"AKIAI44QH8DHBEXAMPLE",
        "userName": "janedoe"
    },
    "eventTime":"2020-08-19T17:55:59Z",
    "eventSource":"redshift-data.amazonaws.com",
    "eventName":"ExecuteStatement",
    "awsRegion":"us-east-1",
    "sourceIPAddress":"192.0.2.0",
    "userAgent":"aws-cli/1.18.118 Python/3.6.10 Linux/4.9.217-0.1.ac.205.84.332.metal1.x86_64 botocore/1.17.41",
    "requestParameters":{
        "clusterIdentifier":"example-cluster-identifier",
        "database":"example-database-name",
        "dbUser":"example_db_user_name",
        "sql":"***OMITTED***",
        "clientToken":"32db2e10-69ac-4534-b3fc-a191052616ce"
    },
    "responseElements":{
        "clusterIdentifier":"example-cluster-identifier",
        "createdAt":"Aug 19, 2020 5:55:58 PM",
        "database":"example-database-name",
        "dbUser":"example_db_user_name",
        "id":"5c52b37b-9e07-40c1-98de-12ccd1419be7"
    },
    "requestID":"00c924d3-652e-4939-8a7a-cd0612eeb8ac",
    "eventID":"c1fb7076-102f-43e5-9ec9-40820bcc1175",
    "readOnly":false,
    "eventType":"AwsApiCall",
    "recipientAccountId":"123456789012"
}
```

## Amazon Redshift 查询编辑器 v2 示例


下面的示例显示了一个 CloudTrail 日志条目，该条目演示了 `CreateConnection` 操作。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AAKEOFPINEXAMPLE:session",
        "arn": "arn:aws:sts::123456789012:assumed-role/MyRole/session",
        "accountId": "123456789012",
        "accessKeyId": "AKIAI44QH8DHBEXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AAKEOFPINEXAMPLE",
                "arn": "arn:aws:iam::123456789012:role/MyRole",
                "accountId": "123456789012",
                "userName": "MyRole"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2022-09-21T17:19:02Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2022-09-21T22:22:05Z",
    "eventSource": "sqlworkbench.amazonaws.com",
    "eventName": "CreateConnection",
    "awsRegion": "ca-central-1",
    "sourceIPAddress": "192.2.0.2",
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0",
    "requestParameters": {
        "password": "***",
        "databaseName": "***",
        "isServerless": false,
        "name": "***",
        "host": "redshift-cluster-2.c8robpbxvbf9.ca-central-1.redshift.amazonaws.com",
        "authenticationType": "***",
        "clusterId": "redshift-cluster-2",
        "username": "***",
        "tags": {
            "sqlworkbench-resource-owner": "AAKEOFPINEXAMPLE:session"
        }
    },
    "responseElements": {
        "result": true,
        "code": "",
        "data": {
            "id": "arn:aws:sqlworkbench:ca-central-1:123456789012:connection/ce56b1be-dd65-4bfb-8b17-12345123456",
            "name": "***",
            "authenticationType": "***",
            "databaseName": "***",
            "secretArn": "arn:aws:secretsmanager:ca-central-1:123456789012:secret:sqlworkbench!7da333b4-9a07-4917-b1dc-12345123456-qTCoFm",
            "clusterId": "redshift-cluster-2",
            "dbUser": "***",
            "userSettings": "***",
            "recordDate": "2022-09-21 22:22:05",
            "updatedDate": "2022-09-21 22:22:05",
            "accountId": "123456789012",
            "tags": {
                "sqlworkbench-resource-owner": "AAKEOFPINEXAMPLE:session"
            },
            "isServerless": false
        }
    },
    "requestID": "9b82f483-9c03-4cdd-bb49-a7009e7da714",
    "eventID": "a7cdd442-e92f-46a2-bc82-2325588d41c3",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management"
}
```

## AWS CloudTrail 日志中的 Amazon Redshift 账户 ID


当 Amazon Redshift 为您调用其他 AWS 服务时，该次调用将以属于 Amazon Redshift 的账户 ID 记录下来。它未以您的账户 ID 记录。例如，假设 Amazon Redshift 调用 AWS Key Management Service（AWS KMS）操作（如 `CreateGrant`、`Decrypt`、`Encrypt` 和 `RetireGrant`）以管理集群上的加密。在这种情况下，调用由 AWS CloudTrail 使用 Amazon Redshift 账户 ID 记录。

当调用其他 AWS 服务时，Amazon Redshift 使用下表中的账户 ID。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/logging-with-cloudtrail.html)

以下示例显示了 Amazon Redshift 所调用的 AWS KMS Decrypt 操作的 CloudTrail 日志条目。

```
{

    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAI5QPCMKLTL4VHFCYY:i-0f53e22dbe5df8a89",
        "arn": "arn:aws:sts::790247189693:assumed-role/prod-23264-role-wp/i-0f53e22dbe5df8a89",
        "accountId": "790247189693",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2017-03-03T16:24:54Z"
            },
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAI5QPCMKLTL4VHFCYY",
                "arn": "arn:aws:iam::790247189693:role/prod-23264-role-wp",
                "accountId": "790247189693",
                "userName": "prod-23264-role-wp"
            }
        }
    },
    "eventTime": "2017-03-03T17:16:51Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "52.14.143.61",
    "userAgent": "aws-internal/3",
    "requestParameters": {
        "encryptionContext": {
            "aws:redshift:createtime": "20170303T1710Z",
            "aws:redshift:arn": "arn:aws:redshift:us-east-2:123456789012:cluster:my-dw-instance-2"
        }
    },
    "responseElements": null,
    "requestID": "30d2fe51-0035-11e7-ab67-17595a8411c8",
    "eventID": "619bad54-1764-4de4-a786-8898b0a7f40c",
    "readOnly": true,
    "resources": [
        {
            "ARN": "arn:aws:kms:us-east-2:123456789012:key/f8f4f94f-e588-4254-b7e8-078b99270be7",
            "accountId": "123456789012",
            "type": "AWS::KMS::Key"
        }
    ],
    "eventType": "AwsApiCall",
    "recipientAccountId": "123456789012",
    "sharedEventID": "c1daefea-a5c2-4fab-b6f4-d8eaa1e522dc"

}
```

# Amazon Redshift 的合规性验证
合规性验证

作为多个 AWS 合规性计划的一部分，第三方审计员将评估 Amazon Redshift 的安全性和合规性。其中包括 SOC、PCI、FedRAMP、HIPAA 及其它。

有关特定合规性计划范围内的 AWS 服务的列表，请参阅[合规性计划范围内的 AWS 服务](https://aws.amazon.com/compliance/services-in-scope/)。有关一般信息，请参阅 [AWS 合规性计划](https://aws.amazon.com/compliance/programs/)。

您可以使用 AWS Artifact 下载第三方审计报告。有关更多信息，请参阅[下载 AWS Artifact 中的报告](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)。

您在使用 Amazon Redshift 时的合规性责任由您数据的敏感性、您组织的合规性目标以及适用的法律法规决定。如果您对 Amazon Redshift 的使用需遵守 HIPAA、PCI 或 FedRAMP 等标准，AWS 提供了以下实用资源：
+ [安全性和合规性快速入门指南](https://aws.amazon.com/quickstart/?awsf.quickstart-homepage-filter=categories%23security-identity-compliance)，介绍了架构注意事项，以及在 AWS 上部署侧重于安全性和合规性的基准环境的步骤。
+ [设计符合 HIPAA 安全性和合规性要求的架构白皮书](https://docs.aws.amazon.com/whitepapers/latest/architecting-hipaa-security-and-compliance-on-aws/architecting-hipaa-security-and-compliance-on-aws.html)，介绍公司如何使用 AWS 创建符合 HIPAA 标准的应用程序。
+ [AWS 合规性资源](https://aws.amazon.com/compliance/resources/)，这些业务手册和指南可能适用于您的行业和位置。
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html)，一项 AWS 服务，可以评估您的资源配置对内部实践、行业指南和法规的遵循情况。
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html) 是一项 AWS 服务，提供了 AWS 中安全状态的全面视图，可帮助您检查是否符合安全行业标准和最佳实践。Security Hub CSPM 使用安全控件来评估资源配置和安全标准，以帮助您遵守各种合规框架。有关使用 Security Hub CSPM 评估 Amazon Redshift 资源的更多信息，请参阅《AWS Security Hub 用户指南》**中的 [Amazon Redshift 控件](https://docs.aws.amazon.com/securityhub/latest/userguide/redshift-controls.html)。

以下合规性和安全性文档涵盖 Amazon Redshift，并可通过 AWS Artifact 按需提供。有关更多信息，请参阅 [AWS Artifact](https://aws.amazon.com/artifact)。
+ 云计算合规性控制目录 (C5)
+ ISO 27001:2013 适用性声明 (SoA)
+ ISO 27001:2013 认证
+ ISO 27017:2015 适用性声明 (SoA)
+ ISO 27017:2015 认证
+ ISO 27018:2015 适用性声明 (SoA)
+ ISO 27018:2014 认证
+ ISO 9001:2015 认证
+ PCI DSS 合规证明 (AOC) 和责任摘要
+ 服务组织控制 (SOC) 1 报告
+ 服务组织控制 (SOC) 2 报告
+ 服务组织控制 (SOC) 2 保密性报告

# Amazon Redshift 中的恢复能力
恢复能力

AWS 全球基础设施围绕 AWS 区域和可用区 (AZ) 构建。AWS区域提供多个在物理上独立且隔离的可用区，这些可用区通过延迟低、吞吐量高且冗余性高的网络连接在一起。利用可用区，您可以设计和操作在可用区之间无中断地自动实现失效转移的应用程序和数据库。与传统的单个数据中心基础设施或多个数据中心基础设施相比，可用区具有更高的可用性、容错性和可扩展性。

几乎所有 AWS 区域都有多个可用区和数据中心。您可以跨一个区域中的多个可用区部署您的应用来获得容错性和低延迟。

要将集群移动到另一个可用区，而不丢失任何数据或对您的应用程序进行更改，您可以为您的集群设置重新定位。通过重新定位，您可以在集群上出现服务中断时继续操作，而产生的影响最小。开启集群重新定位后，Amazon Redshift 可能会在某些情况下选择重新定位集群。有关 Amazon Redshift 中的重新定位的更多信息，请参阅[重新定位集群](managing-cluster-recovery.md)。

在可用区中发生意外事件的故障情况下，您可以设置多个可用区（多可用区）部署，以确保 Amazon Redshift 数据仓库能够继续运行。Amazon Redshift 在可通过单个端点访问的两个可用区中部署相等的计算资源。如果整个可用区出现故障，第二个可用区中的剩余计算资源将可用于继续处理工作负载。有关多可用区部署的更多信息，请参阅 [多可用区部署](managing-cluster-multi-az.md)。

有关 AWS 区域和可用区的更多信息，请参阅 [AWS 全球基础设施](https://aws.amazon.com/about-aws/global-infrastructure/)。有关使用 Amazon Redshift 进行灾难恢复的更多信息，请参阅 [Implement disaster recovery with Amazon Redshift](https://aws.amazon.com/blogs/big-data/implement-disaster-recovery-with-amazon-redshift/)。

. 

# Amazon Redshift 中的基础设施安全性
基础结构安全性

作为一项托管式服务，Amazon Redshift 受 AWS 全球网络安全保护。有关 AWS 安全服务以及 AWS 如何保护基础设施的信息，请参阅 [AWS 云安全性](https://aws.amazon.com/security/)。要按照基础设施安全最佳实践设计您的 AWS 环境，请参阅《安全性支柱 AWS Well‐Architected Framework》**中的[基础设施保护](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 发布的 API 调用通过网络访问 Amazon Redshift。客户端必须支持以下内容：
+ 传输层安全性协议（TLS）。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 具有完全向前保密（PFS）的密码套件，例如 DHE（临时 Diffie-Hellman）或 ECDHE（临时椭圆曲线 Diffie-Hellman）。大多数现代系统（如 Java 7 及更高版本）都支持这些模式。

## 网络隔离
网络隔离

基于 Amazon VPC 服务的 Virtual Private Cloud (VPC) 是您在AWS云中的逻辑上隔离的私有网络。可以通过执行以下步骤，在 VPC 中部署 Amazon Redshift 集群或 Redshift Serverless 组：
+ 在 AWS 区域中创建 VPC。有关更多信息，请参阅 *Amazon VPC 用户指南*中的[什么是 Amazon VPC？](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)。
+ 创建两个或更多私有 VPC 子网。有关更多信息，请参阅 *Amazon VPC 用户指南*中的 [VPC 和子网](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html)。
+ 部署 Amazon Redshift 集群或 Redshift Serverless 工作组。有关更多信息，请参阅 [Redshift 资源的子网](working-with-cluster-subnet-groups.md) 或 [工作组和命名空间](serverless-workgroup-namespace.md)。

预设情况下，Amazon Redshift 集群在预置时被锁定。要允许来自 Amazon Redshift 客户端的入站网络流量，请将 VPC 安全组与 Amazon Redshift 集群相关联。有关更多信息，请参阅 [Redshift 资源的子网](working-with-cluster-subnet-groups.md)。

要仅允许来往于特定 IP 地址范围的流量，请使用 VPC 更新安全组。例如，仅允许来自或流入公司网络的流量。

在配置与您的 Amazon Redshift 集群标记的子网关联的网络访问控制列表时，请确保将相应的 AWS 区域的 S3 CIDR 范围添加到入口和出口规则的允许列表中。这样做可以让您在没有任何中断的情况下执行基于 S3 的操作，如 Redshift Spectrum、COPY 和 UNLOAD。

以下示例命令解析了 us-east-1 区域内的 Amazon S3 中使用的所有 IPv4 地址的 JSON 响应。

```
curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.region=="us-east-1") | select(.service=="S3") | .ip_prefix'

54.231.0.0/17

52.92.16.0/20

52.216.0.0/15
```

有关如何获取特定区域的 S3 IP 范围的说明，请参阅 [AWS IP 地址范围](https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)。

Amazon Redshift 支持将集群部署到专用租赁 VPC 中。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[专用实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)。

## Amazon Redshift 安全组
安全组

在您预置 Amazon Redshift 集群时，它默认处于锁定状态，因此任何人都无法访问。要为其他用户授予针对 Amazon Redshift 集群的入站访问权限，您可以将该集群与安全组关联起来。如果您处于 EC2-VPC 平台上，您可以使用现有的 Amazon VPC 安全组或者定义一个新的安全组，然后将其与集群关联。有关在 EC2-VPC 平台上管理集群的更多信息，请参阅[VPC 中的 Redshift 资源](managing-clusters-vpc.md)。

## 接口 VPC 端点


可以使用虚拟私有云（VPC）中的接口 VPC 端点（AWS PrivateLink）直接连接到 Amazon Redshift 和 Amazon Redshift Serverless API 服务，而不是通过互联网进行连接。有关 Amazon Redshift API 操作的信息，请参阅 *Amazon Redshift API 参考*中的[操作](https://docs.aws.amazon.com/redshift/latest/APIReference/API_Operations.html)。有关 Redshift Serverless API 操作的信息，请参阅《Amazon Redshift Serverless API 参考》**中的 [Actions](https://docs.aws.amazon.com/redshift-serverless/latest/APIReference/API_Operations.html)。有关 AWS PrivateLink 的更多信息，请参阅 *Amazon VPC 用户指南*中的[接口 VPC 终端节点 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)。请注意，与集群或工作区的 JDBC/ODBC 连接不是 Amazon Redshift API 服务的一部分。

使用接口 VPC 端点时，VPC 和 Amazon Redshift 或 Redshift Serverless 之间的通信完全在 AWS 网络内进行，从而可以提供更好的安全性。每个 VPC 终端节点都由您的 VPC 子网中一个或多个使用私有 IP 地址的弹性网络接口代表。有关弹性网络接口的更多信息，请参阅*《Amazon EC2 用户指南》*中的[弹性网络接口](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。

一个接口 VPC 终端节点将您的 VPC 直接连接到 Amazon Redshift。它不使用互联网网关、网络地址转换 (NAT) 设备、虚拟专用网络 (VPN) 连接或 Direct Connect 连接。VPC 中的实例不需要公有 IP 地址便可与 Amazon Redshift API 进行通信。

要在 VPC 中使用 Amazon Redshift 或 Redshift Serverless，您有两种选择。一种是从 VPC 内的实例进行连接。另一种方法是将您的私有网络连接到您的 VPC，方法是使用 Site-to-Site VPN 选项或 Direct Connect。有关 Site-to-Site VPN 选项的更多信息，请参阅 *Amazon VPC 用户指南*中的 [VPN 连接](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)。有关 Direct Connect 的信息,请参阅 *Direct Connect 用户指南*中的[创建连接](https://docs.aws.amazon.com/directconnect/latest/UserGuide/create-connection.html)。

您可以创建接口 VPC 终端节点以使用 AWS 管理控制台 或 AWS Command Line Interface (AWS CLI) 命令连接到 Amazon Redshift。有关更多信息，请参阅[创建接口端点](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpce-interface.html#create-interface-endpoint)。

在创建接口 VPC 终端节点后，您可以为端点启用私有 DNS 主机名。当您启用时，默认端点如下所示：
+ **Amazon Redshift 预置**：`https://redshift.Region.amazonaws.com`
+ **Amazon Redshift Serverless**：`https://redshift-serverless.Region.amazonaws.com`

如果您不启用私有 DNS 主机名，Amazon VPC 将提供一个您可以使用的 DNS 端点名称，格式如下。
+ **Amazon Redshift 预置**：`VPC_endpoint_ID.redshift.Region.vpce.amazonaws.com`
+ **Amazon Redshift Serverless**：`VPC_endpoint_ID.redshift-serverless.Region.vpce.amazonaws.com`

有关更多信息，请参阅《Amazon VPC 用户指南》**中的[接口 VPC 端点 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)。

Amazon Redshift 和 Redshift Serverless 支持在 VPC 内调用所有 [Amazon Redshift API operations](https://docs.aws.amazon.com/redshift/latest/APIReference/API_Operations.html) 和 [Redshift Serverless API operations](https://docs.aws.amazon.com/redshift-serverless/latest/APIReference/API_Operations.html)。

您可以将 VPC 终端节点策略附加到 VPC 终端节点，以控制 AWS Identity and Access Management (IAM) 委托人的访问权限。您还可以将安全组与 VPC 终端节点关联，以便根据网络流量的源和目标控制入站和出站访问。示例为 IP 地址的范围。有关更多信息，请参阅**《Amazon VPC 用户指南》中的[使用 VPC 端点控制对服务的访问权限](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)。

### Amazon Redshift 的 VPC 端点策略


您可以为 Amazon Redshift 的 VPC 终端节点创建一个策略，在该策略中指定以下内容：
+ 可以或不能执行操作的委托人
+ 可执行的操作
+ 可对其执行操作的资源

有关更多信息，请参阅《Amazon VPC 用户指南》**中的[使用 VPC 端点控制对服务的访问权限](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)。

接下来，您可以查找 VPC 终端节点策略示例。

#### Amazon Redshift 预置端点策略示例


接下来，可以查找适用于 Amazon Redshift 预置的 VPC 端点策略示例。

##### 示例：用于拒绝来自指定 AWS 账户的所有访问的 VPC 终端节点策略


以下 VPC 终端节点策略会拒绝 AWS 账户 `123456789012` 使用此端点访问资源的所有权限。

```
{
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "*",
            "Effect": "Deny",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

##### 示例：仅向指定的 IAM 角色授予 VPC 访问权限的 VPC 端点策略


以下 VPC 端点策略仅向 AWS 账户 *123456789012* 中的 IAM 角色 *`redshiftrole`* 授予完全访问权限。使用终端节点拒绝所有其它 IAM 委托人进行访问。

```
   {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:role/redshiftrole"
                ]
            }
        }]
}
```

这只是一个示例。在大多数应用场景中，我们建议附加特定操作的权限，以缩小权限范围。

##### 示例：仅允许 VPC 访问指定的 IAM 委托人（用户）的 VPC 终端节点策略


以下 VPC 终端节点策略仅允许对 AWS 账户 *123456789012* 中的 IAM 用户 *`redshiftadmin`* 进行完全访问。使用端点拒绝所有其他 IAM 委托人进行访问。

```
   {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:user/redshiftadmin"
                ]
            }
        }]
}
```

这只是一个示例。在大多数应用场景中，我们建议在将权限分配给用户之前为角色附加权限。此外，我们建议使用特定操作来缩小权限范围。

##### 示例：允许只读 Amazon Redshift 操作的 VPC 终端节点策略


以下 VPC 终端节点策略仅允许 AWS 账户 *`123456789012`* 执行指定的 Amazon Redshift 操作。

指定的操作为 Amazon Redshift 提供等效的只读访问权限。针对指定账户拒绝 VPC 上的所有其它操作。同样，所有其他帐户都被拒绝进行任何访问。有关 Amazon Redshift 操作的列表，请参阅 *IAM 用户指南*中的 [Amazon Redshift 的操作、资源和条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshift.html)。

```
  {
    "Statement": [
        {
            "Action": [
                "redshift:DescribeAccountAttributes",
                "redshift:DescribeClusterParameterGroups",
                "redshift:DescribeClusterParameters",
                "redshift:DescribeClusterSecurityGroups",
                "redshift:DescribeClusterSnapshots",
                "redshift:DescribeClusterSubnetGroups",
                "redshift:DescribeClusterVersions",
                "redshift:DescribeDefaultClusterParameters",
                "redshift:DescribeEventCategories",
                "redshift:DescribeEventSubscriptions",
                "redshift:DescribeHsmClientCertificates",
                "redshift:DescribeHsmConfigurations",
                "redshift:DescribeLoggingStatus",
                "redshift:DescribeOrderableClusterOptions",
                "redshift:DescribeQuery",
                "redshift:DescribeReservedNodeOfferings",
                "redshift:DescribeReservedNodes",
                "redshift:DescribeResize",
                "redshift:DescribeSavedQueries",
                "redshift:DescribeScheduledActions",
                "redshift:DescribeSnapshotCopyGrants",
                "redshift:DescribeSnapshotSchedules",
                "redshift:DescribeStorage",
                "redshift:DescribeTable",
                "redshift:DescribeTableRestoreStatus",
                "redshift:DescribeTags",
                "redshift:FetchResults",
                "redshift:GetReservedNodeExchangeOfferings"            
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

##### 示例：拒绝访问指定集群的 VPC 终端节点策略


以下 VPC 终端节点策略允许所有账户和委托人的完全访问权限。与此同时，它拒绝 AWS 账户 *`123456789012`* 对于在具有集群 ID `my-redshift-cluster` 的 Amazon Redshift 集群上执行的操作的任何访问。仍然允许其他不支持集群资源级权限的 Amazon Redshift 操作。有关 Amazon Redshift 操作及其相应资源类型的列表，请参阅 *IAM 用户指南*中的 [Amazon Redshift 的操作、资源和条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshift.html)。

```
 {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "*",
            "Effect": "Deny",
            "Resource": "arn:aws:redshift:us-east-1:123456789012:cluster:my-redshift-cluster",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

#### Amazon Redshift Serverless 端点策略示例


接下来，可以查找适用于 Redshift Serverless 的 VPC 端点策略示例。

##### 示例：支持只读 Redshift Serverless 操作的 VPC 端点策略


以下 VPC 端点策略仅支持 AWS 账户 *`123456789012`* 执行指定的 Redshift Serverless 操作。

指定的操作为 Redshift Serverless 提供等效的只读访问权限。针对指定账户拒绝 VPC 上的所有其它操作。同样，所有其他帐户都被拒绝进行任何访问。有关 Redshift Serverless 操作的列表，请参阅《IAM 用户指南》**中的 [Actions, Resources, and Condition Keys for Redshift Serverless](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshiftserverless.html)。

```
  {
    "Statement": [
        {
            "Action": [
                "redshift-serverless:DescribeOneTimeCredit",
                "redshift-serverless:GetCustomDomainAssociation",
                "redshift-serverless:GetEndpointAccess",
                "redshift-serverless:GetNamespace",
                "redshift-serverless:GetRecoveryPoint",
                "redshift-serverless:GetResourcePolicy",
                "redshift-serverless:GetScheduledAction",
                "redshift-serverless:GetSnapshot",
                "redshift-serverless:GetTableRestoreStatus",
                "redshift-serverless:GetUsageLimit",
                "redshift-serverless:GetWorkgroup"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

##### 示例：拒绝访问指定工作组的 VPC 端点策略


以下 VPC 终端节点策略允许所有账户和委托人的完全访问权限。同时，它拒绝 AWS 账户 *`123456789012`* 对于在工作组 ID 为 `my-redshift-workgroup` 的 Amazon Redshift 工作组上执行的操作进行任何访问。仍然可以执行其它不支持工作组资源级权限的 Amazon Redshift 操作。有关 Redshift Serverless 操作及其相应资源类型的列表，请参阅《IAM 用户指南》**中的 [Actions, Resources, and Condition Keys for Redshift Serverless](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshiftserverless.html)。

```
 {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "*",
            "Effect": "Deny",
            "Resource": "arn:aws:redshift-serverless:us-east-1:123456789012:workgroup:my-redshift-workgroup",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

# Amazon Redshift 中的配置和漏洞分析
配置和漏洞分析

AWS 负责处理来宾操作系统 (OS) 和数据库补丁、防火墙配置和灾难恢复 (DR) 等基本安全任务。这些流程已经过认证的第三方审计。有关更多信息，请参阅[Amazon Redshift 的合规性验证](security-compliance.md)、[责任共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)和[安全性、身份和合规性的最佳实践](https://aws.amazon.com/architecture/security-identity-compliance/)。

Amazon Redshift 会自动应用升级并修补您的数据仓库，以便您可以专注于您的应用程序，而不是应用程序的管理。补丁和升级在可配置的维护时段中应用。有关更多信息，请参阅 [维护时段](managing-cluster-considerations.md#rs-maintenance-windows)。

Amazon Redshift 查询编辑器 v2 是 AWS 托管式应用程序。所有补丁和更新均由 AWS 根据需要应用。