![](/img/trans.png)
[英]How can I call a graphql lambda from another lambda in nodejs?
[英]Is it possible to call lambda from another cross account lambda
我正在使用無服務器框架我試圖從我的 lambda 函數訪問跨帳戶 lambda 我收到以下錯誤
用戶:arn:aws:sts::984589850232:assumed-role/device-service-sandbox-authenticateDevice-us-east-1-lambdaRole/device-service-sandbox-authenticateDevice 無權執行:lambda:InvokeFunction on resource: arn:aws:lambda:us-east-1:938718425371:function:cm-mgmt-service-sandbox-authenticateDevice 因為沒有基於資源的策略允許 lambda:InvokeFunction 操作”,
我想在不使用 sts 的情況下訪問
這是我在試圖訪問的 lambda 中添加的權限
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "addCrossAccountPermission",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-east-1:938718425371:function:cm-mgmt-service-sandbox-authenticateDevice",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "984589850232"
},
"ArnLike": {
"AWS:SourceArn": "arn:aws:lambda:us-east-1:984589850232:function:device-service-sandbox-authenticateDevice"
}
}
}
]
}
這是我用無服務器框架編寫的調用 lambda 的代碼
let params = {
FunctionName:
"arn:aws:lambda:us-east-1:938718425371:function:cm-mgmt-service-sandbox-authenticateDevice",
Payload: JSON.stringify({
deviceid : "PNR04ESC1000002082"
}),
};
const result = await awsWrapper.invokeLambda(params);
async function invokeLambda(params) {
const lambda = new AWS.Lambda({
region: process.env.region,
});
return lambda.invoke(params).promise();
}
讓賬戶 A 中的 Lambda 函數 1 調用賬戶 B 中的 Lambda 函數 2:
如果不清楚為什么需要后一種資源策略,賬戶 A 中的 IAM 委托人不能單方面授予自己在賬戶 B 中調用 Lambda 函數(或者,通常是訪問 AWS 資源)的權限。希望這是顯而易見的原因。 賬戶 B 必須明確允許賬戶 A。
Lambda 函數 1 的 IAM 策略示例,允許從賬戶 A 中的函數 1 跨賬戶調用賬戶 B 中的函數 2:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "sid1",
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-east-1:BBBBBBBBBBBB:function:lambda-function-2"
}
]
}
Lambda 函數 2 基於資源的策略示例,允許從賬戶 A 跨賬戶調用賬戶 B 中的函數 2:
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "sid1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AAAAAAAAAAAA:root"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-east-1:BBBBBBBBBBBB:function:lambda-function-2"
}
]
}
請注意,在函數 2 的基於資源的策略中使用委托人arn:aws:iam::AAAAAAAAAAAA:root
允許賬戶 A 中的任何 IAM 委托人調用 Lambda 函數 2,只要該 IAM 委托人本身對函數 2 具有 invokeFunction 權限ARN。 如果您想限制此權限,以便只有 Lambda 函數 1 可以調用 Lambda 函數 2,那么您可以將arn:aws:iam::AAAAAAAAAAAA:root
更改為 Lambda 函數 1 的 ARN。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.