在AWS上使用KMS客户端密钥加密S3文件,同时支持PySpark读写和Snowflake导入

ops/2025/2/4 3:29:36/

现有AWS EMR集群上运行PySpark代码,可以读写S3上的数据文件,Snowflake数据仓库也需要导入S3上的文件到表。现在要用AWS KMS有客户端密钥加密S3上的文件,同时允许PySpark代码,可以读写S3上的数据文件,Snowflake数据仓库导入S3上的文件到表。

为了实现AWS EMR上的PySpark读写KMS加密的S3文件,并让Snowflake导入这些文件,请按照以下步骤操作:

一、S3文件加密配置

  1. 使用SSE-KMS加密S3文件
    • 上传文件时设置加密头:
      aws s3 cp localfile s3://your-bucket/path/ --sse aws:kms --sse-kms-key-id <KMS_KEY_ARN>
      
    • 或通过AWS控制台上传时选择“AWS-KMS”加密并指定CMK。

二、配置EMR集群访问KMS加密文件

  1. IAM角色权限
    • 确保EMR的EC2实例角色(如EMR_EC2_DefaultRole)附加以下策略:
      {"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["kms:Decrypt","kms:Encrypt","kms:GenerateDataKey"],"Resource": "<KMS_KEY_ARN>"}]
      }
      
  2. PySpark配置
    • spark-defaults.conf中添加:
      spark.hadoop.fs.s3a.server-side-encryption-algorithm AWS-KMS
      spark.hadoop.fs.s3a.server-side-encryption.key <KMS_KEY_ARN>
      
    • 或在代码中设置:
      python">spark.conf.set("fs.s3a.server-side-encryption-algorithm", "AWS-KMS")
      spark.conf.set("fs.s3a.server-side-encryption.key", "<KMS_KEY_ARN>")
      

三、Snowflake导入加密文件配置

  1. IAM角色授权
    • 在Snowflake中创建或更新存储集成对象:
      CREATE STORAGE INTEGRATION s3_intTYPE = EXTERNAL_STAGESTORAGE_PROVIDER = 'S3'ENABLED = TRUESTORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/snowflake_role'STORAGE_ALLOWED_LOCATIONS = ('s3://your-bucket/path/');
      
    • 为Snowflake的IAM角色添加KMS权限:
      {"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": "kms:Decrypt","Resource": "<KMS_KEY_ARN>"}]
      }
      
  2. 创建外部Stage并导入数据
    CREATE STAGE my_stageURL = 's3://your-bucket/path/'STORAGE_INTEGRATION = s3_intENCRYPTION = (TYPE = 'AWS_KMS' KMS_KEY_ID = '<KMS_KEY_ARN>');COPY INTO my_table
    FROM @my_stage
    FILE_FORMAT = (TYPE = PARQUET);
    

四、验证与故障排查

  1. EMR读写测试
    • 运行PySpark读取/写入S3路径,检查无权限错误。
  2. Snowflake导入测试
    • 执行COPY INTO命令后,检查COPY_HISTORY验证是否成功。
  3. 权限检查
    • 确认KMS密钥策略允许EMR角色和Snowflake角色的kms:Decrypt
    • 确保S3存储桶策略允许两者的访问。

五、注意事项

  • 区域一致性:确保KMS密钥、S3存储桶、EMR集群和Snowflake账户在同一AWS区域。
  • 客户端加密:若使用客户端加密(非SSE-KMS),需在PySpark中处理加解密逻辑,并确保Snowflake支持(需自定义解决方案,可能复杂)。
  • 密钥策略:KMS密钥的策略必须显式允许EMR和Snowflake的IAM角色使用密钥。

http://www.ppmy.cn/ops/155461.html

相关文章

即梦(Dreamina)技术浅析(四):生成对抗网络

即梦(Dreamina) 的生成对抗网络(GAN,Generative Adversarial Network)技术是其核心功能之一,用于生成高质量的图像、文本和视频内容。GAN 是一种深度学习模型,由生成器(Generator)和判别器(Discriminator)两部分组成,通过对抗训练的方式不断提升生成内容的质量。 …

ChatGPT与GPT的区别与联系

ChatGPT 和 GPT 都是基于 Transformer 架构的语言模型&#xff0c;但它们有不同的侧重点和应用。下面我们来探讨一下它们的区别与联系。 1. GPT&#xff08;Generative Pre-trained Transformer&#xff09; GPT 是一类由 OpenAI 开发的语言模型&#xff0c;基于 Transformer…

架构技能(四):需求分析

需求分析&#xff0c;即分析需求&#xff0c;分析软件用户需要解决的问题。 需求分析的下一环节是软件的整体架构设计&#xff0c;需求是输入&#xff0c;架构是输出&#xff0c;需求决定了架构。 决定架构的是软件的所有需求吗&#xff1f;肯定不是&#xff0c;真正决定架构…

Python 网络爬虫实战:从基础到高级爬取技术

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 网络爬虫&#xff08;Web Scraping&#xff09;是一种自动化技术&#xff0c;利用程序从网页中提取数据&#xff0c;广泛…

UI线程用到COM只能选单线程模型

无论用不用UI库&#xff0c;哪怕是用Win32 API手搓UI&#xff0c;UI线程要用COM的话&#xff0c;必须初始化为单线程单元(STA)&#xff0c;即CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);&#xff0c;不能用MULTITHREADTHREADED。 实际上&#xff0c;很多(WPF等)UI库若…

C++学习——认识和与C的区别

目录 前言 一、什么是C 二、C关键字 三、与C语言不同的地方 3.1头文件 四、命名空间 4.1命名空间的概念写法 4.2命名空间的访问 4.3命名空间的嵌套 4.4命名空间在实际中的几种写法 五、输入输出 5.1cout 5.2endl 5.3cin 总结 前言 开启新的篇章&#xff0c;这里…

记录 | 基于MaxKB的仿小红书旅游文章AI制作(含图文、视频)

目录 前言一、创建应用Step1 表单Step2 AI对话生成旅游攻略提炼场景Step3 图片生成Step4 视频生成Step5 指定回复二、检验效果三、整体结构视图更新时间前言 参考文章: 自己的感想 想复现文章的内容你需要先学习下我之前的三篇文章中的记录。 1、记录 | Docker的windows版安装…

DeepSeek 核心技术全景解析

DeepSeek 核心技术全景解析&#xff1a;突破性创新背后的设计哲学 DeepSeek的创新不仅仅是对AI基础架构的改进&#xff0c;更是一场范式革命。本文将深入剖析其核心技术&#xff0c;探讨 如何突破 Transformer 计算瓶颈、如何在 MoE&#xff08;Mixture of Experts&#xff09…