Amazon Redshift是由Amazon Web Services (AWS)提供的基于云的数据仓库。它是称为节点的计算资源的集合,这些节点被组织成一个称为集群的组。
具有密集存储(DS)节点的 Amazon Redshift 集群
密集存储(DS)节点是一种节点类型,可用于使用硬盘驱动器(HDD)创建超级大的数据仓库价格低廉,提到一家银行公司作为一个组织的例子,该组织使用带有DS 节点的 Amazon Redshift 集群来存储敏感数据。
列如,一家银行公司目前正在使用具有密集存储(DS)节点的Amazon Redshift 集群来存储敏感数据。审计发现集群未加密。合规性要求规定,包含敏感数据的数据库必须通过具有自动密钥轮换功能的硬件安全模块(HSM)进行加密。
这家银行公司不符合要求。他们需要使用具有自动密钥轮换功能的硬件安全模块
(HSM)来加密数据库。Amazon Redshift支持静态和传输中的数据加密。您可以使用HSM 或 AWS Key ManagementService(KMS)密钥加密静态数据。您还可以使用SSL加密传输中的数据。
为实现合规性,银行公司需要使用HSM加密选项和自动密钥轮换修改集群。他们还可以使用具有自动密钥轮换(automatic key rotation)功能的客户端和服务器证书(client and server certificate)与HSM建立可信连接(trusted connection)。创建一个新的HSM加密的Amazon Redshift集群并将数据迁移到新集群也是一个选项。所以使用具有自动密钥轮换功能的客户端和服务器证书与HSM建立可信连接和创建一个新的HSM加密的Amazon Redshift 集群并将数据迁移到新集群才能实现合规性。
在Amazon Redshift中归档冷数据以节省成本
要在Amazon Redshift 中存档冷数据以节省成本,您可以使用Amazon S3 Glacier存储类。您还可以使用将要清除的数据导出到Amazon S3的存储过程来自动化数据归档。此外,您可以遵循最佳实践,例如从Amazon Redshift集群中删除不需要的对像并增加对象的平均大小,以节省存储、转换和检索大型数据集时的成本。最后,您可以通过将存档移至 AWS 来实现数据存档的现代化,以降低成本并获得新见解。
具有密集存储(DS)节点的Amazon Redshift 集群中的硬件安全模块(hardware security module,HSM)
硬件安全模块(HSM)是一种用于在具有密集存储(DS)节点的Amazon Redshift 集群中加密敏感数据的设备,合规性要求可能会强制要求通过具有自动密钥管理的 HSM 完成加密。Amazon Redshift集群由称为节点的计算资源组成,包括领导节点和一个或多个计算节点。给定的场景涉及一家银行公司使用具有密集存储(DS)节点的 Amazon Redshift集群来存储敏感数据。
使用客户端和服务器证书在具有密集存储(DS)节点的Amazon Redshift集群中使用自动密钥轮换设置与HSM的可信连
为实现合规性,提议在具有密集存储(DS)节点的 Amazon Redshift 集群中使用具有自动密钥轮换功能的客户端和服务器证书与 HSM建立可信连接。但是,建立此连接的具体时间可能取决于各种因素,例如组织的安全策略和要求。最好咨询合格的AWS专业人员或遵循AWS文档提供的指南来确定设置此连接的适当时机。
一个区域的 Amazon Quicksight连接到另一个区域的 Amazon Redshift
一个区域的 Amazon Quicksight 连接到另一个区域的 Amazon Redshift,需要执行几个步骤。第一,通过为类型选择自定义 TCP 规则并为协议 输入TCP(6)来授权从 Amazon Quicksight 到 Amazon Redshift 集群的连接。接下来,修改安全组规则以提供从 Quicksight Redshift 访问 Redshift 集群的权限,如果您想从 Quicksight 中深入了解非结构比数据,您可以利用Amazon Redshift Spectrum, 您可以使用Redshift spectrum 从S3 查询数据,而不是依赖 Amazon Athena, 将 Amazon S3ReadonlyAccess 和 Amazon AthenaFullAccess 等IAM 策略添加到 IAM角色,并为表注册外部架构,Amazon QuickSight 部署模型允许跨账号和跨区域访问 Amazon Redshift和 Amazon RDS,客户可以使用一个Quicksight账号并连接到多个 AWS 账号和/或多个区域,要将Quicksight连接到数据原,请在Quicksight 控制台的导航窗格中选择数据集,选择添加数据集,然后选择您的数据源
YouTube上还有一个视频教程,其中介绍了如何将 Amazon Quicksight连接到不同 AWS 区域或账号中的私有数据剧,此外,客户可以参考社区论坛,在那里他们可以找到与连接两个不同区域中的数据集的访问相关的答案。
或者,您可以在一个区域为 Amazon Redshift 创建一个新的安全组,并使用入站规则授权从适当的 IP 地址范围访问另一个区域的 Amazon Quicksight 服务器。

