边缘应用获取云端STS鉴权
更新时间:2022-09-02
功能简介
在边缘应用场景中,用户存在将边缘端的数据,如边缘端采集的图像,或者工作日志,上传到云端对象存储的需求。然而,对象存储的上传需要进行ak/sk的鉴权,如果将该ak/sk直接下发到边缘设备,容易出现密码泄露,不符合安全规范。
大部分对象存储都提供了STS(Security Token Service)的功能,通过BIE云端服务与对象存储的STS服务集成,可以获取ak/sk/token的三元组,并将其下发至边缘端,让边缘设备获得有限授权
的云端对象存储访问权限,提升云端对象存储的访问安全性。
节点开启临时权限访问
使用边缘节点获取STS的功能,需要在云端控制台开启节点的临时访问权限。该功能需要边缘节点处于在线状态才可以开启。
边缘sts请求接口
边缘应用需要获取STS接口时,需要调用baetyl-core服务的api获取。由baetyl-core连接云端获取STS,并将结果返回给应用。边缘应用间服务调用参考:边缘服务调用。
发送HTTP POST请求至如下路径:
https://baetyl-core.baetyl-edge-system/agent/sts
请求Body和返回值如下:
Headers
参数名称 | 参数值 | 是否必须 |
---|---|---|
Content-Type | application/json | 是 |
Body
名称 | 类型 | 是否必须 | 默认值 | 备注 |
---|---|---|---|---|
stsType | string | 必须 | 表示sts类型,当前只支持minio |
返回数据
名称 | 类型 | 是否必须 | 默认值 | 备注 |
---|---|---|---|---|
ak | string | 非必须 | accesskey | |
sk | string | 非必须 | secretkey | |
token | string | 非必须 | token | |
ednpoint | string | 非必须 | 对象存储地址 | |
bucket | string | 非必须 | bucket名称 | |
namespace | string | 非必须 | 用户唯一标识 | |
nodeName | string | 非必须 | 边缘节点名称 | |
expiration | string | 非必须 | sts过期时间 |
用户在获取到该返回值后,即可在边缘端进行对象存储的访问,其具有以下路径的访问权限:
http://{endpoint}/{bucket}/{namespace}/{nodeName}
注意:用户需要自行判断sts的过期时间,在过期后,重新通过边缘openapi更新sts。
本地测试
可以在边缘节点本地,使用应用证书模拟边缘服务间调用获取sts,应用证书获取方式参考:应用证书。整体流程如下:
- 在证书目录下用curl发送请求
curl --cacert ca.pem --cert crt.pem --key key.pem -H "Content-Type: application/json" -X POST -d '{"stsType":"minio"}' "https://localhost:30050/agent/sts"
参数说明::
- stsType:sts类型,为
minio
- 访问地址:
https://localhost:30050/agent/sts
。因为当前从宿主机发起请求,所以地址为localhost。边缘应用互相访问的地址为https://baetyl-core.baetyl-edge-system/agent/sts
。
- 查看返回结果
边缘应用拿到ak、sk、token后可以通过sdk访问minio,具体可参考MINIO SDK 文档
{"ak":"OEFV4N9UW6OBT6S9L3TS","sk":"0Qb+7h83TjSSybwC6lk8xLqlI9BizFbSsYY3","token":"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiJPRUZWNE45VVc2T0JUNlM5TDNUUyIsImV4cCI6MTAwMDAwMDAwMDAwMCwicG9saWN5IjoiYWxsIiwic2Vzc2lvblBvbGljeSI6ImV5SldaWEp6YVc5dUlqb2lNakF4TWkweE1DMHhOeUlzSWxOMFlYUmxiV1Z1ZENJNlczc2lVMmxrSWpvaUlpd2lSV1ptWldOMElqb2lRV3hzYjNjaUxDSkJZM1JwYjI0aU9sc2ljek02S2lKZExDSlNaWE52ZFhKalpTSTZXeUpoY200NllYZHpPbk16T2pvNlltbGxMM0J5YjJvdGNUUmtWkhRMU0zZHBiVFIxZHk5emRITXRkR1Z6ZEM4cUlsMTlMSHNpVTJsa0lqb2lJaXdpUldabVpXTjBJam9pUVd4c2IzY2lMQ0pCWTNScGIyNGlPbHNpY3pNNlRHbHpkRUoxWTJ0bGRDSmRMQ0pTWlhOdmRYSmpaU0k2V3lKaGNtNDZZWGR6T25Nek9qbzZZbWxsTHlvaVhYMWRmUT09In0.9MgJjud2d4MXGSmTnDfMrx3CmBdRimip3w0HYpbniSGtrqvbGzE4jqFZJwVxlLX3sqR1d5YYGP8u5UJKHhItiw","endpoint":"10.67.98.10:8998","bucket":"bie","namespace":"proj-q4dxatdt53wim4uw","nodeName":"sts-test","expiration":"2022-08-25T06:10:20Z"}