速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

    评论

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

    移动UI交互设计与动效制作

    坚果

    设计 UI 坚果派

    关于DDOS,有什么方法解决

    德迅云安全杨德俊

    DDoS 服务器安全 游戏安全 网站安全

    GraphPad Prism 10 for Mac(统计分析绘图软件) v10.0.0.3注册激活版

    mac

    苹果mac Windows软件 GraphPad Prism 统计和绘图软件

    从学习到实践——火山引擎多媒体处理框架BMF的深度探索

    熬夜磕代码、

    AI元年:一名前端程序员的技术之旅

    Serenade

    #前端

    架构决策的弹性

    agnostic

    架构决策

    FlowJo 10 for Mac特别版:流式细胞分析的强大助手

    iMac小白

    记一次本地环境启动不了Mysql的故障

    DoHornBurg

    Java MySQL hyper-v

    基于 ACK One 实现简单的跨云协同,让业务管理更高效

    阿里巴巴云原生

    阿里云 容器 云原生

    基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道

    阿里巴巴云原生

    阿里云 云原生 网格

    机密计算容器前沿探索与 AI 场景应用

    阿里巴巴云原生

    阿里云 容器 云原生

    2023 年最受欢迎的 12 款 Chrome 浏览器扩展

    南城FE

    前端 浏览器 Chrome Extension

    Compressor for Mac(视频转码工具) 4.7永久激活版

    mac

    windows 苹果mac Compressor 视频压缩和转码软件

    文心一言 VS 讯飞星火 VS chatgpt (163)-- 算法导论13.1 3题

    福大大架构师每日一题

    福大大架构师每日一题

    E3PO: 探索360°视频流传输的未来

    不会算法。

    全面的开发者文档和用户目标解析:API 文档指南和开发者旅程

    小万哥

    程序人生 软件工程 后端开发 API文档 技术写作

    Photoshop Elements 2020 for Mac(图形处理软件) v18.0(2020.01.20)永久激活版

    mac

    苹果mac Windows软件 Photoshop Elements 2020 图形处理工具 ps elements

    Eagle for Mac(图片管理工具) 1.9.2永久激活版

    mac

    苹果mac Windows软件 Eagle 图片素材管理软件

    怎么"黑"了ChatGPT?

    Bob Lin

    人工智能 openai ChatGPT GPT-4 #LangChain

    Keka for Mac激活版下载:轻松解压缩,畅享文件管理

    iMac小白

    Parallels Desktop 18 for Mac破解版:丰富的特性和便捷的体验

    iMac小白

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