实现AWS Glue安全地请求企业内部API返回数据

需要编写一段Glue的Python代码在AWS云上运行,它需要访问企业内部的API获取JSON格式的数据,企业有网关和防火墙,API有公司的okta身份认证,通过公司的域账号来授权访问,现在需要创建一个专用的域账号,让Glue访问Secret Manager,来获取账号密码,然后通过配置访问公司内部API的数据,请写出所有的开发配置步骤,以及完成这一功能的所有的Python源代码,需要确保安全性和可靠性。

此方案遵循AWS Well-Architected Framework的最佳实践,建议在实施前进行以下验证:

  1. 企业防火墙白名单测试
  2. Okta应用权限最小化验证
  3. 密钥访问策略的权限边界检查
  4. 灾难恢复场景的压力测试

一、基础设施配置步骤

  1. IAM权限配置
  • 创建Glue作业执行角色(如:GlueAPIAccessRole)
  • 添加以下策略:
{
   
    "Version": "2012-10-17",
    "Statement": [
        {
   
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "arn:aws:secretsmanager:region:account-id:secret:secret-name-*"
        },
        {
   
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "arn:aws:kms:region:account-id:key/key-id"
        }
    ]
}
  1. Secrets Manager配置
aws secretsmanager create-secret --name prod/glue/api-creds \
--description "API Credentials for Glue" \
--secret-string '{
  "okta_domain":"yourcompany.okta.com",
  "client_id":"abcd1234",
  "username":"glue_service_account",
  "password":"sTr0ngP@ss!",
  "api_endpoint":"https://internal-api.yourcompany.com/v1/data"
}' \
--kms-key-id alias/aws/secretsmanager
  1. 网络配置
  • 创建Glue VPC连接器
  • 配置安全组规则:
    • 出站443端口开放到企业API网关IP范围
    • 入站端口限制为Glue控制平面
  • 配置路由表指向企业VPN网关
  1. Okta应用配置
  • 创建新的Okta应用集成
  • 应用类型:Service
  • 授权类型:Resource Owner Password Credentials
  • 分配创建的专用服务账号

二、Python代码实现

import sys
import json
import requests
import boto3
from botocore.exceptions import ClientError
from awsglue.utils import getResolvedOptions

# 初始化AWS客户端
session = boto3.session.Session()
secrets_client = session.client(service_name='secretsmanager')

class APIClientError(Exception):
    """自定义API异常基类"""
    pass

class SecretRetrievalError(APIClientError)

你可能感兴趣的:(aws,开发语言,安全,云计算,python)