选择使用Amazon Redshift Spectrum创建外部表还是选择使用与Amazon Redshift的连接
Amazon Redshift Spectrum允许使用SQL语句査询存储在Amazon S3中的数据。要在Amazon Redshift spectrum中创建和查询外部表,您可以按照以下步骤操作:
1.创建外部架构:外部架构是AWS Glue Data Catalog中定义的外部数据库的命名容器,您可以使用CREATE EXTERNAL SCHEMA命令注册在外部目录中定义的外部数据库,并使外部表可用于Amazon Redshift。
2.创建一个 IAM角色:您需要创建一个AWs Identityand Access Management(IAM)角色,该角色有权访问您存储在Amazon S3中的数据。
3.创建外部表:使用CREATE EXTERNAL TABLE命令定义一个引用存储在Amazon S3 中的数据的表,LOCATION 参数指定数据文件 Amazon S3 中的位置。
4.查询外部表:创建外部表后,您可以像查询 Amazon Redshift 中的任何其它表一样查询它们。
在决定是使用Amazon Redshift Spectrum 创建外部表还是使用Amazon Redshift 执行连接时。请思考以下因素:
l 数据大小:如果您的数据很大并且需要频繁更新.将其直接存储在Amazon Redshift 中可能比使用Spectrum 从S3中查询更有效。
l 查询复杂性:如果您的查询涉及复杂的连接或聚合.直接对存储在Amazon Redshift 中的数据执行这些操作可能更有效。
l 成本:持数据直接存储在Amazon Redshift 中可能比将其存储在S3 中并使用Spectrum 进行查询的成本更高。
一般来说,如果您的数据很大并且需要不常常更新,使用Spectrum创建外部表可能是一个不错的选择,由于它允许您以经济喜的方式存储数据,同时依旧能够使用Amazon Redshift 中的 SQL 语句查询它。
优化集群以处理繁重的负载
想要优化Amazon Redshift集群以处理早上的繁重负载。以下是一些可能有协助的提议:
l 使用Amazon Redshift并发扩展自动添加和删除集群以处理不同的查询负载。这样做有助于您避免停机并提高高峰时段的查询性能。
l 使用Amazon Redshift Spectrum 直接从Amazon S3查询数据。这样做有助于减少需要加载到 Amazon Redshift 集群中的数据量并提高查询性能。
l 使用Amazon Redshift实体化视图预先计算和存储频繁运行的查询的结果。这样做有助于您提高查询性能并减少执行查询所需的时间。
l 使用Amazon Redshift查询监控规则监控查询性能并识别执行时间较长的查询。这有助于您优化查询并提高查询性能。
l 使用Amazon Redshift工作负载管理确定查询的优先级并根据查询优先级分配资源。这样做有助于您确保第一执行关键查询并适当分配资源。
列如,一家公司在Amazon Redshift中有一个数据仓库,大小约为500TB。每隔几个小时导入一次新数据,并且全天候运行只读查询。工作日每天早上几个小时没有写,负载特别重。在那几个小时内,一些查询会排队并需要很长时间才能执行。公司需要优化查询执行并避免任何停机时间。
该公司最具成本效益的解决方案是在工作负载管理(WLM)队列中启用并发扩展(concurrency scaling)。使用Amazon Redshift 并发扩展来自动添加和删除集群以处理不同的查询负载,有助于您避免停机并提高高峰时段的查询性能。
在高峰时段使用AWS 管理控制台添加更多节点,将分配方式设置为全部或使用弹性调整大小在高峰期快速添加节点,不需要时删除节点会成本很高,由于您会向集群添加更多节点。这会增加成本。使用快照、还原和调整大小操作,切换到新的目标集群也可能成本很高,由于它需要您创建一个新集群并将数据迁移到新集群。
调整集群的容量以支持分析和存储需求的变化
要调整集群的容量以支持分析和存储需求的变化,有四种方法可以调整Amazon Redshift 集群的大小:
l 弹性调整大小:如果弹性调整大小作为一个选项可用,请使用弹性调整大小来更改节点类型、节点数量或两者。
l 经典调整大小:使用经典调整大小更改节点类型、节点数或全部。
l 快照、还原和调整大小:要确保集群在经典调整大小操作期间可用,请复制现有集群。
l Pause and resume resize:使用pause and resume resize临时暂停集群,调整大小,然后恢复。
列如,一家公司在Amazon Redshift数据仓库中分析其数据,该数据仓库目前拥有一个由三个密集存储节点组成的集群。由于最近的一次业务收购,该公司需要将额外的4TB用户数据加载到Amazon Redshift中。工程团队将结合所有用户数据并应用需要I/O密集型资源的复杂计算。公司需要调整集群的容量以支持分析和存储需求的变化。
该公司可以使用具有密集计算节点的弹性调整大小来调整集群大小。
要调整Amazon Redshift集群的大小,您可以使用弹性调整大小或经典调整大小。弹性调整大小是首选方法,由于它比经典调整大小更快且破坏性更小。弹性调整大小适用于使用RA3节点类型的集群。您可以使用弹性调整大小来更改节点类型节点数或两者。
如果弹性调整大小不可用,您可以使用经典调整大小来更改节点类型、节点数或两者。
经典调整大小适用于所有节点类型。
根据您的要求,您需要将额外的 4TB 用户数据加载到 Amazon Redshift 中,并应用需要I/O密集型资源的复杂计算。因此,您应该使用具有密集计算节点的弹性调整大小来调整集群大小 14526。
将数据从Amazon S3加载到Amazon Redshift
有多种方法可以更快地将数据从Amazon S3加载到 Amazon Redshift,而不会增加成本和维护数据文件的隔离。一种方法是使用利用并行处理的Redshift COPY命令,使其超级适合加载大量数据。另一种方法是使用INSERT命令,如果要添加一行,这种方法更好。您还可以使用AWS Glue定期将数据加载到Redshift中。
您还可以使用DynamoDB S3或EMR集群来促进数据加载过程,并且可以很好地处理批量数据加载。
列如,一家金融公司使用Amazon S3作为其数据湖,并使用多节点Amazon Redshift 集群建立了一个数据仓库。数据湖中的数据文件根据每个数据文件的数据源组织在文件夹中。所有数据文件都使用一个单独的数据库加载到Amazon Redshift 集群中的一个表中每个数据文件位置的COPY命令。使用这种方法,将所有数据文件加载到Amazon Redshift需要很长时间才能完成。用户希望在保持S3数据湖中数据文件隔离的同时,在成本增加很少或没有增加的情况下获得更快的解决方案。
该金融公司可以创建包含数据文件位置的清单文件并发出COPY命令以将数据加载到Amazon Redshift中。
高性能的长期存储服务
一家公司的营销团队请求协助,根据以下要求为其数据确定高性能的长期存储服务:
l 未压缩的数据大小约为32TB。
l 每天的单排插入量很少。
l 每天都有大量的聚合查询。
l 执行多个复杂连接。
l 查询一般涉及表中列的一小部分。
根据您的要求,我提议思考使用Amazon S3 Glacier Storage Classes。它提供了几乎无限
的可扩展性,并且专为99.999999999%(11个九)的数据持久性而设计。S3 Glacier 存储类提供选项以最快地访问您的存档数据和成本最低的云存档存储。
您还可以思考使用Google Cloud Storage。它是一种用于存储非结构化数据的托管服务。
您可以存储任意数量的数据并随时检索它。
该公司可以使用Amazon Redshift将提供最高性能的解决方案。
根据这个要求,提议思考使用Amazon Redshift。它是一个快速、可扩展、安全且完全托管的云数据仓库,使用标准SQL 和您现有的BI工具可以简单且经济高效地分析您的所有数据。
Amazon Aurora MySQL 是一个完全托管的关系数据库引擎,它将高端商业数据库的速度和可用性与开源数据库的简单性和成本效益结合在一起。
Amazon Neptune是一种快速、可靠、完全托管的图形数据库服务,可以轻松构建和运行使用高度连接的数据集的应用程序。
Amazon Elasticsearch 是一种搜索和分析引擎,可让您轻松地实时探索、分析和可视化您的数据。
优化存储和分析历史数据的性能和成本
Amazon RDS可用于存储和分析历史数据。要优化性能和成本,您可以使用Amazon Redshift Spectrum。它允许您对Amazon S3中的EB级非结构化数据运行查询。您还可以使用Amazon Aurora Serverless v2,它是Aurora Serverless的新版本,可根据应用程序的需求自动扩展和缩减数据库容量。
要存储最近5年的历史数据,您可以使用Amazon S3 Intelligent-Tiering。它会根据不断变化的访问模式自动在两个访问层(频繁访问和不频繁访问)之间移动对象,并自动为您优化成本。
列如,一家电子商务公司将客户购买数据存储在Amazon RDS中。该公司需要一种解决方案来存储和分析历史数据。最近6个月的数据将被频繁查询以用于分析工作负载。此数据有数 TB大。每月一次,过去5年的历史数据必须可供访问,并将与更新的数据结合在一起。公司希望优化性能和成本。
电子商务公司将数据从Amazon RDS增量复制到Amazon S3。在Amazon Redshift中加载和存储最近6个月的数据。配置Amazon Redshift Spectrum表以连接到所有历史数据。这样做最佳解决方案,由于您可以将数据从Amazon RDS增量复制到Amazon S3,并在Amazon Redshift中加载和存储最近6个月的数据。您可以配置Amazon Redshift Spectrum 表以连接到所有历史数据。
缩短 Amazon Redshift加载大量数据的时间
有多种方法可以缩短Amazon Redshift加载大量数据的时间。一种方法是压缩.csv文件并使用INSERT语句将数据提取到Amazon Redshift中。另一种方法是拆分大型.csv文件,然后使用COPY命令将数据加载到Amazon Redshift中。您还可以优化列数据类型以减少存储在大型表(如实际表)中的所有列的基数。为此,对数字进行四舍五入以去除过时的小数;删除毫秒/秒的时间; 将文本列分成两个或多个部分;将DateTime拆分为日期和时间列等。
列如,一家公司想要缩短销售数据报表的数据加载时间。数据已收集为.csv文件并存储在按日期分区的 Amazon S3存储桶中。然后将数据加载到Amazon Redshift数据仓库以进行频繁分析。每天的数据量高达500GB。
该公司可以拆分大型csv文件,然后使用COPY·命令将数据加载到Amazon Redshift中以提高数据加载性能。
提到的所有解决方案都可以提高数据加载性能,但最佳解决方案取决于具体用例。
l 压缩csv文件并使用INSERT语句将数据提取到Amazon Redshift:此解决方案最适合小数据量,由于它比大数据量的COPY命令慢。
l 拆分大型csv文件,然后使用COPY命令将数据加载到Amazon Redshift:此解决方案最适合大数据量,由于它比大数据量的INSERT 语句更快。
l 使用Amazon Kinesis Data Firehose将数据提取到Amazon Redshift:此解决方案最适合流数据,由于它可以实时提取数据。
l 以未排序的键顺序加载 .csv文件并清理Amazon Redshift中的表:此解决方案最适合提高查询性能,由于它可以减少查询扫描的数据量。
提高查询性能
一家大型拼车公司在全球拥有数千名司机,每天为数百万不同的客户提供服务。该公司已决定将现有数据集市迁移到Amazon Redshift。现有架构包括下表。
l 有关已完成游乐设施信息的trips实际表。
l 司机信息的drivers维度表。
l 包含客户资料信息的客户实际表。
该公司按日期和目的地分析旅行详情,以检查按地区划分的盈利能力。drivers数据很少更改。客户数据常常变化。
为了获取最佳查询性能,可以将DISTSTYLE KEY(目的地)用于trips并按日期排序。对drivers表使用DISTSTYLE ALL。对客户表使用DISTSTYLE EVEN。根据 Amazon Redshift的表设计最佳实践,针对查询性能的最佳表设计取决于具体用例。但是,以下是选择最佳分配方式的一些一般准则:
l 当实际表很大而维度表很小时使用DISTSTYLE KEY。
l 当实际表很小而维度表很大时使用DISTSTYLE EVEN。
l 当表很小或您想优化加载性能时,使用DISTSTYLE ALL。
这样做表设计由于trips实际表很大而drivers维度表很小。因此,对trips表使用DISTSTYLE KEY,对customers 表使用DISTSTYLE EVEN 将是最佳选择。客户数据常常更改,因此使用DISTSTYLE EVEN 比使用DISTSTYLE ALL更有效。
Amazon Redshift在一段时间内的刷新似乎导致某些报表运行速度变慢。这可能是由于多种缘由造成的,例如数据量增加或数据分布发生变化。
要解决此问题,您可以尝试以下操作:
l 检查 Amazon Redshift或Amazon QuickSight的日志中是否有任何错误。
l 检查是否有任何查询比平时运行时间更长,并对其进行优化。
l 检查架构或数据分布中是否有任何可能导致问题的更改。
列如,一家大型零售商已成功迁移到Amazon S3数据湖架构。公司的营销团队正在使用Amazon Redshift和Amazon QuickSight用于分析数据,并得出和可视化见解。为确保营销团队拥有最新的可操作信息,数据分析师使用前一天的数TB更新对Amazon Redshift进行夜间刷新。
在第一次夜间刷新后,用户报告说,在刷新前一直正常运行的一半最受欢迎的报表目前运行速度要慢得多。Amazon CloudWatch 不显示任何警报。
由于持续的用户工作负载,每晚的数据刷新使报表表需要Amazon Redshift无法自动执行的vacuum operation。该零售商可以尝试运行手动清理操作,看看它是否可以提高报表的性能。您还可以思考安排一个维护窗口来执行此操作。
提高数据加载的效率
要优化文件以降低查询成本并提高数据加载到Amazon Redshift集群的速度,您可以思考以下方法:
l 压缩数据文件。
l 在加载前后验证数据文件。
l 使用多行插入。
l 使用批量插入。
l 按排序键顺序加载数据。
l 在顺序块中加载数据。
l 使用时间序列表。
l 使用暂存表执行合并(upsert)。
l 计划维护窗口安排时间。
您还可以思考将Amazon Redshift RA3节点与托管存储结合使用,通过独立扩展计算和托管存储并为其付费来优化您的数据仓库。使用RA3,您可以根据性能要求选择节点数量,并且只需为您使用的托管存储付费。您应该根据每天处理的数据量调整RA3集群的大小。控制台内置了一个推荐引擎,可协助您做出正确的选择。
您还可以思考使用Parquet格式而不是CSV格式来最大限度地提高Amazon Redshift上的数据提取和报告性能。
公司可以使用AWS Glue将文件从CSV转换为Apache Parquet以创建 20个Parquet文件。
将文件复制到Amazon Redshift中,并与Amazon S3的Amazon Athena查询文件。它针对查谁数据并将数据加载到Amazon Redshift进行了优化。通过将文件从csv转换为Apache Parquet以创建20个Parquet文件,您可以使用Amazon Redshift Spectrum通过Amazon Athena从Amazon S3查询文件。
您可以使用几种方法将数据从Amazon S3发送到Amazon Redshift。您可以利用内置命令,通过AWS服务发送它,也可以使用第三方工具,例如Astera Centerprise。
内置选项之一是使用COPY命令。COPY命令是Amazon Redshift中的内置命令,可让您使用INSERT和COPY命会将数据从Amazon S3复制到Amazon Redshift。如果要添加一行,INSERT命令更好。COPY命令利用并行处理,这使得它超级适合加载大量数据。
另一种选择是使用Amazon Redshift自动复制预览功能。SQL用户可以使用Amazon Redshift 自动复制预览功能,通过简单的SQL命令轻松地自动将数据从Amazon S3提取到Amazon Redshift。当Amazon Redshift自动复制在指定的AmazonS3 路径中检测到新文件时,将触发COPY语句并开始加载数据。
列如,一家大型金融公司正在运行其 ETL 流程。此过程的一部分是将数据从 Amazon S3 移动到 Amazon Redshift 集群。该公司希望使用最具成本效益的方法将数据集加载到Amazon Redshift中。
该公司可以使用带有清单文件的COPY命令将数据加载到Amazon Redshift,并在加载过程中使用临时暂存表。
一家大公司全天都在Amazon EC2中接收来自外部各方的文件。在一天结束时,这些文件被组合成一个文件,压缩成一个gzip文件,并上传到Amazon S3。所有文件的总大小每天接近100GB。文件上传到Amazon S3后,AWS Batch程序会执行COPY命令以将文件加载到Amazon Redshift集群中。
程序可以修改成拆分文件数量,使它们等于Amazon Redshift集群中切片数量的倍数。gzip并将文件上传到Amazon S3。由于对文件运行COPY命令。将文件数量拆分为Amazon Redshift集群中切片数量的倍数,gzip后上传到Amazon S3,然后对文件执行COPY命令,这样可以加速COPY命令的运行。这是由于 COPY命令从多个文件并行加载数据,将工作负载分配给集群中的节点。
要优化将数据加载到Amazon Redshift 集群中创建的实际表的过程,您可以遵循一些最佳实践。这里是其中的一些:
l 使用Amazon Redshift COPY命令将数据移动到集群中。COPY命令针对SSD磁盘上的并行处理和列式存储进行了优化。
l 使用更改数据捕获(CDC)仅复制您需要的行。这有助于降低COPY操作的成本。
l 尽可能使用多行插入而不是单行插入。这有助于降低数据压缩的低效率。
l 重新分配工作负载管理(WLM)内存以优化COPY命令的性能。
l 启用短查询加速以提高短查询的性能。
这些是一些最佳实践,可协助您在将数据加载到Amazon Redshift 集群中创建的实际表时实现最高吞吐量并优化使用集群资源。您可以在AmazonRedshift文档中找到更多最佳实践。
列如,一家零售公司正在使用Amazon Redshift构建其数据仓库解决方案。作为这项工作的一部分,该公司正在将数百个文件加载到在其Amazon Redshift集群中创建的实际表中。该公司希望该解决方案在将数据加载到公司的实际表中时实现最高吞吐量并优化使用集群资源。
为在将数据加载到Amazon Redshift集群中创建的实际表时实现最高吞吐量并优化使用集群资源,公司应使用单个COPY命令将数据加载到Amazon Redshift集群中。这是由于COPY命令针对SSD磁盘上的并行处理和列式存储进行了优化。使用与Amazon Redshift集群节点数量相等的多个COPY命令或LOAD命令可能会导致集群资源使用效率低下并降低吞吐量。
外部硬件安全模块(HSM)加密
Amazon Redshift支持管理外部硬件安全模块(HSM)中的加密密钥,这些模块可以是本地的,也可以是AWS CloudHSM。当您使用HSM时,您必须使用客户端和服务器证书来配置Amazon Redshift和您的HSM之间的可信连接。您向 Amazon Redshift提供HSM IP地址、HSM分区名称、HSM分区密码和公共HSM服务器证书,该证书使用内部根密钥加密。
PCIDSS要求3.6.2允许部署系统来保护用于加密持卡人相关数据的加密密钥。将密钥存储在不安全的位置会使公司容易受到网络攻击。密钥加密将具有额外的安全层。
列如,一家在线零售公司使用Amazon Redshift来存储历史销售交易。该公司需要对集群中的静态数据进行加密,以符合支付卡行业数据安全标准(PCI DSS)。公司治理策略要求使用本地硬件安全模块(HSM)管理加密密钥。
该在线零售公司可以创建一个Amazon VPC并在Amazon VPC和本地网络之间建立VPN连接。它还为本地HSM创建HSM连接和客户端证书。最后,它会在Amazon VPC中启动一个集群,并提供使用本地HSM存储密钥的选项。
Amazon Redshif支持使用HSM和客户管理的密钥对静态数据进行加密。.您可以按照以下步骤使用具有客户管理的密钥的HSM来加密您的数据:
1. 创建HSM·客户端证书并配置HSM
2. 在AWS KMS中创建CMK
3. 配置集群以使用CMK
您可以在Amazon Redshift文档中找到有关如何使用HSM和客户管理的密钥来加密数据的更多信息。
要使用HSM密现有的未加密Amazon Redshift集群,您可以通过启用HSM 加密来修改集群。您还可以使用Amazon Redshift控制台将Amazon Redshift配置为使用HSM并轮换加密密钥。
要创建Amazon Redshift集群将用于连接到客户端HSM以存储和检索用于加密集群数据库的密钥的HSM客户端证书,您可以生成一个必须存储在HSM中的公钥。
对于数据库配置,您可以选择使用AWS密钥管理服务(AWS KMS)或使用硬件安全模块(HSM)。有关加密选项的更多信息,请参阅Amazon Redshift数据库加密。
列如,一家银行公司目前正在使用Amazon Redshift处理敏感数据。审计发现当前集群未加密。合规性要求包含敏感数据的数据库必须使用具有客户管理密钥的硬件安全模块(HSM)进行加密。
为确保合规性,这家银行公司可以从控制台修改Amazon Redshift集群并使用HSM选项启用加密。您还可以使用适当的加密设置修改数据库参数组,然后重新启动集群无需创建新的HSM加密的Amazon Redshift集群并将数据迁移到新集群。您可以使用命令行在Amazon Redshift中启用HSM加密,但这不是必需的,由于您可以从控制台执行此操作。
加密解决方案必须在经过联邦信息处理标准(FIPS)140-2第3级验证的硬件安全模块中受到保护。有关加密选项的更多信息,请参阅Amazon Redshift数据库加密。
调整工作负载的优先级
Amazon Redshift使用工作负载管理(WLM)功能,允许您定义具有不同优先级的查询队列。默认情况下,查询以其优先级设置为NORMAL运行。您还可以指定更高的优先级,例如高于HIGHEST的CRITICAL。
要通过优先于大型查询来减少小型查询的运行时间,您可以使用短查询加速(SQA)。Amazon Redshift使用机器学习算法来分析每个符合条件的查询并预测查询的执行时间。默认情况下,WLM根据对集群工作负载的分析动态地为SQA 最大运行时间分配一个值。或者,您可以指定1-20秒的固定值。
您还可以通过应用查询项目和过滤器、微调表设计、优化内存使用、安排真空(如果需要)和优化表统计来优化Amazon Redshift性能。
列如,一家在线零售公司正在使用Amazon Redshift运行查询并对客户的购物行为进行分析。当集群上运行多个查询时,小查询的运行时间会显着增加。公司的数据分析团队通过在大型查询之前优先处理这些小型查询来减少它们的运行时间。
该公司可以在工作负载管理(WLM)中配置短查询加速,通过将小查询优先于大查询来缩短它们的运行时间。
使用Amazon Redshift Spectrum进行小型查询不是一个好的解决方案,由于Amazon Redshift Spectrum用于直接对存储在S3中的数据运行SQL查询。它不支持对存储在Amazon Redshift表中的数据运行查询增加工作负载管理(WLM)中的并发限制不是一个好的解决方案,由于增加工作负载管理(WLM)中的并发限制会增加可以同时运行的并发查询的数量。这无助于减少小查询的运行时间。
为小型查询添加专用计算节点不是一个好的解决方案,由于为小型查询添加专用计算节点会增加成本和复杂性。
又列如,一家公司正在使用Amazon Redshift托管企业报告解决方案。该应用程序为三个主要组提供报告功能:执行组访问财务报告,数据分析师团队运行长时间运行的临时查询,数据工程团队运行存储过程和ETL过程。执行团队需要查询以最佳性能运行。数据工程团队预计查询只需几分钟。
根据这个的要求,该公司可以使用Amazon Redshift的工作负载管理(WLM功能。WLM允许您定义查询队列并根据优先级为它们分配资源。通过这种方式,您可以确保来自执行团队的查询被赋予更高的优先级并以最佳性能运行,而来自数据工程团队的查询被赋予较低的优先级并且需要几分钟才能运行。
并发扩展用于在查询需求突然增加时向集群添加更多计算资源。短查询加速(SOA)用于通过缓存结果来加速短时间运行的查询。物化视图用于将查询结果存储为表,以便将来可以更快地查询。
Amazon Redshift工作负载管理(WLM)为用户提供了一种灵活的方式来调整工作负载的优先级,因此短查询不会卡在较长查询之后。您可以在Amazon Redshift 工作负载管理中定义队列,等待运行的查询列表。查询监控规则为WLM队列定义基于指标的性能边界,并指定当查询超出这些边界时要采取的操作。例如,对于专用于短期运行查询的队列,您可以创建一个规则来撤销运行时间超过60秒的查询。
列如,一位数据分析专家正在为Amazon Redshift环境设置手动模式的工作负载管理数据分析专家正在定义查询监控规则以管理Amazon Redshift集群的系统性能和用户体验。Amazon Redshift工作负载管理(WLM)中的每个查询监控规则都必须包含一个唯一的规则名称、一到三个谓词和一个操作。
为了在不影响延迟和其它团队的查询时间的情况下避免查询排队,您可以使用Amazon Redshift工作负载管理(WLM),它为用户提供了一种灵活的方式来调整工作负载的优先级,这样短查询就不会被长查询卡住。您可以在Amazon Redshift工作负载管理中定义队列,等待运行的查询列表。
您还可以使用WLM根据用户组或查询组将查询分配给队列。此功能提供了创建多个查询队列的能力,并且查询在运行时根据其用户组或查询组路由到适当的队列。
列如,一家公司使用Amazon Redshift来满足其数据仓库需求。ETL job每晚运行以加载数据、应用业务规则并创建用于报告的聚合表。公司的数据分析、数据科学和BI团队在正常工作时间使用数据仓库。工作负载管理设置为自动,每个团队都有单独的队列,优先级设置为正常。
最近,数据分析团队的读取查询突然激增,每天至少两次,查询排队等待集群资源。公司需要一种解决方案,使数据分析团队能够避免查询排队,而不影响其它团队的延迟和查询时间。
该公司可以配置数据分析队列,实现并发伸缩。这样做并发扩展允许Amazon Redshift在查询等待资源时自动添加额外的集群容量。这将使数据分析团队能够避免查询排队,而不会影响其它团队的延迟和查询时间。
Amazon Redshift即席查询在长时间运行的查询后面卡在队列中的问题可能是由多种缘由造成的,例如网络问题、查询优化问题或工作负载管理问题。
要解决此问题,您可以尝试在临时查询中查询的表中创建分区,从Amazon Redshift控制台配置自动工作负载管理(WLM),创建具有不同优先级的Amazon Simple Queue Service(Amazon SQS)队列并将查询分配给基于优先级的队列。您还可以对数据库中的所有表运行VACUUM命令。
列如,一家公司使用Amazon Redshift来存储其数据。报告团队运行临时查询以从Amazon Redshift数据库生成报告。报告团队最近开始遇到报告生成不一致的问题。用干生成一般需要几分钟才能运行的报告的临时查询可能需要数小时才能运行。调试该问题的数据分析专家发现临时查询卡在长时间运行的查询后面的队列中。
数据分析专家可以尝试在临时查询中查询的表中创建分区,从Amazon Redshift控制台配置自动工作负载管理(WLM),创建具有不同优先级的Amazon Simple Queue Service(Amazon SQS)队列并将查询分配给队列基于优先级或对数据库中的所有表运行VACUUM命令。
频繁连接的行位于同一个节点切片的查询调优
一家人力资源公司维护一个10节点的Amazon Redshift集群来对公司的数据运行分析查询。Amazon Redshift集群包含一个产品表和一个交易表,两个表都有一个product_sku列。这些表的大小超过100 GB。大多数查询都在两个表上运行。
为实现最佳查询性能,公司应为两个表1使用KEY分配方式。这是由于大多数查询都在两个表上运行,并且它们有一个公共列(product_sku列)。KEY分布样式根据称为分布键的一列中的值分布行。当您使用KEY分配方式时,Amazon Redshift会将具有一样分配键值的行分配到一样的节点切片。这确保了频繁连接的行位于同一个节点切片上,从而减少了I/O 并提高了查询性能。
控制敏感数据的访问权限
需要确保只有审计组的成员才能读取新表中包含敏感数据的列,这些列最终将被每天运行多次的几个现有查询引用。您可以使用以下步骤来实现此目的:
1. 在Amazon Redshift中创建一个新模式并授予对审计组的访问权限。
2. 使用包含的感数据的列在新架构中创建一个新表。
3. 授予对新表上审计组的SELECT 访问权限。
4. 将数据加载到新表中。
您可以使用以下 SQL命令创建模式、表并授予对审计组的访问权限:
CREATE SCHEMA sensitive_data;
GRANT USAGE ON SCHEMA sensitive_data TO auditing_group:
CREATE TABLE sensitive_data_new_table (
column1 datatypel,
column2 datatype2,
sensitive_column datatype3
);
GRANT SELECT ON sensitive_data_new_table TO auditing_group
列如,一家公司使用Amazon Redshift作为其数据仓库。新表的列包含敏感数据。表中的数据最终将被每天运行多次的几个现有查询引用。
数据分析师需要将1000亿行数据加载到新表中。在这样做之前,数据分析师必须确保只有审计组的成员才能读取包含敏感数据的列。
将所有数据加载到新表中并授子auditing组从表中读取的权限是一个好的开始。但是,创建包含所有列(敏感列除外)的新表的视图,并授予适当的用户对该表的只读权限是满足要求且维护开销最低的最佳方式。
这种方法可确保敏感数据不会暴露给未经授权的用户,同时仍允许适当的用户访问非敏感数据。它还减少了所需的维护量,由于您只需要维护视图而不是多个表。
还可以通过使用Amazon Redshift中的行级安全性(RLS),数据分析师也能以最低的维护开销满足这此要求。借助 RLS,您可以对表的数据进行精细的访问控制。您可以跟据在数据库对象级别定义的安全策略,决定哪些用户或角色可以访问模式或表中的特定数据记录。
为确保只有公司审计团队的成员才能读取Amazon Redshift中的敏感数据,您可以使用GRANT SELECT命令允许审计团队访问包含敏感数据的列。您可以授予所有用户对包含非敏感数据的列的只读权限。您可以使用明确的允许操作将AWS IAM策略附加到审计团队,该操作授予对包含敏感数据的列的访问权限。
列如,一家公司使用Amazon Redshift作为其数据仓库。新表包括一些包含敏感数据的列和一些包含非敏感数据的列。表中的数据最终将被每天运行多次的多个现有查询引用。
数据分析专家必须确保只有公司审计团队的成员才能阅读包含敏感数据的列。所有其它用户必须对包含非敏感数据的列具有只读访问权限。
数据分析专家可以向所有用户授予对包含非敏感数据的列的只读权限,并通过明确的允许操作将AWS IAM策略附加到审计团队,以授予对包含敏感数据的列的访问权限。这样做,可以以最少的操作开销满足这些要求。
加密敏感数据
列如,一家抵押贷款公司有一个接受付款的微服务。此微服务使用带有AWS KMS 托管密钥 Amazon DynamoDB 加密客户端在将数据写入Amazon DynamoDB之前加密敏感数据。财务团队应该能够将此数据加载到Amazon Redshift中并聚合敏感字段中的值。Amazon Redshift集群与来自不同业务部门的其它数据分析师共享。
财务团队应该能够将数据加载到 Amazon Redshift中并聚合敏感字段中的值。Amazon Redshift提供两种加密静态数据的选项——服务器端和客户端加密。服务器端加密用于在数据写入Amazon Redshift数据中心时对其进行加密,并在访问时对其进行解密。客户端加密需要您管理加密过程。
数据分析师应该创建一个AWS Lambda函数来处理DynamoDB流。将输出保存到财务团队的受限Amazon S3存储桶中。在Amazon Redshift中创建一个仅供财务团队访问的财务表。使用具有访问AWS KMS密钥的AWS IAM角色的COPY命令将数据从Amazon S3加载到财务表。
这种方法是完成任务的最安全、最有效的方法。它确保敏感数据使用一样的AWS KMS密销解密,并保存到财务团队的受限Amazon S3存储桶中。Amazon Redshift中的财务表仅供财务团队访问,确保数据安全。COPY命令用于将数据从Amazon S3加载到财务表,这是加载大量数据的最有效方式。
将日志写入Amazon S3存储桶
Amazon Redshift数据库包含敏感的用户数据。日志记录是满足合规性要求所必需的。日志必须包含数据库身份验证尝试、连接和断开连接。日志还必须包含针对数据库运行的每个查询,并记录运行每个查询的数据库用户。
可以通过创建日志记录Amazon S3存储桶然后创建日志记录Amazon S3存储桶策略以允许Amazon Redshift将日志写入存储桶来为您的Amazon Redshift集群启用日志记录。然后,您可以创建日志记录集群参数组并将query_logging参数设置为true。这将为集群启用查询日志记录。您还可以将
enable_user_activity_logging参数设置为true以启用集群的用户活动日志记录。这将记录所有用户活动,包括身份验证尝试、连接和断开连接。
还可以使用AWS CloudTrail记录Amazon Redshift API调用。CloudTrail记录对Amazon Redshift进行的所有API调用包括创建、修改和删除集群、快照和安全组的调用。
使用AWS管理控制台或AWS CLI为Amazon Redshift启用审计日志记录能够创建所需的日志。当您启用审核日志记录时,Amazon Redshift会将有关连接、断开连接和查询的信息记录到您指定的Amazon S3存储桶中。您还可以指定要记录的详细程度。





