在 AWS EMR PySpark 作业中管理机密
Managing secrets in AWS EMR PySpark job
我有一个 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()
提交作业
我想到了两种方法:
- 要求第 3 方将一项策略添加到他们的 S3 存储桶中。
说明:您的 EMR 集群(位于账户 A 中)将有一个 IAM 用户 。请他们授予从帐户 B 到您的帐户 A EMR_EC2_ROLE 的访问权限。
您可以找到更多详细信息 .
- 如果这不可行,您可以使用 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"
}
]
}
我有一个 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()
提交作业
我想到了两种方法:
- 要求第 3 方将一项策略添加到他们的 S3 存储桶中。
说明:您的 EMR 集群(位于账户 A 中)将有一个 IAM 用户
- 如果这不可行,您可以使用 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"
}
]
}