簡體   English   中英

是否可以從另一個跨賬戶 lambda 調用 lambda

[英]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:

  • Lambda 函數 1 的 IAM 角色必須允許 Lambda 函數 2 的 ARN 上的 lambda:invokeFunction
  • Lambda 函數 2 必須具有允許賬戶 A 調用它的資源策略

如果不清楚為什么需要后一種資源策略,賬戶 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM