通過FC函數角色實現臨時憑證的獲取和使用
本文介紹了一種部署在函數計算上的應用程序獲取和使用臨時憑證(STS Token)的方案。避免直接把AccessKey固化在程序中,引發泄露風險。
方案概述
函數計算根據函數配置的角色,通過AssumeRole獲取一個臨時密鑰(STS Token)。然后通過上下文中的參數Credentials或credentials將臨時密鑰傳遞給您的函數。此臨時密鑰包含了您所配置的權限的所有資源,您可以在函數代碼中使用其訪問其他阿里云服務。
方案優勢
該方案能夠顯著提升云上應用程序的安全性、靈活性和便捷性,同時降低維護成本和操作復雜性。
提高安全性
通過FC函數角色和RAM角色關聯,使用STS Token訪問云資源,避免了將訪問密鑰硬編碼在代碼中,從而消除AK泄露的風險。臨時憑證(STS Token)的使用有效解決了永久憑證(AK/SK)可能帶來的安全風險問題。
精細化管理權限
通過為不同FC函數賦予具有特定授權策略的RAM角色,確保函數僅能訪問其所需的資源,實現權限最小化。
增強靈活性
部署在FC函數的程序可以通過阿里云官方SDK,設置函數角色認證方式,獲取臨時憑證STS Token。這種方式無需預先配置固定的訪問憑證,可以根據需要動態獲取和使用臨時憑證。無需直接在FC函數上管理憑證,權限的調整僅需通過修改RAM角色的授權策略來實現,快捷地維護FC函數擁有的訪問權限。
降低維護成本
使用臨時憑證STS Token,無需頻繁更新代碼中的訪問密鑰,減少了維護成本和操作復雜性。 本方案提供Java/Python代碼示例,客戶能夠快速完成應用改造,減少開發和部署的復雜度。
客戶場景
部署在FC函數中的應用程序采用無AK架構
場景描述
客戶在FC函數上部署的應用程序需要訪問其他云資源,傳統的方式是客戶將RAM用戶的AK(Access Key)固化在函數中,如果將AK寫在配置文件中,容易造成AK泄露,維護困難等問題。FC函數RAM角色通過將FC函數和RAM角色關聯,使用STS Token(Security Token Service)訪問云資源,解決永久憑證可能導致的安全風險問題。
適用客戶
- 需要高安全性:客戶需要確保AK不被暴露,以防止安全漏洞。
- 動態管理訪問權限:客戶需要動態管理和臨時授予實例訪問其他資源的權限,避免長期憑證帶來的風險。
- 簡化運維管理:客戶希望簡化運維過程中對憑證的管理,減少手動維護的復雜性。
方案架構
本方案通過FC函數角色實現臨時憑證的獲取和使用。該架構和流程通過動態管理和臨時授予訪問權限,避免了長期暴露AK的風險,提高了系統的安全性和靈活性。管理員僅需一次性配置角色和權限,后續函數在運行時即可動態獲取和使用臨時憑證,簡化了運維管理工作。
管理員創建一個受信給函數計算的Role(角色),并對該角色授予相應的權限。角色權限包含訪問需要的云資源的權限(圖中1)。管理員將創建好的角色配置到對應的FC函數上,使函數與角色關聯(圖中2)。客戶應用程序從函數上下文中獲取臨時安全憑證(STS Token)(圖中3),該過程中函數計算會使用云服務的身份調用AssumeRole接口,從RAM/STS服務獲取STS Token(圖中i)。 客戶應用程序使用獲取到的STS Token來調用目標云資源服務的API(圖中4)。資源服務API處理請求并返回訪問結果,客戶端應用程序接收到返回的結果后完成相應的業務邏輯。
產品費用及名詞
產品費用
產品名稱 |
產品說明 |
產品費用 |
RAM |
訪問控制(RAM)是阿里云提供的一項管理用戶身份與資源訪問權限的服務。使用RAM,您可以創建、管理RAM角色(例如員工、系統或應用程序),并可以控制這些RAM角色對資源的操作權限。 |
免費,詳情參見產品定價。 |
函數計算 |
函數計算(Function Compute)函數計算是事件驅動的全托管計算服務。使用函數計算,您無需采購與管理服務器等基礎設施,只需編寫并上傳代碼。函數計算為您準備好計算資源,彈性地、可靠地運行任務,并提供日志查詢、性能監控和報警等功能。 |
收費,詳情參見產品計費。 |
配置審計 |
配置審計(Cloud Config)是一項資源審計服務,為您提供面向資源的配置歷史追蹤、配置合規審計等能力。面對大量資源,幫您輕松實現基礎設施的自主監管,確保持續性合規。 |
免費,詳情參見產品計費。 |
操作審計 |
操作審計(ActionTrail)是阿里云提供的云賬號資源操作記錄的查詢和投遞服務,可用于安全分析、資源變更追蹤以及合規性審計等場景。 |
免費,詳情參見產品計費。 |
資源目錄RD |
資源目錄RD(Resource Directory)是阿里云面向企業客戶提供的一套多級賬號和資源關系管理服務。 |
免費,詳情參見產品計費。 |
名詞解釋
名稱 |
說明 |
企業管理主賬號 |
在企業擁有多個阿里云賬號時,特指擁有管理其他賬號資源權限的管理員賬號。用于管理多賬號,統一配置多賬號身份權限,統一查看各云賬號賬單,統一配置審計規則并下發到各成員賬號。 |
RAM管理員 |
RAM管理員具備賬號下RAM資源的管理權限。RAM管理員可以是阿里云賬號(主賬號),也可以是主賬號下擁有AliyunRAMFullAccess權限的RAM用戶,強烈推薦您使用RAM用戶充當RAM管理員。 |
訪問密鑰(AccessKey) |
訪問密鑰AccessKey(簡稱AK)是阿里云提供給用戶的永久訪問憑據,一組由AccessKey ID和AccessKey Secret組成的密鑰對。發起的請求會攜帶AccessKey ID和AccessKey Secret加密請求內容生成的簽名,進行身份驗證及請求合法性校驗。 |
RAM角色(RAM role) |
RAM角色是一種虛擬用戶,可以被授予一組權限策略。與RAM用戶不同,RAM角色沒有永久身份憑證(登錄密碼或訪問密鑰),需要被一個可信實體扮演。扮演成功后,可信實體將獲得RAM角色的臨時身份憑證,即安全令牌(STS Token),使用該安全令牌就能以RAM角色身份訪問被授權的資源。 |
函數RAM角色 |
FC函數通過函數RAM角色獲得該角色擁有的權限,可以基于臨時安全令牌STS(Security Token Service)訪問指定云服務的API和操作指定的云資源,安全性更高。 |
安全性
函數計算服務關聯角色
在某些場景下,函數計算為了完成自身的某個功能,需要獲取其他云服務的訪問權限,因此,函數計算創建了與云服務關聯的角色,即服務關聯角色(AliyunServiceRoleForFC)。函數計算3.0支持AliyunServiceRoleForFC和FaaS函數的綁定,實現最小授權范圍內授予函數訪問其他云服務的權限。
關于服務關聯角色的更多信息,請參見服務關聯角色。
函數計算安全性
阿里云函數計算是事件驅動的全托管計算服務。通過函數計算,用戶無需管理服務器等基礎設施,只需編寫代碼并上傳。函數計算會為用戶準備好計算資源,以彈性、可靠的方式運行用戶的代碼,并提供日志查詢、性能監控和報警等功能。對于數據層面,在與用戶通信時,函數計算使用TLS 1.2及以上協議加密傳輸調用請求及回包,內部通信使用私有協議防止信息泄露及篡改。對于管控層面,您可以通過阿里云訪問控制(RAM)進行權限控制等等。關于函數計算安全性的詳細信息,請參見安全合規。
注意事項
臨時密鑰有效期
函數計算根據函數配置的角色,通過AssumeRole獲取一個臨時密鑰(STS Token)。該臨時密鑰的有效期為36小時,且不支持修改。函數的最大執行時間為24小時,因此,執行函數過程中,臨時密鑰不會過期。
持續合規審計函數計算版本限制
配置審計規則 :函數計算服務配置了服務角色只支持審計函數計算2.0的函數計算服務實例。
支持STS的云服務
支持臨時安全令牌(STS)的阿里云服務查詢,請參見支持STS的云服務。
實施步驟
實施準備
如您需要審計函數是否綁定了函數角色,請確保已經開通了配置審計。具體操作,請參考開通配置審計服務。
實施時長
在實施準備工作完成的情況下,本方案實施預計時長:30分鐘。
操作步驟
持續合規審計(可選)
您可以通過配置審計,持續審計函數計算服務的服務角色配置情況,及時發現未配置服務角色的函數計算服務。
注意:【配置審計規則 - 函數計算服務配置了服務角色】只支持審計函數計算2.0的函數計算服務實例。
創建賬號組(可選)
如果您當前為多賬號環境,希望對多個成員賬號進行集中的合規管理,可以使用企業管理賬號將資源目錄中的所有或部分成員賬號加入到同一個賬號組中,賬號組將作為一個跨賬號合規管理的管理單元。如果您是單賬號環境,可跳過本步驟。
- 登入企業管理主賬號,進入資源管理控制臺,在左側導航欄選擇 資源目錄 > 可信服務。選擇配置審計,單擊管理。
- 在委派管理員賬號中,單擊添加,將日志賬號委派為配置審計服務的管理員。
- 登入日志賬號,進入配置審計控制臺,在左側導航欄選擇賬號組。單擊創建賬號組,通過賬號組,對資源目錄中的成員賬號進行集中合規管理。
- 創建賬號組時,賬號組類型,可以選擇全局。全局賬號組包含的成員將自動與資源目錄保持一致。全局賬號組會自動感知資源目錄中成員的新增,并自動同步加入到該全局賬號組中,確保合規管理的賬號范圍始終與資源目錄保持一致。需要注意的是,您只能新建一個全局賬號組。這里我們創建一個名為 ResourceDirectory 的全局賬號組,以此為例。
創建規則
- 進入配置審計控制臺。若您使用上述步驟中的賬號組進行多賬號合規管控,需要在左側導航欄中切換到需要合規管控的賬號組中。
- 在左側導航欄選擇合規審計 > 規則,單擊新建規則。選擇名為函數計算服務配置了服務角色的規則。單擊下一步。
- 在設置基本屬性中,可以對規則的風險等級、觸發機制和觸發頻率進行設置。
- 單擊下一步,您可以進一步設置規則生效的范圍,比如,配置該該規則只對某些資源組內的資源或者具有某些標簽的資源生效。以此來對合規管控的資源范圍進行更加精細化的管理。
- 創建完成后,在規則詳情頁,您可以看到當前賬號組下,所有不合規的資源,即未配置服務角色的函數計算服務列表。該規則,默認會每 24 個小時執行一次檢測,您可以在創建規則或者修改規則時,配置該規則的觸發頻率。
- 最后,您還可以將不合規資源數據投遞到其他云產品中,比如日志服務、對象存儲等。方便您進一步對數據進行歸檔、處理、審計等操作。更多投遞相關的信息,請參考配置審計投遞。
創建并綁定函數角色
函數計算 3.0 版本
- 登錄函數計算控制臺,在左側導航欄,單擊函數。
- 在頂部菜單欄,選擇地域,然后在函數頁面,單擊目標函數操作列的配置。
- 在函數詳情頁面,選擇配置頁簽,然后在左側導航欄選擇權限,單擊編輯,在編輯權限面板,單擊創建角色跳轉至RAM控制臺,根據界面提示創建角色并為角色授予所需權限。
您也可以使用已有的角色,如果權限不足,單擊編輯策略根據需要添加權限策略。具體操作,請參見為RAM角色授權。
- 在RAM控制臺的角色頁面,單擊創建角色。
- 在選擇類型頁簽,選擇可信實體類型為阿里云服務,然后單擊下一步。
- 在配置角色頁簽,選擇普通服務角色,設置角色名稱(本文示例為fc-test-role),選擇受信服務為函數計算,然后單擊完成。
- 在創建完成頁簽,單擊為角色授權,然后單擊目標角色右側操作列的新增授權。
- 在授權頁面,選擇授權范圍,授權主體默認為選擇的目標角色,選擇所需系統策略或自定義策略,單擊添加到右側已選擇列表,然后單擊確定。更多信息,請參見權限策略及示例。
- 整個云賬號:權限在當前阿里云賬號內生效。
- 指定資源組:權限在指定的資源組內生效。指定資源組授權生效的前提是該云服務已支持資源組。更多信息,請參見支持資源組的云服務。
- 為目標函數綁定上一步創建的新角色fc-test-role,并單擊底部部署按鈕。
函數計算 2.0 版本
- 登錄函數計算控制臺,在左側導航欄,單擊服務及函數。
- 在頂部菜單欄,選擇地域,然后在服務及函數頁面,單擊目標服務操作列的配置。
- 在編輯服務頁面,在角色配置面板,單擊創建角色跳轉至RAM控制臺,根據界面提示創建角色并為角色授予所需權限。
您也可以使用已有的角色,如果權限不足,單擊編輯策略根據需要添加權限策略。具體操作,請參見為RAM角色授權。
- 在RAM控制臺的角色頁面,單擊創建角色。
- 在選擇類型頁簽,選擇可信實體類型為阿里云服務,然后單擊下一步。
- 在配置角色頁簽,選擇普通服務角色,設置角色名稱(本文示例為fc-test-role),選擇受信服務為函數計算,然后單擊完成。
- 在創建完成頁簽,單擊為角色授權,然后單擊目標角色右側操作列的新增授權。
- 在授權頁面,選擇授權范圍,授權主體默認為選擇的目標角色,選擇所需系統策略或自定義策略,單擊添加到右側已選擇列表,然后單擊確定。更多信息,請參見權限策略及示例。
- 整個云賬號:權限在當前阿里云賬號內生效。
- 指定資源組:權限在指定的資源組內生效。指定資源組授權生效的前提是該云服務已支持資源組。更多信息,請參見支持資源組的云服務。
- 為目標函數綁定上一步創建的新角色fc-test-role,并單擊底部保存按鈕。
基于函數角色獲取并使用臨時憑證
您可以利用臨時憑證執行已授權給函數角色fc-test-role的操作。在以下步驟中,您可以調用GetCallerIdentity來查看當前調用者的身份信息。
編寫并部署代碼
在函數列表,單擊目標函數,然后選擇代碼頁簽,在代碼頁簽的代碼編輯器中,編寫代碼或上傳代碼,然后單擊部署代碼。
您可以使用阿里云SDK,基于函數角色從上下文獲取臨時憑證,并使用該臨時憑證調用阿里云OpenAPI。
Node.js
以下是Node.js標準運行時代碼:
'use strict';
const RPCClient = require('@alicloud/pop-core').RPCClient;
const httpModule = require('https');
const keepAliveAgent = new httpModule.Agent({
keepAlive: false,
});
const requestOption = {
method: 'POST',
formatParams: false,
timeout: 10000,
agent: keepAliveAgent,
};
exports.handler = (event, context, callback) => {
main(context)
.then((res) => {
callback(null, JSON.stringify(res));
})
.catch((err) => callback(err));
};
async function main(context) {
const { credentials, logger } = context;
// 從上下文中獲取 AK/SK/Security Token,初始化請求 OpenAPI 的 Client
const client = new RPCClient({
accessKeyId: credentials.accessKeyId,
accessKeySecret: credentials.accessKeySecret,
securityToken: credentials.securityToken,
endpoint: 'https://sts.cn-hangzhou.aliyuncs.com',
apiVersion: '2015-04-01'
});
const result = await client.request('GetCallerIdentity', {
pageSize: 1
}, requestOption);
return result;
}
Python
以下是Python標準運行時代碼:
from aliyunsdksts.request.v20150401.GetCallerIdentityRequest import GetCallerIdentityRequest
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import StsTokenCredential
def handler(event, context):
# 從上下文獲取憑證信息
creds = context.credentials
# 創建憑證對象
credentials = StsTokenCredential(creds.access_key_id, creds.access_key_secret, creds.security_token)
# 初始化客戶端,設置地區等信息
client = AcsClient(region_id='cn-hangzhou', credential=credentials)
# 創建請求對象
request = GetCallerIdentityRequest()
# 設置參數,例如可以設置過濾條件等,這里只展示最基本的調用
request.set_accept_format('json')
# 發起請求并獲取響應
response = client.do_action_with_exception(request)
# 打印響應結果
return(str(response, encoding='utf-8'))
Java
以下是Java代碼及其Maven依賴:
com.aliyun.fc.runtime
fc-java-core
1.4.1
com.aliyun.fc.runtime
fc-java-event
1.2.0
com.aliyun
credentials-java
LATEST
com.aliyun
sts20150401
1.1.4
com.alibaba.fastjson2
fastjson2
2.0.51
import java.io.InputStream;
import java.io.OutputStream;
import com.alibaba.fastjson2.JSON;
import com.aliyun.credentials.utils.AuthConstant;
import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.Credentials;
import com.aliyun.fc.runtime.StreamRequestHandler;
import com.aliyun.sts20150401.Client;
import com.aliyun.sts20150401.models.GetCallerIdentityResponse;
import com.aliyun.teaopenapi.models.Config;
public class App implements StreamRequestHandler {
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) {
// 從上下文獲取憑證信息
Credentials creds = context.getExecutionCredentials();
try {
Config config = new Config().setRegionId("cn-hangzhou").setCredential(createCredential(creds));
// 查看當前調用者身份
Client stsClient = new Client(config);
GetCallerIdentityResponse getCallerIdentityResponse = stsClient.getCallerIdentity();
outputStream.write(JSON.toJSONString(getCallerIdentityResponse).getBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
private static com.aliyun.credentials.Client createCredential(Credentials creds) {
com.aliyun.credentials.models.Config config = new com.aliyun.credentials.models.Config();
config.type = AuthConstant.STS;
config.accessKeyId = creds.getAccessKeyId();
config.accessKeySecret = creds.getAccessKeySecret();
config.securityToken = creds.getSecurityToken();
return new com.aliyun.credentials.Client(config);
}
}
注意:
- credentials是從上下文中獲取的。
- 臨時密鑰的有效期為36小時,且不支持修改。函數的最大執行時間為24小時,因此,執行函數過程中,臨時密鑰不會過期。
除了以上給出的三種語言示例之外,更多語言運行時示例詳見幫助文檔。
查看結果
單擊測試函數,點擊詳細信息查看結果。
OSS SDK
您也可以使用OSS SDK,來獲取和管理訪問憑證,并完成API調用。
注意:您需要為該函數配置的函數角色授予AliyunOSSFullAccess權限。
Python
以下是Python標準運行時代碼:
import json
import oss2
def handler(event, context):
endpoint = 'http://oss-cn-hangzhou.aliyuncs.com'
bucket = 'web****'
object = 'myObj'
message = 'test-message'
# 從上下文獲取臨時憑證
creds = context.credentials
# 轉化為OSS SDK的憑證
auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token)
# 調用OpenAPI
bucket = oss2.Bucket(auth, endpoint, bucket)
bucket.put_object(object, message)
return 'success'
上述示例中,bucket需替換為與函數相同的地域下您已創建的bucket名稱。
Java
阿里云OSS的SDK及FC相關依賴如下:
com.aliyun.oss
aliyun-sdk-oss
3.17.4
com.aliyun.fc.runtime
fc-java-core
1.4.1
com.aliyun.fc.runtime
fc-java-event
1.2.0
com.alibaba.fastjson2
fastjson2
2.0.51
Java代碼如下:
package org.example.oss_sdk;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import com.alibaba.fastjson2.JSON;
import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.StreamRequestHandler;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProvider;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.auth.Credentials;
import com.aliyun.oss.common.auth.DefaultCredentials;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.Bucket;
public class App implements StreamRequestHandler {
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
// 從上下文獲取憑證信息
com.aliyun.fc.runtime.Credentials creds = context.getExecutionCredentials();
// 轉化為OSS的Credentials
Credentials ossCreds = new DefaultCredentials(creds.getAccessKeyId(), creds.getAccessKeySecret(), creds.getSecurityToken());
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(ossCreds);
// Bucket所在地域對應的Endpoint。以華東1(杭州)為例。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Endpoint對應的Region信息,例如cn-hangzhou。
String region = "cn-hangzhou";
// 建議使用更安全的V4簽名算法,則初始化時需要加入endpoint對應的region信息,同時聲明SignVersion.V4
// OSS Java SDK 3.17.4及以上版本支持V4簽名。
ClientBuilderConfiguration configuration = new ClientBuilderConfiguration();
configuration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(configuration)
.region(region)
.build();
// 調用OpenAPI
List buckets = ossClient.listBuckets();
outputStream.write(JSON.toJSONString(buckets).getBytes());
}
}
SLS SDK
您也可以使用SLS SDK,來獲取和管理訪問憑證,并完成API調用。
注意:您需要為該函數配置的函數角色授予AliyunLogReadOnlyAccess權限。
Python
以下是Python標準運行時代碼:
from aliyun.log import LogClient
def handler(event, context):
endpoint = 'cn-hangzhou.log.aliyuncs.com'
# 從上下文獲取臨時憑證
creds = context.credentials
# 初始化 LogClient
client = LogClient(endpoint, creds.access_key_id, creds.access_key_secret, creds.security_token)
# 調用ListProject接口
response = client.list_project()
return response.get_projects()
Java
阿里云SLS的SDK及FC相關依賴如下:
com.aliyun.fc.runtime
fc-java-core
1.4.1
com.aliyun.fc.runtime
fc-java-event
1.2.0
com.aliyun.openservices
aliyun-log
0.6.107
com.alibaba.fastjson2
fastjson2
2.0.51
Java代碼如下:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import com.alibaba.fastjson2.JSON;
import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.StreamRequestHandler;
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.ClientBuilder;
import com.aliyun.openservices.log.common.Project;
import com.aliyun.openservices.log.common.auth.Credentials;
import com.aliyun.openservices.log.common.auth.CredentialsProvider;
import com.aliyun.openservices.log.common.auth.DefaultCredentials;
import com.aliyun.openservices.log.common.auth.StaticCredentialsProvider;
import com.aliyun.openservices.log.exception.LogException;
public class App implements StreamRequestHandler {
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
// 從上下文獲取憑證信息
com.aliyun.fc.runtime.Credentials creds = context.getExecutionCredentials();
// 轉化為SLS的Credentials
Credentials slsCreds = new DefaultCredentials(creds.getAccessKeyId(), creds.getAccessKeySecret(), creds.getSecurityToken());
CredentialsProvider credentialsProvider = new StaticCredentialsProvider(slsCreds);
// SLS endpoint,以杭州為例
String endpoint = "https://cn-hangzhou.log.aliyuncs.com";
Client slsClient = new ClientBuilder(endpoint, credentialsProvider).build();
// 調用OpenAPI
try {
List projects = slsClient.ListProject().getProjects();
outputStream.write(JSON.toJSONString(projects).getBytes());
} catch (LogException e) {
throw new RuntimeException(e);
}
}
}
代碼示例
代碼介紹
本方案提供使用阿里云SDK、OSS SDK及SLS SDK從上下文中獲取臨時憑證的FC代碼示例,包括Java和Python語言,方便客戶能夠快速完成應用改造。
代碼地址
代碼詳情參見代碼倉庫。
函數角色操作審計(可選)
若您需要對FC函數角色進行操作審計,例如使用該FC函數角色的身份做了什么操作,您可以使用您的日志審計賬號進入操作審計控制臺,在 事件 > 事件查詢 中找到該實例角色的操作事件,點擊查看事件詳情。
審計的事件中,stsTokenPrincipalName
為一個固定的格式:${函數角色名稱}/FunctionCompute
。
若您的賬號開啟了審計日志投遞,可以在 事件 > 高級查詢 中運行下方所示的查詢SQL語句快速查找出實例使用實例角色身份的進行的所有操作:
requestParameters.stsTokenPrincipalName:${函數角色名稱}/FunctionCompute
故障排除
為什么執行函數失敗?
在“運行環境”為 Java 時,出現Cannot find the class example.App in your zip file and please make sure it is in the right path 'example/App'
錯誤,請確認配置>運行時>請求處理程序的格式為 [package].[class]::[method]。例如,當前值為 example.HelloFC::handleRequest,那么在函數被觸發時,將執行 example 包中 HelloFC 類中的 handleRequest 函數。
更多使用 FC 的常見問題,請參見 FC 服務支持。