安全顾问API客户端SDK

ibm-cloud-security-advisor的Python项目详细描述


Build Statussemantic-release

ibm云安全顾问

此存储库包含已发布的用于ibmcloudsecurityadvisor发现和通知api的python客户机SDK。查看下面的详细信息。在

通知

对Python版本2.x和版本<;=3.4的支持已被弃用,并将在预计2019年12月底的下一个主要版本中正式放弃。参考https://github.com/IBM/python-sdk-core

概述

ibm云安全顾问允许开发人员以编程方式与ibmcloudsecurityadvisor发现和通知api交互

先决条件

  • 一个IBM Cloud帐户。在
  • 允许SDK访问您的帐户的IAM API密钥。创建一个here。在
  • 在本地计算机上安装Python>;=3.5。在

安装

要安装,请使用pipeasy_install

pip install --upgrade "ibm_cloud_security_advisor>=1.0.0"

或者

^{pr2}$

身份验证

ibm云安全顾问使用基于令牌的Identity and Access Management (IAM) authentication。在

IAM身份验证使用服务API密钥获取随调用一起传递的访问令牌。 访问令牌在有限的时间内有效,必须重新生成。在

要向SDK提供凭据,请提供IAM服务API密钥访问令牌

  • 使用API密钥让SDK管理访问令牌的生命周期。SDK请求访问令牌,确保访问令牌有效,并在必要时刷新它。在
  • 如果要自己管理生命周期,请使用访问令牌。有关详细信息,请参见Generating bearer tokens using the IAM API keySupplying the access token部分

提供IAM API密钥:

fromibm_cloud_security_advisorimportFindingsApiV1fromibm_cloud_sdk_core.authenticatorsimportIAMAuthenticatorauthenticator=IAMAuthenticator('apikey')findings_service=FindingsApiV1(authenticator=authenticator)

使用IAM API密钥生成承载令牌:

fromibm_cloud_sdk_core.authenticatorsimportIAMAuthenticator# In your API endpoint use this to generate new bearer tokensiam_token_manager=IAMAuthenticator('<apikey>')token=iam_token_manager.get_token()

提供访问令牌:

#FINDINGSfromibm_cloud_security_advisorimportFindingsApiV1fromibm_cloud_sdk_core.authenticatorsimportBearerTokenAuthenticator# in the constructor, assuming control of managing the tokenauthenticator=BearerTokenAuthenticator('your token')findings_service=FindingsApiV1(authenticator=authenticator)
#NOTIFICATIONSfromibm_cloud_security_advisorimportNotificationsApiV1fromibm_cloud_sdk_core.authenticatorsimportBearerTokenAuthenticator# in the constructor, assuming control of managing the tokenauthenticator=BearerTokenAuthenticator('your token')notifications_service=NotificationsApiV1(authenticator=authenticator)

使用SDK

ibmcloud_security_advisor Python SDK只支持服务方法的同步(阻塞)执行。所有服务方法的返回值都是DetailedResponse对象。使用此SDK执行基本的ibm_cloud_security_advisor创建操作,如下所示,并使用上面的安装和初始化说明:

#Findingsfromibm_cloud_security_advisorimportFindingsApiV1fromibm_cloud_sdk_core.authenticatorsimportIAMAuthenticatorauthenticator=IAMAuthenticator('your apikey')ibm_cloud_security_advisor_findings_service=FindingsApiV1(authenticator=authenticator)response=ibm_cloud_security_advisor_findings_service.<Methodhere<>>print(response)
#Notificationsfromibm_cloud_security_advisorimportNotificationsApiV1fromibm_cloud_sdk_core.authenticatorsimportIAMAuthenticatorauthenticator=IAMAuthenticator('your apikey')ibm_cloud_security_advisor_notifications_service=NotificationsApiV1(authenticator=authenticator)response=ibm_cloud_security_advisor_notifications_service.<Methodhere<>>print(response)

这将给出一个DetailedResponse的输出,从中可以使用get_result()get_headers()和{}分别返回结果、标题和状态代码。在

发送请求头

自定义头可以在任何请求中以dict的形式传递,如下所示:

headers={'Custom-Header':'custom_value'}

例如,要将名为Custom-Header的头发送到ibm_security_advisor_findings_api_sdk中的调用,将headers参数传递为:

