SARM SDK
资产风险管理平台 Python SDK

SARM SDK 是 SARM(资产风险管理平台)的官方 Python SDK,提供了完整的 API 封装和数据模型,支持组织架构、软件成分、漏洞管理、安全问题等全业务流程的数据导入和管理。
✨ 主要特性
- 🚀 简单易用: 提供 Pythonic 的 API 接口,易于学习和使用
- 📊 完整覆盖: 支持平台所有核心功能模块
- 🔒 类型安全: 基于 Pydantic 提供完整的数据验证和类型提示
- 🔄 批量操作: 支持高效的批量数据导入和处理
- 🛡️ 异常处理: 完善的错误处理和异常体系
- 📝 丰富示例: 提供详细的使用示例和最佳实践
📦 安装
pip install sarm-sdk
🚀 快速开始
基础使用
from sarm_sdk import SARMClient
from sarm_sdk.models import OrganizeInsert, VulnInsert
client = SARMClient(
base_url="https://your-platform-api.com",
token="your-bearer-token"
)
org = OrganizeInsert(
organize_name="技术部",
organize_unique_id="ORG-001",
organize_punique_id="0",
status="active"
)
result = client.organizations.create(org, execute_release=True)
print(f"组织创建成功: {result.success_count}个")
client.organizations.refresh_cache()
vuln = VulnInsert(
vuln_unique_id="VULN-001",
title="SQL注入漏洞",
description="存在SQL注入风险",
severity="high",
security_capability_unique_id="SAST-001"
)
result = client.vulnerabilities.create(vuln, execute_release=True)
print(f"漏洞创建成功: {result.success_count}个")
client.close()
批量操作
from sarm_sdk.models import ComponentInsert
components = [
ComponentInsert(
component_unique_id="spring-boot-2.7.0",
component_name="Spring Boot",
component_version="2.7.0",
status="active",
asset_type="open_source_component",
ecosystem="Maven"
),
ComponentInsert(
component_unique_id="jackson-2.13.2",
component_name="Jackson",
component_version="2.13.2",
status="active",
asset_type="open_source_component",
ecosystem="Maven"
)
]
result = client.components.create_batch(components, execute_release=True)
print(f"批量创建完成: 总数{result.total_count}, 成功{result.success_count}, 失败{result.failed_count}")
for failed_item in result.failed_items:
print(f"失败: {failed_item.unique_id}, 原因: {failed_item.msg}")
📚 核心功能模块
1. 组织架构管理 (client.organizations
)
client.organizations.create(org_data, execute_release=True)
client.organizations.create_batch(org_list, execute_release=True)
client.organizations.refresh_cache()
tree = client.organizations.get_tree()
result = client.organizations.get(organize_name="技术部", page=1, limit=50)
2. 漏洞管理 (client.vulnerabilities
)
client.vulnerabilities.create(vuln_data, execute_release=True)
client.vulnerabilities.create_batch(vuln_list, execute_release=True)
result = client.vulnerabilities.get_list(severity="critical", page=1, limit=50)
3. 安全问题管理 (client.security_issues
)
client.security_issues.create(issue_data, execute_release=True)
client.security_issues.create_batch(issue_list, execute_release=True)
result = client.security_issues.get_list(issue_level="critical")
4. 软件成分管理 (client.components
)
client.components.create(component_data, execute_release=True)
client.components.create_batch(component_list, execute_release=True)
result = client.components.get_list(asset_type="open_source_component")
5. 应用载体管理 (client.carriers
)
client.carriers.create(carrier_data, execute_release=True)
client.carriers.create_batch(carrier_list, execute_release=True)
6. 安全能力管理 (client.security_capabilities
)
client.security_capabilities.create(capability_data)
result = client.security_capabilities.get_list()
🔧 高级特性
错误处理
from sarm_sdk.exceptions import (
SARMException,
SARMAPIError,
SARMValidationError,
SARMNetworkError
)
try:
result = client.organizations.create(org_data)
except SARMValidationError as e:
print(f"数据验证失败: {e}")
print(f"字段错误: {e.field_errors}")
except SARMAPIError as e:
print(f"API调用失败: {e}")
print(f"状态码: {e.status_code}")
print(f"错误代码: {e.error_code}")
except SARMNetworkError as e:
print(f"网络错误: {e}")
except SARMException as e:
print(f"SDK错误: {e}")
客户端配置
client = SARMClient(
base_url="https://api.platform.com",
token="your-token",
timeout=60,
max_retries=3,
retry_backoff_factor=0.5
)
if client.test_connection():
print("连接成功")
else:
print("连接失败")
Execute-Release 参数
result = client.organizations.create(org_data, execute_release=True)
result = client.organizations.create(org_data, execute_release=False)
📖 数据模型
SDK 提供了完整的数据模型,支持数据验证和类型提示:
from sarm_sdk.models import (
OrganizeInsert, Organization, OrganizationTree,
VulnInsert, Vulnerability, VulnCvss, VulnContext,
IssueInsert, SecurityIssue,
ComponentInsert, Component,
CarrierInsert, Carrier,
SecurityCapability,
BatchOperationResult, SuccessResponse, ErrorResponse
)
🚨 重要注意事项
1. 数据导入顺序
建议按以下顺序导入数据,确保依赖关系正确:
client.security_capabilities.create_batch(capabilities)
client.organizations.create_batch(organizations, execute_release=True)
client.organizations.refresh_cache()
client.carriers.create_batch(carriers, execute_release=True)
client.components.create_batch(components, execute_release=True)
client.vulnerabilities.create_batch(vulnerabilities, execute_release=True)
client.security_issues.create_batch(issues, execute_release=True)
2. 批量操作限制
- 单次批量操作最大支持 1000条 记录
- 请求大小限制:最大 10MB
- 请求频率限制:每分钟最大 1000次 请求
3. 组织架构缓存
- 批量导入组织数据后 必须 调用
refresh_cache()
方法
- 缓存刷新是异步操作,大量数据可能需要等待
- 建议在业务低峰期执行批量操作