You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求AWS Glue Job Spark脚本:从Secret Manager获取密钥

从AWS Secrets Manager获取密钥的Glue Job Spark脚本

以下是可直接在AWS Glue Job中运行的Spark脚本,用于从Secrets Manager提取敏感凭证,适用于数据库访问、API密钥调用等场景:

import sys
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions
import boto3
import json

# 初始化Glue上下文
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
glueContext = GlueContext(spark.sparkContext)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# 定义Secrets Manager密钥获取函数
def get_secret(secret_name, region_name="us-east-1"):
    session = boto3.session.Session()
    client = session.client(
        service_name='secretsmanager',
        region_name=region_name
    )
    
    try:
        response = client.get_secret_value(SecretId=secret_name)
    except Exception as e:
        # 捕获权限不足、密钥不存在等异常
        raise e
    
    # 解析JSON格式的密钥内容(根据实际存储格式调整)
    return json.loads(response['SecretString'])

# 业务逻辑示例
if __name__ == "__main__":
    try:
        # 替换为你的密钥名称和区域
        secret_name = "prod/mysql-credentials"
        target_region = "us-west-2"
        
        # 获取密钥
        credentials = get_secret(secret_name, target_region)
        
        # 提取具体凭证字段(与你的密钥存储结构对应)
        db_user = credentials['username']
        db_pass = credentials['password']
        db_endpoint = credentials['host']
        
        # 后续可添加数据库连接、数据处理等逻辑
        print(f"成功获取凭证:用户{db_user},端点{db_endpoint}")
        
        job.commit()
    except Exception as e:
        print(f"执行失败:{str(e)}")
        job.commit()

核心注意事项

  • IAM权限配置:确保Glue Job使用的IAM角色包含secretsmanager:GetSecretValue权限,示例策略片段如下:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "secretsmanager:GetSecretValue",
                "Resource": "arn:aws:secretsmanager:你的区域:你的账号ID:secret:你的密钥名称-*"
            }
        ]
    }
    
  • 密钥格式适配:若你的密钥为纯文本而非JSON,直接返回response['SecretString']即可,无需JSON解析。
  • 区域一致性:脚本中的区域需与Secrets Manager密钥所在区域保持一致。

内容的提问来源于stack exchange,提问作者Johnny Bravo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:50:40