写点什么

如何为 Amazon S3 中的 AWS KMS 加密数据启用跨账户 Amazon Redshift COPY 和 Redshift Spectrum 查询(四)

  • 2019-12-27
  • 本文字数:3451 字

    阅读完需:约 11 分钟

如何为 Amazon S3 中的 AWS KMS 加密数据启用跨账户 Amazon Redshift COPY 和 Redshift Spectrum 查询(四)

执行 Redshift Spectrum 查询

现在,已在 AWS Glue 数据目录中创建客户表,下面我们来使用 Redshift Spectrum 查询该表。


  1. 从您的查询工具登录 Amazon Redshift 集群。

  2. 运行下面的语句,为 Redshift Spectrum 创建一个称为

  3. spectrumxacct 的外部架构,以指向 AWS Glue 数据目录数据库。此数据库在账户 B 中为

  4. spectrumdb_account_b,已在 AWS Glue 控制台中创建。

  5. SQL


   drop schema if exists spectrumxacct;   create external schema spectrumxacct   from data catalog    database 'spectrumdb_account_b'   iam_role '<IAM role ARN of redshift_role_account_b,IAM role ARN of xacct_kms_role_account_b>'   create external database if not exists;
复制代码


**注意:**替换账户 B 中的 IAM 角色 ARN,用逗号隔开,周围不加任何空格。
复制代码


  1. 运行下面的示例查询,以确认 Redshift Spectrum 可以成功查询数据。

  2. SQL


   select * from spectrumxacct.customer limit 10;
复制代码



注意:Redshift Spectrum 使用账户 B 中的 AWS Glue 数据目录,而非账户 A。

选项 2:账户 A 中的 AWS Glue 数据目录

****


设置权限