fromibm_cloud_security_advisorimportFindingsApiV1fromibm_cloud_sdk_core.authenticatorsimportIAMAuthenticatorauthenticator=IAMAuthenticator('your apikey')ibm_security_advisor_findings_api_sdk_service=FindingsApiV1(authenticator=authenticator)response=ibm_security_advisor_findings_api_sdk_service.<<METHODHERE>>(headers={'Custom-Header':'custom_value'}).get_result()

错误处理

ibmcloud_security_advisor Python SDK为任何不成功的方法调用生成异常。 如果方法从对服务的API调用接收到错误响应,它将生成一个 ApiException包含以下字段。在

NAMEDESCRIPTION
codeThe HTTP response code that is returned.
messageA message that describes the error.
infoA dictionary of additional information about the error.

ApiException可以这样处理。在

fromibm_cloud_sdk_core.api_exceptionimportApiExceptiontry:response=ibm_cloud_security_advisor_findings_service.create_note(account_id="<<Account ID here>>",**data)exceptApiExceptionaserr:try:# err.code  gives status codeexcep_resp=err.http_response.json()print(excep_resp)except:print(err)

例外情况是-

{"detail":"Document already exists: abc/providers/sdktest/notes/sdk_note_id1","instance":"abc/providers/sdktest/notes/sdk_note_id1","status":409,"title":"Conflict","type":"about:blank"}

错误日志级别

默认情况下,错误日志级别被禁用,因此用户不会看到logger.errorlogger.exception记录的任何错误/异常,而是会看到其他错误/异常。 要启用它,用户可以传递enable_error_log=True。在

ibm_cloud_security_advisor_findings_service=FindingsApiV1(authenticator=authenticator,enable_error_log=True)

示例代码

调查结果API

^{tb2}$

通知API

^{3}$

文件

参见Findings API doc
Notifications API doc。在

集成测试

要运行pytest,请创建virtual env,然后运行。否则,您可能会看到以下错误

问题-https://github.com/pytest-dev/pytest/issues/2287

Traceback:
test/integration/test_note.py:26: in <module>
    from ibm_cloud_security_advisor import FindingsApiV1
   ModuleNotFoundError: No module named 'ibm_cloud_security_advisor'
  1. 安装开发模块。
    python3 -m venv env  #(for python3)source env/bin/activate
    cd ibm-coud-security-advisor-sdk-python
    pip install -r requirements-dev.txt
    
  2. 先决条件变量,要么直接导出所有变量,要么在文件中提供- 确保API_KEY有足够的权限执行结果api操作。
    • 导出环境变量
    exportAPI_KEY=<YOUR_API_KEY>
        exportACCOUNT_ID=<YOUR_ACCOUNT_ID>
        exportFINDING_API_ENDPOINT=<FINDING_API_ENDPOINT>
        exportNOTIFICATION_API_ENDPOINT=<NOTIFICATION_API_ENDPOINT>
        #optional. Use it for dev/preprod iam endpointexportIAM_ENDPOINT= <IAM_ENDPOINT>
    
    • /integration/input/cred/ibm-credentials.env文件中提供或导出您自己的.env凭据f包含文件名的完整路径的文件。在
    exportIBM_CREDENTIALS_FILE= <file_path>
    
  3. 运行测试-
python -m pytest test/integration --html=report.html --json-report --json-report-summary

一旦运行完成,html报告和。报表.json将在同一个目录中生成,它将如下所示

Integration Test result

许可证

ibm云计算安全顾问Python SDK是在apache2.0许可下发布的。许可证的全文可以在LICENSE中找到。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
实现接口方法时不允许java@Override   使用BuffereImage加载映像时java高ram使用率   java For循环混乱,为什么不是循环?   java Android网格视图字符串对齐问题   java如何将方法与比较类型的附加功能进行比较?   在Java Swing中放置JSepator后的间隙大小   java如何避免并发访问我的网站中的支付链接   java如何从现有的Unix服务器连接到FTP服务器?   Spring中的java用户相关bean定义   带有scribesjava库的wordpress Woocommerce REST API返回消费者密钥参数缺失错误消息   java我可以自动检测特定设备连接的串行端口吗?   Javafx棋盘游戏   java使用JTextPane显示HTML,支持SVG吗?   SpringBoot如何在java中将映射转换为实体对象?   如何使用java代码对xls文件进行密码保护   Java JPA(EclipseLink)如何在持久化实际实体之前接收下一个生成的值?   Javaservlet启动外部进程