《大话华为云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
- 点赞
- 收藏
- 关注作者
作者其他文章
- 《大话华为云OBS+IAM权限控制》连载 (二十四):对同一个用户组,建议不要同时进行IAM全局级授权和EPS项目级授权
- 《大话华为云OBS+IAM权限控制》连载 (二十三):通过EPS项目的用户和资源管理,可实现让指定用户只可见部分指定资源的效果
- 《大话华为云OBS+IAM权限控制》连载 (二十):企业项目服务(EPS)是对企业人力和物力资源进行逻辑管理的有效手段
- 《大话华为云OBS+IAM权限控制》连载 (二十二):一个云服务资源只能属于一个EPS项目,但一个IAM用户组可同时属于多个项目
- 《大话华为云OBS+IAM权限控制》连载 (二十一):每个企业都有默认的default企业项目,所有的人和物默认都属于该项目
评论(0)