【问题标题】:Managing secrets in AWS EMR PySpark job在 AWS EMR PySpark 作业中管理机密
【发布时间】:2020-06-05 13:37:44
【问题描述】:

我有一个 EMR PySpark 作业,需要访问第 3 方拥有的 s3 存储桶。

PySpark 作业存储在s3://mybucket/job.py 并作为一个步骤提交

        {
            "Name": "Process promo_regs",
            "ActionOnFailure": "TERMINATE_CLUSTER",
            "HadoopJarStep": {
                "Jar": "command-runner.jar",
                "Args": ["spark-submit", "--master", "yarn", "--deploy-mode cluster", "s3://mybucket.job.py"],
            }
        }

job.py我配置了一个boto3 s3客户端。

from pyspark.sql import SparkSession
import boto3

# How to inject this?
env = {
    'AWS_ACCESS_KEY_ID': '',
    '#AWS_SECRET_ACCESS_KEY': '',
    'AWS_REGION_NAME': ''

}
s3 = boto3.client(
    's3',
    aws_access_key_id=env['AWS_ACCESS_KEY_ID'],
    aws_secret_access_key=env['#AWS_SECRET_ACCESS_KEY'],
    region_name=env['AWS_REGION_NAME'],

spark = (SparkSession
         .builder
         .appName("Test processing dummy data")
         .getOrCreate())


将访问密钥安全地注入脚本有哪些选择?

我正在启动集群并使用boto3.client('emr').run_job_flow() 提交作业(如果这很重要)

【问题讨论】:

    标签: amazon-web-services amazon-emr


    【解决方案1】:

    我能想到的方法有两种:

    1. 要求第 3 方将一项策略全部添加到他们的 S3 存储桶中。

    说明:您的 EMR 集群(位于账户 A 中)将有一个 IAM 用户 EMR_EC2_ROLE。要求他们授予账户 B 对您账户 A 的 EMR_EC2_ROLE 的访问权限。 您可以找到更多详细信息here

    1. 如果这不可能,您可以使用 AWS Secret Manager。授予 EMR_EC2_ROLE 权限。使用 boto3 在运行时获取详细信息。
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "secretsmanager:GetSecretValue"
                ],
                "Resource": "arn:aws:secretsmanager:us-east-1:<account-no>:secret:<Secret prefix if you have any>*",
                "Effect": "Allow",
                "Sid": "VisualEditor0"
            }
        ]
    }
    

    【讨论】:

    • 谢谢,两者都有意义!我们将看看哪一个是第 3 方可以接受的。这里的参考是boto3 secrets api的链接
    猜你喜欢
    • 2019-10-25
    • 1970-01-01
    • 2020-09-27
    • 2020-11-25
    • 2021-06-28
    • 1970-01-01
    • 2019-09-13
    • 2022-12-16
    • 1970-01-01
    相关资源
    最近更新 更多