白話講解函式計算中的角色授權
前言
初次入坑函式計算的小夥伴,遇見的第一大攔路虎非RAM授權相關莫屬。開始玩玩hello world
這種無關授權訪問其他阿里雲資源的時候,感覺 serverless 大法各種好,之後發現線上排查問題日誌的時候,第一次給service配置role的時候,雖然控制檯能成功配置,但是估計也是一臉懵逼。本文旨在用最淺顯的例子說明ram的基本概念,以及和函式計算之間的關係。
RAM
RAM 中的 2 個基本概念:
-
使用者
- 主賬戶(或稱root使用者)
- 子使用者
- 角色
先用一個通俗的例子來說明這兩個基本概念:
- 您在阿里雲開通了賬號,購買阿里雲上的資源; 這個就類似於您建立了一個國家,國家有大有小(等價於你的阿里雲上資源多少), 主賬號就是國王您, 為了讓您的國家機器健康有效運轉,您開始放權,從任命三省六部大員直到九品芝麻官,這個時候,官員就對應子賬號, 官員(子使用者)的權利有大有小,就對應國王(主賬號)授予的官職大小。 此時無論國王(主賬戶)還是官員(子賬戶),都是物理意義上的人(真正的實體), 表現為有具體的身份證(Acesskey Id 和 Acesskey Secret),身份證與人繫結。
- 角色不是實體,接著上面的例子,國家和國家之間需要交流合作, 假設您的國家是 A 國,如果 B 國想和 A 國合作, B 國派遣外交使節
甲
(B國的一個官員,對應B國子使用者)訪問 A 國, 這個時候,A 國需要給甲
頒發一個簽證,不然過不了海關,甲
就可以憑藉這個簽證,獲得一個臨時的 A 國國民身份進入A國,進行一些工作事項。 在這裡 簽證 可以理解為一個角色, 不是真正物理意義上的實體。 真正的實體甲
通過簽證中授予的許可權,臨時扮演 A 國國民身份在 A 國幹一些事情。簽證的許可權有大有小並且有一定的時效性,甲
拿著不同的簽證,有可能是元首級別的交流待遇,也有可能只是去窮遊7天之內必須滾來回的DS。
具體詳情請參考 RAM 官方文件
函式計算中的RAM
函式中直接使用使用者
def handler(event, context):
# 直接明文使用AK 訪問其他阿里雲資源,比如oss
...
return "OK"
這種用法簡單粗暴,使用ak, 在上面說了,有ak的都是真正的實體使用者, 直接明文AK在程式碼中裸奔,怎麼看都不安全,於是演變成如下的程式碼片段:
def handler(event, context):
ak_id = os.environ["AK_ID"]
ak_secret = os.environ["AK_SECRET"]
# 使用環境變數中ak訪問其他阿里雲資源
# 環境變數有加密處理,
# https://help.aliyun.com/document_detail/69777.html
...
return "OK"
這樣似乎看起來很安全了,但是如果一旦出現為了安全,定期更換AK情況,就不得不到處去手動函式中設定的環境變數…
函式中使用role
回到上面角色中的那個例子,您的阿里雲資源是 A 國, 函式計算的服務是 B 國, B 國和 A 國進行合作,A 國頒給 B 國大使 甲
簽證(對應函式計算service配置的role), 這個時候 甲
臨時扮演成 A 國國民對 A 國的資源進行一些訪問, 此時可以用如下注釋理解:
# -*- coding: utf-8 -*-
def handler(event, context):
# context中的 creds 就是 `甲` 臨時扮演成的 A 國國民
creds = context.credentials
# creds 可以操作 A 國(也就是您自己的阿里雲)的資源
# 這樣的話,您通過使用creds 就可以訪問您自己的阿里雲資源了
# 不需要 ak 在程式碼中裸奔了
...
return `OK`
所以:
- 如果您需要將您函式的日誌列印到您的 logstore 中進行除錯,需要至少授予 service 訪問您 logstore 的許可權,不然函式計算沒法把您函式執行的日誌 put 到您的lostore
- 如果您沒有給 service 配置 role, context.credentials為空
- 如果您想直接使用context.credentials訪問您自己的阿里雲資源,只需要給service中配置的role增加相應的許可權就行
- 強烈推薦儘量在函式計算中使用 context.credentials 來替換明文ak 的使用方法
總結
本文以一個簡單淺顯的例子說明函式計算和role之間的關係,以及解釋了函式計算中 service 中設定的 role 的意義,希望本文能給您撥開雲霧,如果還有不太理解的地方,歡迎大家留言反饋。
相關文章
- 白話邊緣計算解決方案 SuperEdge
- Python基礎之白話說函式Python函式
- CSS實現文字打字動畫(+1白話講解)CSS動畫
- CSS人人都能寫自定義Checkbox(+1白話講解)CSS
- 大白話講解Spark中的RDDSpark
- Oracle建立使用者、角色、授權、建表Oracle
- 我用白話+案例給你講講機器學習中的決策樹機器學習
- python的四大函式講解Python函式
- Serverless 在阿里雲函式計算中的實踐Server阿里函式
- 【ASP.NET Core】按使用者角色授權ASP.NET
- 簡單CSS實現閃爍動畫(+1白話講解)CSS動畫
- 詳細講解函式呼叫原理函式
- 常用分析函式開窗講解函式
- 報告:挑戰授權買家的神話
- MySql中SUM函式計算錯誤問題MySql函式
- OAuth 2.0 授權方式講解,規範實踐和應用OAuth
- Think Authz:支援 ACL、RBAC、ABAC 等模型的授權(角色和許可權控制)庫模型
- fork函式的學習--深入瞭解計算機系統函式計算機
- 計算 CRC32 的逆函式函式
- vue3函式setUp和reactive函式詳細講解Vue函式React
- Keycloak中授權的實現
- 函式計算——應用初探函式
- 微信公眾號網頁授權中轉功能-解決網頁授權域名個數限制-透過已授權的域名進行中轉網頁
- 如何計算PHP函式中傳遞的引數數量PHP函式
- Rust 程式設計影片教程對應講解內容-函式Rust程式設計函式
- 從雲端計算到函式計算函式
- python函式每日一講 - float函式型別轉換詳解Python函式型別
- TypeScript中的函式詳解TypeScript函式
- matchTemplate函式各個方法的計算公式函式公式
- 基於函式計算的 BFF 架構函式架構
- 外層函式的變數直接被巢狀函式引用計算函式變數巢狀
- python函式每日一講 - int()函式Python函式
- 微服務中的授權模式 - osohq微服務模式
- 函式你必須知道的三種角色?函式
- Rust 程式設計視訊教程對應講解內容-函式Rust程式設計函式
- 遷移 Express 到函式計算Express函式
- 溫溼度計算露點函式函式
- 通俗解釋什麼函式程式設計中的函子Functors? - iRi函式程式設計