当前位置: 首页 > news >正文

实现Azure Synapse Analytics安全地请求企业内部API返回数据

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

此方案通过多层安全防护确保数据访问的合规性和可靠性。

开发配置步骤

1. 创建专用域账号(企业IT协作)
  • 联系企业IT部门创建专用域账号,仅授权访问目标API。
  • 确保账号使用强密码,启用账户安全策略(如定期轮换)。

2. Azure Key Vault配置
  • 创建Key Vault:
    • 在Azure门户中创建Key Vault,启用软删除和清除保护。
  • 存储凭据:
    • 将域账号的usernamepassword分别存储为两个Secret。
  • 配置访问策略:
    • 在Key Vault中为Synapse工作区的托管身份授予Get权限。
    • 禁用不必要的访问方式(如HTTP)。

3. Azure Synapse配置
  • 启用托管身份:
    • 在Synapse工作区设置中启用系统分配的托管身份。
  • 网络配置:
    • 获取Synapse出站IP地址,提交给企业IT部门加入防火墙白名单。
    • 或配置Azure ExpressRoute/VPN实现混合连接。

4. Okta应用配置(企业IT协作)
  • 确认Okta应用使用Resource Owner PasswordClient Credentials授权模式。
  • 获取必要的认证参数(如client_idscope)。

Python源代码

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
import requests
import json
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry# 配置参数
KEY_VAULT_NAME = "<your-key-vault-name>"
USERNAME_SECRET_NAME = "api-username"
PASSWORD_SECRET_NAME = "api-password"
OKTA_TOKEN_URL = "https://<company>.okta.com/oauth2/v1/token"
CLIENT_ID = "<okta-client-id>"  # 根据实际情况调整
API_URL = "https://internal-api.company.com/data"# 初始化Azure凭证和Key Vault客户端
credential = DefaultAzureCredential()
key_vault_uri = f"https://{KEY_VAULT_NAME}.vault.azure.net"
secret_client = SecretClient(vault_url=key_vault_uri, credential=credential)def get_secret(secret_name):"""安全获取Key Vault中的机密"""try:secret = secret_client.get_secret(secret_name)return secret.valueexcept Exception as e:raise ValueError(f"Key Vault访问失败: {str(e)}")try:# 获取API凭据username = get_secret(USERNAME_SECRET_NAME)password = get_secret(PASSWORD_SECRET_NAME)# 配置带自动重试的HTTP会话session = requests.Session()retries = Retry(total=3,backoff_factor=1,status_forcelist=[500, 502, 503, 504],allowed_methods=["POST", "GET"])session.mount('https://', HTTPAdapter(max_retries=retries))# 获取Okta访问令牌token_data = {'grant_type': 'password','username': username,'password': password,'client_id': CLIENT_ID,'scope': 'api_access'  # 根据实际情况调整}token_headers = {'Content-Type': 'application/x-www-form-urlencoded'}token_response = session.post(OKTA_TOKEN_URL,data=token_data,headers=token_headers,timeout=10)token_response.raise_for_status()access_token = token_response.json().get('access_token')if not access_token:raise ValueError("Okta未返回有效访问令牌")# 调用企业APIapi_headers = {'Authorization': f'Bearer {access_token}','Accept': 'application/json'}api_response = session.get(API_URL, headers=api_headers, timeout=10)api_response.raise_for_status()# 处理JSON数据data = api_response.json()print("成功获取数据:", json.dumps(data, indent=2))# 此处可添加数据存储逻辑(如写入ADLS Gen2)except requests.exceptions.RequestException as e:print(f"API请求异常: {str(e)}")
except json.JSONDecodeError:print("API响应非JSON格式")
except Exception as e:print(f"未处理异常: {str(e)}")
finally:session.close()  # 确保释放连接

安全增强措施

  1. 最小权限原则:

    • Key Vault仅允许Synapse托管身份读取必要机密。
    • 域账号仅能访问特定API端点。
  2. 传输安全:

    • 强制使用HTTPS(Okta和API均需SSL/TLS加密)。
  3. 敏感数据处理:

    • 避免在日志中输出凭据或令牌。
    • 使用环境变量或Azure管理控制台传递非机密配置参数。
  4. 监控与审计:

    • 启用Key Vault日志和Synapse运行日志。
    • 设置Azure Monitor告警检测异常访问。
  5. 凭据轮换:

    • 定期更新Key Vault中的密码,并同步企业AD账号。

架构图

+----------------+     HTTPS     +-------------+
| Azure Synapse  |-------------->| 企业防火墙   |
| (托管身份)      |<-------------| (白名单IP)  |
+----------------+              +-------------+|                            || 获取凭据                   | 允许访问V                            V
+----------------+              +-------------+
| Azure Key Vault|              | 内部API网关 |
| (存储username/)|<------------->| (Okta认证) |
+----------------+              +-------------+
http://www.xdnf.cn/news/26875.html

相关文章:

  • @EnableAsync+@Async源码学习笔记之二
  • @EnableAsync+@Async源码学习笔记之三
  • 系统思考:危机中的转型机遇
  • STM32单片机入门学习——第43节: [12-3] 读写备份寄存器实时时钟
  • STM32 外部中断EXTI
  • 爬虫入门与requests库的使用——python爬虫
  • XCVU13P-2FHGA2104I Xilinx Virtex UltraScale+ FPGA
  • 额外篇 非递归之美:归并排序与快速排序的创新实现
  • 解决 IntelliJ IDEA 项目启动时端口冲突问题
  • Linux网络编程——基于ET模式下的Reactor
  • 使用 Vite 快速搭建现代化 React 开发环境
  • 考公:数字推理
  • 新能源汽车动力电池热管理方案全解析:开启电车续航与安全的密码
  • 『Linux_网络』 第二章 UDP_Socket编程
  • 可发1区的超级创新思路(python 、MATLAB实现):基于多尺度注意力TCN-KAN与小波变换的时间序列预测模型
  • webpack 中 chunks详解
  • MATLAB 控制系统设计与仿真 - 38
  • C++问题,忘记为类添加拷贝构造函数和赋值运算符重载
  • 动态规划算法的欢乐密码(一):斐波那契数模型
  • QT采用cmake编译时文件解析
  • 基于大语言模型的自动化单元测试生成系统及测试套件评估方法
  • 在Windows创建虚拟环境如何在pycharm中配置使用
  • 游戏引擎学习第236天:GPU 概念概述
  • 交换网络基础
  • JDOM处理XML:Java程序员的“乐高积木2.0版“
  • 【大模型】 LangChain框架 -LangChain用例
  • kafka的零拷贝技术
  • 数据结构——栈以及相应的操作
  • MAUI项目iOS应用以进 App Store 分发
  • Leakcanary框架分析:他是如何检测内存泄漏的?四大引用;Heap Dump的实现,设计原则