《大话华为云OBS+IAM权限控制》连载 (二十五):已知用户名/密码,生成临时AK/SK构造OBS客户端的Python参考实现
【摘要】 在进行IAM的OBS访问权限的测试或调试的时候,为了立即IAM权限更新后的配置效果,可以基于OBS SDK或API接口,使用临时AK/SK和SecurityToken认证方式,通过创建OBS客户端代码来方便地进行验证,本文给出了基于OBS Python SDK的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
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)