ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 AWS SDK for SAP ABAP 读取 Secrets Manager 密钥:GetSecretValue 与 BatchGetSecretValue 示例深度解析

使用 AWS SDK for SAP ABAP 读取 Secrets Manager 密钥:GetSecretValue 与 BatchGetSecretValue 示例深度解析 示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载本文以 sap-abap/services/smr/README.md 为主线结合仓库中smr目录下的完整 ABAP 源码与单元测试系统讲解如何通过 AWS SDK for SAP ABAP 调用 AWS Secrets Manager 的两个核心读取动作GetSecretValue获取单个密钥与BatchGetSecretValue按过滤器批量获取密钥。读者将掌握会话与客户端工厂的创建模式、请求参数与返回值类型、异常处理分支以及如何用DANGEROUS级别的 ABAP 单元测试在真实 AWS 环境中验证读取逻辑。概述示例做了什么Secrets Manager 是一项用于安全地加密、存储和检索数据库及其他服务凭据的 AWS 服务。本示例展示了如何在 SAP ABAP 环境中通过 AWS SDK for SAP ABAP 与之交互覆盖两种单动作Single actionsGetSecretValue根据密钥 ID 获取单个密钥的明文值BatchGetSecretValue通过过滤器Filter一次查询并批量返回多个密钥值。这两个动作的完整实现位于 核心实现类#awsex#cl_smr_actions.clas.abap其类元数据声明于 类 XML 定义类名/AWSEX/CL_SMR_ACTIONS描述为 Secrets-manager Code Example已启用单元测试WITH_UNIT_TESTS所属包定义于 package.devc.xml。测试逻辑则位于 单元测试类。⚠ 重要提示运行这些代码含测试可能在你的 AWS 账户中产生费用。建议遵循最小权限原则仅为任务授予所需的最低权限该代码未经所有 AWS 区域的验证具体可用性请参考 AWS 区域服务列表。前置条件在运行示例之前需要先完成以下准备工作详见 sap-abap 目录总 README拥有一个 AWS 账户按 AWS SDK for SAP ABAP 全局配置指南 配置默认凭证Credentials与默认 AWS 区域Region每个示例均可用事务码SE24Class Builder执行各服务目录下的独立 README 提供了该服务的具体示例说明。代码示例以 abapGit 对象格式存放于sap-abap/services/smr/目录可直接通过 abapGit 导入 SAP 系统后运行。单动作一GetSecretValue 获取单个密钥GetSecretValue是最基础的密钥读取动作。原 README 中链接的代码位置为 GetSecretValue 示例其完整实现如下METHOD get_secret_value. CONSTANTS cv_pfl TYPE /aws1/rt_profile_id VALUE ZCODE_DEMO. DATA(lo_session) /aws1/cl_rt_session_awscreate( cv_pfl ). DATA(lo_smr) /aws1/cl_smr_factorycreate( lo_session ). snippet-start:[smr.abapv1.get_secret_value] TRY. iv_secret_name MySecretName DATA(lo_result) lo_smr-getsecretvalue( iv_secretid iv_secret_name ). ov_secret_value lo_result-get_secretstring( ). MESSAGE Secret value retrieved successfully. TYPE I. CATCH /aws1/cx_smrresourcenotfoundex. MESSAGE The requested secret was not found. TYPE E. CATCH /aws1/cx_smrdecryptionfailure. MESSAGE Failed to decrypt the secret. TYPE E. CATCH /aws1/cx_smrinvalidparameterex. MESSAGE Invalid parameter provided. TYPE E. CATCH /aws1/cx_smrinvalidrequestex. MESSAGE Invalid request. TYPE E. ENDTRY. snippet-end:[smr.abapv1.get_secret_value] ENDMETHOD.方法签名与参数类型对应类定义中#awsex#cl_smr_actions.clas.abap第 1016 行的方法签名为METHODS get_secret_value IMPORTING !iv_secret_name TYPE /aws1/smrsecretidtype EXPORTING !ov_secret_value TYPE /aws1/smrsecretstringtype RAISING /aws1/cx_rt_generic.iv_secret_name/aws1/smrsecretidtype要读取的密钥 ID。注意该类型对应 Secrets Manager 的SecretId既可以是密钥名称Name也可以是密钥的 Amazon Resource NameARN实际使用时可传入类似MySecretName的字面值。ov_secret_value/aws1/smrsecretstringtype返回的密钥明文类型对应 API 的SecretString。对于存储 JSON 文本如数据库连接串、用户名密码的密钥可直接使用该值。方法以RAISING /aws1/cx_rt_generic声明所有 AWS 运行时异常均由此基类抛出。执行流程拆解创建会话/aws1/cl_rt_session_awscreate( cv_pfl )使用配置文件ZCODE_DEMO/aws1/rt_profile_id类型创建 AWS 运行时会话。配置文件承载凭证与区域设置是 SDK for SAP ABAP 的全局设置入口。创建服务客户端/aws1/cl_smr_factorycreate( lo_session )通过工厂模式基于会话创建 Secrets Manager 客户端实例lo_smr。发起调用lo_smr-getsecretvalue( iv_secretid iv_secret_name )对应 Secrets Manager 的GetSecretValueAPI返回结果对象lo_result。提取返回值lo_result-get_secretstring( )从结果对象中取出SecretString字段并赋给输出参数ov_secret_value。用户反馈成功时抛出信息类消息Secret value retrieved successfully.TYPE I。异常处理分支示例对四种典型的 Secrets Manager 异常分别做了明确处理异常类含义示例处理/aws1/cx_smrresourcenotfoundex请求的密钥不存在ResourceNotFoundException输出The requested secret was not found./aws1/cx_smrdecryptionfailure密钥解密失败DecryptionFailure多与 KMS 权限或密钥问题相关输出Failed to decrypt the secret./aws1/cx_smrinvalidparameterex参数无效InvalidParameterException输出Invalid parameter provided./aws1/cx_smrinvalidrequestex请求无效InvalidRequestException输出Invalid request.这种业务异常细分 运行时基类兜底的结构是 SDK for SAP ABAP 异常处理的典型写法便于在生产环境中针对不同失败原因做差异化告警与重试策略。单动作二BatchGetSecretValue 批量获取密钥BatchGetSecretValue允许通过过滤器一次查询多个密钥适合批量拉取一批关联凭据的场景。原 README 中链接的代码位置为 BatchGetSecretValue 示例其完整实现如下METHOD batch_get_secret_value. CONSTANTS cv_pfl TYPE /aws1/rt_profile_id VALUE ZCODE_DEMO. DATA(lo_session) /aws1/cl_rt_session_awscreate( cv_pfl ). DATA(lo_smr) /aws1/cl_smr_factorycreate( lo_session ). snippet-start:[smr.abapv1.batch_get_secret_value] TRY. iv_filter_name mySecret DATA(lo_result) lo_smr-batchgetsecretvalue( it_filters VALUE /aws1/cl_smrfiltertt_filterslisttype( ( NEW /aws1/cl_smrfilter( iv_key name it_values VALUE /aws1/cl_smrfiltvalsstrlist_wtt_filtervaluesstringlist( ( NEW /aws1/cl_smrfiltvalsstrlist_w( iv_value iv_filter_name ) ) ) ) ) ) ). ot_secret_values lo_result-get_secretvalues( ). MESSAGE Secrets retrieved successfully. TYPE I. CATCH /aws1/cx_smrresourcenotfoundex. MESSAGE One or more requested secrets were not found. TYPE E. CATCH /aws1/cx_smrdecryptionfailure. MESSAGE Failed to decrypt one or more secrets. TYPE E. CATCH /aws1/cx_smrinvalidparameterex. MESSAGE Invalid parameter provided. TYPE E. CATCH /aws1/cx_smrinvalidrequestex. MESSAGE Invalid request. TYPE E. ENDTRY. snippet-end:[smr.abapv1.batch_get_secret_value] ENDMETHOD.方法签名与参数类型METHODS batch_get_secret_value IMPORTING !iv_filter_name TYPE /aws1/smrfiltervaluestringtype EXPORTING !ot_secret_values TYPE /aws1/cl_smrsecretvalueentrytt_secretvaluestype RAISING /aws1/cx_rt_generic.iv_filter_name/aws1/smrfiltervaluestringtype过滤器值即按密钥名称前缀进行匹配的字符串例如mySecret或测试中使用的abap-smr-test-secret-前缀。ot_secret_values/aws1/cl_smrsecretvalueentrytt_secretvaluestype批量返回的结果表元素为SecretValueEntry类型的内部表。过滤器结构的嵌套构建本示例的核心难点在于it_filters参数的嵌套内部表构造共分三层过滤器列表VALUE /aws1/cl_smrfiltertt_filterslisttype( ... )创建过滤器类型的内部表单个过滤器NEW /aws1/cl_smrfilter( iv_key name ... )其中iv_key name表示按密钥名称过滤过滤值列表VALUE /aws1/cl_smrfiltvalsstrlist_wtt_filtervaluesstringlist( ( NEW /aws1/cl_smrfiltvalsstrlist_w( iv_value iv_filter_name ) ) )为当前过滤器指定匹配值支持多值。调用完成后lo_result-get_secretvalues( )返回全部匹配密钥的条目表供上层进一步遍历读取每个条目的SecretString。单元测试真实 AWS 环境下的验证示例配套的单元测试位于 单元测试类#awsex#cl_smr_actions.clas.testclasses.abap其声明为CLASS ltc_awsex_cl_smr_actions DEFINITION FOR TESTING DURATION LONG RISK LEVEL DANGEROUS.DURATION LONG与RISK LEVEL DANGEROUS意味着该测试会在测试账户中创建并删除真实的 AWS 资源因此只能在合适的测试专用 AWS 账户中运行该风险提示同时出现在 sap-abap 目录总 README 中。测试准备class_setup通过/awsex/cl_utilsget_random_string( )生成随机后缀构造三个互不冲突的密钥名abap-smr-test-secret-{uuid}、...-2、...-3分别写入三种典型 JSON 负载{username:testuser,password:testpass123}、{api_key:test-api-key-456}、{database:mydb,connection:test-conn}每个密钥均附加标签convert_test true创建后WAIT UP TO 5 SECONDS等待密钥在服务端传播完成若捕获到/aws1/cx_smrresourceexistsex资源已存在则视为上次测试遗留继续执行。测试用例一get_secret_value调用get_secret_value读取已创建的密钥后使用 ABAP 单元测试断言库cl_abap_unit_assert验证assert_not_initial返回的密钥值不能为空assert_true密钥值中应包含子串username确认读取内容与写入的 JSON 一致。测试用例二batch_get_secret_value通过正则(.)-[^-]$从密钥名中提取前缀即去掉末尾 UUID 部分得到三个密钥共享的名称前缀以该前缀作为iv_filter_name调用batch_get_secret_value断言至少返回 1 个密钥条目遍历结果表中至少存在一个条目的SecretString非空。测试清理class_teardown对三个密钥依次调用deletesecret( iv_secretid ... iv_forcedeletewithoutrec abap_true )强制无恢复删除捕获/aws1/cx_smrresourcenotfoundex以容忍已删除状态。forcedeletewithoutrec abap_true对应 API 的ForceDeleteWithoutRecovery表示立即永久删除而无需等待恢复窗口。如何运行示例将sap-abap/services/smr/目录下的 abapGit 对象类、测试类、包定义导入 SAP 系统确保已按 AWS SDK for SAP ABAP 全局配置指南 配置好默认凭证与区域并确认配置文件 ID 为ZCODE_DEMO与源码中cv_pfl常量一致若使用其他配置文件需同步修改使用事务码SE24打开类/AWSEX/CL_SMR_ACTIONS在测试运行器中执行上述两个测试方法或在 ABAP 程序中实例化该类并调用两个方法传入实际的密钥名称/前缀运行前请再次确认测试会在测试 AWS 账户中创建并删除真实密钥可能产生费用。关于测试运行的通用说明参见 sap-abap 目录总 README。附加资源Secrets Manager 用户指南Secrets Manager API ReferenceSDK for SAP ABAP Secrets Manager 参考文档小结通过本示例可以完整看到 AWS SDK for SAP ABAP 与 Secrets Manager 集成的标准范式ZCODE_DEMO配置文件创建会话 → 工厂创建服务客户端 → 调用 CamelCase 命名的服务方法getsecretvalue、batchgetsecretvalue→ 结果对象 getter 提取字段 → 细分异常类处理失败。其中BatchGetSecretValue的三层嵌套过滤器构造、批量结果表遍历以及配套测试中随机命名、真实建删、前缀批量验证的测试策略均可直接迁移到实际的 SAP 系统与 Secrets Manager 凭据管理场景中。Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐使用 AWS SDK for Kotlin 读取 Secrets Manager 密钥GetSecretValue 示例与测试实战使用 AWS SDK for Kotlin 读取 Secrets Manager 密钥GetSecretValue 示例与测试实战 导读 本文以 AWS 官方示例工程教程后端使用 AWS SDK for .NET 读取 AWS Secrets Manager 密钥GetSecretValue 实战指南使用 AWS SDK for .NET 读取 AWS Secrets Manager 密钥GetSecretValue 实战指南 本文以 AWS 官方示例仓库示例工程教程后端使用 AWS SDK for C 读取 AWS Secrets Manager 密钥getSecretValue 实战指南使用 AWS SDK for C 读取 AWS Secrets Manager 密钥getSecretValue 实战指南 本文以 cpp/example示例工程教程后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表