开工福利|免费学 2200+ 精品线上课,企业成员人人可得! 了解详情
写点什么

如何为 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:30643

    评论

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

    分布式进阶(二十三):Nginx 服务器应用详解

    No Silver Bullet

    nginx https 正向代理与反向代理 SSL证书 2月月更

    有奖调查| 2022 Apache Pulsar 怎么过,你们说了算

    Apache Pulsar

    开源 云原生 中间件 Apache Pulsar Apache Pulsar 社区

    低代码OR零代码,企业如何选择自身所需的软件开发平台?

    BeeWorks

    2021盘点 | 云主机年度榜单出炉,Top5花落谁家?

    博睿数据

    Camtasia卡点相册视频教程

    淋雨

    Camtasia 录屏软件

    开源商业模式促进金融业科技生态的发展

    王字 Wannz

    小程序 开源 IT 金融

    圆桌会议:如何避免踩到移动研发中,效能提升那些坑

    王字 Wannz

    移动开发 迭代

    Linux之at命令

    入门小站

    Linux

    MySQL 是如何实现RC事务隔离级别的

    华为云开发者联盟

    MySQL ReadView 事务隔离 RC事务隔离 Read Committed

    【连接平台」企业告警信息通过机器人同步至钉钉群

    钉钉开发者

    连接器 钉钉应用开发 钉群

    手把手教你使用HarmonyOS本地模拟器

    HarmonyOS开发者

    HarmonyOS DevEco Studio

    延迟任务场景,该如何提高吞吐量和时效性

    华为云开发者联盟

    redis 延迟任务 低延迟 Redis 消费队列

    FinClip 与 mPaaS:轻应用平台与移动应用开发平台

    王字 Wannz

    小程序 移动开发 mPaaS finclip 小程序容器

    远程办公团队如何沟通?

    王字 Wannz

    远程办公 wrh 居家办公 线下办公 soho

    FinClip 的 2021 与 2022

    王字 Wannz

    finclip 小程序容器 小程序开发 小程序管理平台

    OpenHarmony移植案例:如何适配服务启动引导部件bootstrap_lite

    华为云开发者联盟

    开发板 OpenHarmony startup子系统 bootstrap_lite

    各项结果排名第一!百度内容技术架构团队在国际向量检索大赛BigANN中斩获佳绩

    百度Geek说

    百度 内容 前端 后端

    阿里云EMAS 1月产品动态

    移动研发平台EMAS

    阿里云 程序人生 移动开发 #EMAS

    架构实战营:模块七作业

    Geek_93ffb0

    「架构实战营」

    我与音视频的故事 | 社区征文

    Changing Lin

    音视频

    大模型应用新范式:统一特征表示优化(UFO)

    百度开发者中心

    恒源云(GPUSHARE)_替代MLM的预训练任务,真的超简单吗?

    恒源云

    人工智能 自然语言处理 深度学习

    【网络安全】一款针对Flutter的逆向工程分析工具

    H

    网络安全 逆向分析

    小程序框架与平台编译对比

    王字 Wannz

    小程序 百度智能小程序 头条小程序 finclip 小程序框架

    2022年低代码的变化与趋势

    BeeWorks

    IT人的笔记本——全面了解 Jupyter

    dongge

    jupyterlab

    Java如何实现消费数据隔离?

    CRMEB

    OCR技术用于在线身份认证的运营效果分析

    OCR

    在线YAML转Properties工具

    入门小站

    工具

    利用鸿蒙JavaUI 框架的 WebView 加载本地冰墩墩网页

    宇宙之一粟

    鸿蒙开发 2月月更

    FinClip 与 uniapp:轻应用平台与前端开发框架

    王字 Wannz

    小程序 uniapp 移动开发 finclip

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