《大話華為云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小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。