1.登录账户 A 的 AWS 控制台,然后将 AWS 区域更改为 us-west-2(俄勒冈)



    • rs-xacct-bucket-policy,可授予对账户 A 中的 S3 存储桶的访问权限


    • rs_xacct_kms_policy,可授予对账户 A 中的 CMK 的访问权限


    策略名称:rs_xacct_bucket_policy


    注意:将存储桶名称 rs-xacct-kms-bucket 替换为您的存储桶名称。


    Json


    {    "Version": "2012-10-17",    "Statement": [        {            "Sid": "AllowS3",            "Effect": "Allow",            "Action": [                "s3:ListBucket",                "s3:GetObject"            ],            "Resource": [                "arn:aws:s3:::rs-xacct-kms-bucket/*",                "arn:aws:s3:::rs-xacct-kms-bucket"            ]        }    ]}
    复制代码


    策略名称:rs_xacct_kms_policy


    注意:将<ARN of kms_key_account_a from Account A>替换为账户 A 中的 KMS 密钥 ARN。


    Json


    {    "Version": "2012-10-17",    "Statement": [        {            "Sid": "AllowUseOfTheKey",            "Effect": "Allow",            "Action": [                "kms:Encrypt",                "kms:Decrypt",                "kms:ReEncrypt*",                "kms:GenerateDataKey*",                "kms:DescribeKey"            ],            "Resource": [                "<ARN of kms_key_account_a from Account A>"            ]        },        {            "Sid": "AllowAttachmentOfPersistentResources",            "Effect": "Allow",            "Action": [                "kms:CreateGrant",                "kms:ListGrants",                "kms:RevokeGrant"            ],            "Resource": [                "<ARN of kms_key_account_a from Account A>"            ],            "Condition": {                "Bool": {                    "kms:GrantIsForAWSResource": true                }            }        }    ]}
    复制代码


    b) 为具有以下 IAM 策略的 Amazon Redshift 服务创建称为


    xacct_kms_role_account_b 的新 IAM 角色:



    rs_xacct_bucket_policy



    rs_xacct_kms_policy



    AWSGlueConsoleFullAccess(此托管策略为 AWS Glue 数据目录提供必需权限)


    保存 IAM 角色 ARN,供稍后使用。


    c) 通过选择编辑信任关系并将现有信任策略替换为以下内容来更改 IAM 角色


    xacct_kms_role_account_a 的信任关系:


    注意:将<Account B>替换为账户 B 的 AWS 账户 ID。


    Json


    {  "Version": "2012-10-17",  "Statement": [    {      "Effect": "Allow",      "Principal": {        "Service": "redshift.amazonaws.com"      },      "Action": "sts:AssumeRole"    },    {      "Effect": "Allow",      "Principal": {        "AWS": "arn:aws:iam::<Account B>:root"      },      "Action": "sts:AssumeRole"    }  ]}
    复制代码


    d) 创建称为


    glue_service_role_account_a 的 AWS Glue 服务 IAM 角色,并附加以下策略:



    AWSGlueServiceRole(AWS 托管策略)



    rs_xacct_bucket_policy(早前创建的托管策略)



    rs_xacct_kms_policy(早前创建的托管策略)


    注意:务必将 glue_service_role_account_a 更新为您自己的 IAM 角色


    2.登录账户 B 的 AWS 控制台,并在尚未选择的情况下,将 AWS 区域更改为 us-west-2(俄勒冈)


    a) 修改现有的 IAM 策略


    rs_xacct_assume_role_policy,并将现有的 JSON 策略替换为以下内容:


    ****注意:替换<ARN for IAM role xacct_kms_role_account_a from Account A>。


    Json


    {    "Version": "2012-10-17",    "Statement": [        {            "Sid": "Stmt1487639602000",            "Effect": "Allow",            "Action": [                "sts:AssumeRole"            ],            "Resource": ["<ARN for IAM role xacct_kms_role_account_a from Account A>"            ]        }    ]}
    复制代码

    执行 Amazon Redshift COPY

    1.从您的查询工具登录 Amazon Redshift 集群并使用下面的 DDL 创建


    客户表。


    SQL


    CREATE TABLE customer (  c_custkey      INTEGER NOT NULL,  c_name         VARCHAR(25) NOT NULL,  c_address      VARCHAR(25) NOT NULL,  c_city         VARCHAR(10) NOT NULL,  c_nation       VARCHAR(15) NOT NULL,  c_region       VARCHAR(12) NOT NULL,  c_phone        VARCHAR(15) NOT NULL,  c_mktsegment   VARCHAR(10) NOT NULL);
    复制代码


    2.现在,您应该能够成功地运行下面的 COPY 语句。


    SQL


    copy customer from 's3://rs-xacct-kms-bucket/customer/' iam_role '<ARN for IAM role redshift_role_account_b from Account B,<ARN for IAM role xacct_kms_role_account_a from Account A>'gzipregion 'us-west-2';
    复制代码


    注意:替换 IAM 角色 ARN,用逗号隔开,周围不加任何空格。


    3.运行示例查询,以验证数据已成功加载。


    SQL


    select * from customer limit 10;
    复制代码


    为要查询的 Redshift Spectrum 设置 AWS Glue 数据目录表

    现在,我们在账户 A 中创建 AWS Glue 爬网程序,以对相同的


    客户数据进行爬网,并按照下面的步骤在账户 A 的 AWS Glue 数据目录数据库


    spectrumdb_account_a 中创建称为客户的表:


    按照选项 1 中列出的步骤操作,并使用下面的更改运行爬网程序:


    1. 这一次,在账户 A 中创建爬网程序(与选项 1 中的账户 B 相反)。

    2. 在账户 A 中创建 AWS Glue 数据目录数据库

    3. spectrumdb_account_a(与账户 B 中的

    4. spectrumdb_account_b 相反,然后为爬网程序选择该数据库以创建

    5. 客户表。

    6. 提供 S3 路径的同时,选择选项我的账户中的指定路径 (与为选项 1 选择的另一个账户中的指定路径不同)。

    7. 确保将早前创建的

    8. glue_service_role_account_a 用作 AWS Glue 服务 IAM 角色。=

    执行 Redshift Spectrum 查询**

    **


    现在,已在 AWS Glue 数据目录中创建


    客户表,下面我们来使用 Redshift Spectrum 查询该表。


    1.从您的查询工具登录 Amazon Redshift 集群,并运行下面的语句。这将会为 Redshift Spectrum 创建一个称为


    spectrumxacct2 的外部架构,该架构指向账户 A 中的 AWS Glue 数据目录数据库


    spectrumdb_account_a(早前从 AWS Glue 控制台中创建)。


    SQL


    drop schema if exists spectrumxacct2;create external schema spectrumxacct2from data catalog database 'spectrumdb_account_a' iam_role '<ARN for IAM role redshift_role_account_b from Account B,<ARN for IAM role xacct_kms_role_account_a from Account A>'create external database if not exists;
    复制代码


    注意:替换 IAM 角色 ARN,用逗号隔开,周围不加任何空格。


    2.运行下面的查询,该查询应成功运行。


    SQL


    select * from spectrumxacct2.customer limit 10;
    复制代码



    注意:Spectrum 使用账户 A 中的 AWS Glue 数据目录,而非账户 B_。_

    小结

    此博文显示了如何使用 Redshift Spectrum 为 Amazon S3 中的示例 KMS 加密数据集设置跨账户 Amazon Redshift COPY 和查询的逐步演练。它演示了两种解决方案选项,可根据您希望将哪个账户的 AWS Glue 目录用于 Redshift Spectrum 进行选择。


    本文转载自 AWS 技术博客。


    原文链接:https://amazonaws-china.com/cn/blogs/china/how-to-enable-cross-account-amazon-redshift-copy-and-redshift-spectrum-query-for-aws-kms-encrypted-data-in-amazon-s3/


    2019-12-27 11:30601

    评论

    发布
    暂无评论
    发现更多内容

    CosineWarmup理论与代码实战

    华为云开发者联盟

    人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜

    为什么项目老夭折?这份项目管理指南请收好

    得物技术

    阿里菜鸟国际Java研发面经(三面+总结):JVM+架构+MySQL+Redis等

    三十而立

    面试 java

    面试滴滴、中信字节跳动等10+公司面经+面试题及答案分享(java岗)

    三十而立

    Spring Boot 如何防护 XSS + SQL 注入攻击 ?终于懂了!

    Java你猿哥

    sql Spring Boot 后端 ssm XSS

    浅谈堡垒机优化的必要性-行云管家

    行云管家

    云计算 网络安全 堡垒机 自动化运维

    聊聊To B企业的客户成功价值

    老张

    交付 客户成功

    Go 第三方 log 库之 logrus 使用

    江湖十年

    后端 日志 Go 语言

    无处不在的边缘网络感知

    阿里云视频云

    云计算 边缘云 边缘网络

    KaiwuDB 荣获第三届 ISIG 产业智能大会年度最佳技术创新奖

    KaiwuDB

    技术创新 KaiwuDB AIoT数据库

    喜马拉雅基于阿里云机器学习平台PAI-HybridBackend的深度学习模型训练优化实践

    阿里云大数据AI技术

    人工智能 深度学习 开源 gpu 企业号 3 月 PK 榜

    Serverless Streaming:毫秒级流式大文件处理探秘

    科技怪授

    PaaS

    如何防止订单重复支付?

    采菊东篱下

    Java 编程

    浪潮 KaiwuDB x 河工大 | 推进能源行业数字化转型建设

    KaiwuDB

    解决方案 数字能源 KaiwuDB

    SpringBoot快速搭建、自动流程进阶、装配机制、功能扩展点详解

    三十而立

    Java 程序员 IT

    阿里云发布「云盒+无影」云端机顶盒解决方案,打造云边端一体化的机顶盒新模式

    云布道师

    无影 云盒

    内蒙古网络安全等级保护备案办理指引

    行云管家

    等保测评 等保备案 内蒙古

    深扒RocketMQ源码之后,我找出了RocketMQ消息重复消费的7种原因

    程序员小毕

    程序员 RocketMQ 后端 架构师 消息中间件

    电脑风扇控制软件:Macs Fan Control Pro中文激活版

    真大的脸盆

    Mac Mac 软件 电脑风扇控制 风扇转速控制

    程序员标配Springboot!终于有人把SpringBoot讲的通俗易懂了

    三十而立

    SpringCloud 整合Gateway服务网关

    Java你猿哥

    spring Spring Cloud Spring Boot ssm

    真香!阿里最新出品Java面试核心讲(终极版),Github已星标50K

    Java你猿哥

    Java 后端 ssm 面经 八股文

    如此丝滑的按钮交互效果

    南城FE

    css3 前端 设计 动画 交互

    硬核!阿里出品2023版Java架构师面试指南,涵盖Java所有核心技能

    Java你猿哥

    Java 架构 后端 面经

    扩散模型大杀器 ControlNet 解析

    Openlab_cosmoplat

    人工智能 开源社区 图像

    OMG!Go语言设计模式,这样用简直不要太爽!

    博文视点Broadview

    技术领导力之路 - 安全感

    阿里技术

    技术成长

    一个基于序列的弱监督视觉信息抽取学习框架

    合合技术团队

    人工智能 计算机视觉 OCR

    精准测试之分布式调用链底层逻辑

    京东科技开发者

    分布式 精准测试 调用链 Spark 源码 企业号 3 月 PK 榜

    复杂度分析:如何分析、统计算法的执行效率和资源消耗

    京东科技开发者

    数据结构和算法 算法和数据结构 复杂度分析 空间复杂度 企业号 3 月 PK 榜

    一种异步延迟队列的实现方式

    京东科技开发者

    架构 软件架构 企业号 3 月 PK 榜 延迟处理

    如何为 Amazon S3 中的 AWS KMS 加密数据启用跨账户 Amazon Redshift COPY 和 Redshift Spectrum 查询(四)_语言 & 开发_AWS_InfoQ精选文章