《大话华为云OBS+IAM权限控制》连载 (二十五):已知用户名/密码,生成临时AK/SK构造OBS客户端的Python参考实现

网友投稿 834 2022-05-30

《大话华为云OBS+IAM权限控制》连载 (二十五):已知用户名/密码,生成临时AK/SK构造OBS客户端的Python参考实现

在进行IAM的OBS访问权限的测试或调试的时候,为了立即IAM权限更新后的配置效果,可以基于OBS SDK或API接口,使用临时AK/SK和SecurityToken认证方式,通过创建OBS客户端代码来方便地进行验证。

多数情况下,我们是已知目标IAM用户名和登录密码的(因为通过浏览器登陆进行IAM用户登录,这是必不可少的信息),根据华为云官方文档的资料,使用临时AK/SK和SecurityToken认证方式,通过创建OBS客户端可以通过如下三个步骤来实现:

使用IAM用户名和密码获取用户Token,可参见官网指南

通过步骤1得到的用户token,获取临时访问AK/SK和SecurityToken,可参见官网指南

使用步骤2得到的临时AK/SK和SecurityToken,基于OBS SDK编写代码创建OBS客户端,可参见官网指南

因为Python具有良好的交互式特性,所以我们可以使用OBS Python SDK来完成上述三个步骤,得到可以方便进行IAM的OBS控制权限变更验证。参考实现片段如下(基于Python 3语法,使用OBS SDK库 和 requests开源库)

# -*- coding=utf8 -*- import re import os import time from datetime import datetime from pprint import * from obs import * import requests import json def get_user_token(user_name, user_pwd, domain_name, iam_server="iam.myhuaweicloud.com"):     """根据IAM用户名和密码,从IAM服务获取用户token"""          json_data = {       "auth": {         "identity": {           "methods": ["password"],           "password": {             "user": {               "name": "%s" % user_name,               "password": "%s" % user_pwd,               "domain": {                 "name": "%s" % domain_name               }             }           }         },         "scope": {           "domain": {             "name": "%s" % domain_name           }         }       }     }     header_dict = {"Content-Type": "application/json;charset=utf8"}          resp = requests.post("https://%s/v3/auth/tokens" % iam_server, json=json_data, headers=header_dict)     assert resp.status_code < 300     return resp.headers["X-Subject-Token"] def get_sts_credentials_by_token(token, iam_server="iam.myhuaweicloud.com", during_secs=3600):     """根据用户token,从IAM服务获取临时ak、sk + sts token"""          header_dict = {"Content-Type": "application/json;charset=utf8", "X-Auth-Token": token}     json_data = {         "auth": {             "identity": {                 "methods": [                     "token"                 ],                 "token": {                     "id": token,                     "duration-seconds": min(24*3600, max(600, during_secs))                 }             }         }     }     resp = requests.post("https://%s/v3.0/OS-CREDENTIAL/securitytokens" % iam_server, headers=header_dict, json=json_data)     assert resp.status_code < 300     return json.loads(resp.content).get(u'credential')          if __name__ == "__main__":     tenant_name = "tenant_test"     user_name, password = "user_name", "password"     # 根据IAM用户名和密码,从IAM服务获取用户token     user_token = get_user_token(user_name, password, tenant_name)          # 从IAM服务获取临时AK/SK和SecurityToken     result = get_sts_credentials_by_token(user_token)     ak, sk, security_token = result["access"], result[u'secret'], result[u'securitytoken']     print("ak=%s, sk=%s\nSecurityToken=%s" % (ak, sk, security_token))          # 构建OBS client客户端对象     server = "http://obs.myhuaweicloud.com"     ak, sk = result["access"], result[u'secret']     security_token = result[u'securitytoken']     client = ObsClient(ak, sk, server=server, security_token=security_token)          # 然后就可以使用OBS client对象进行各种OBS功能的验证了,     # 详细使用方法可参见OBS Python SDK的官方开发指导文档 https://support.huaweicloud.com/sdk-python-devg-obs/zh-cn_topic_0119680901.html

OBS IAM

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:简化云编程,伯克利对serverless的看法(翻译)
下一篇:AJAX简单实现登录效果
相关文章