web-dev-qa-db-ja.com

設定エラーのため、実行に失敗しました:Lambda関数に対する無効な権限

Visual Studio経由でAWS LambdaとAPI Gatewayを使用してサーバーレスアプリケーションを構築しています。私はC#で働いており、私のAPIを展開するためにサーバーレスアプリケーションモデル(SAM)を使用しています。私はVisual Studioでコードを作成し、次にPublishを介してLambdaに展開します。これは、新しいビルドを実行するたびに、API呼び出しを実行しようとすることを除いて、作業しています。

Configuration Errorによる実行に失敗しました:Lambda関数に対する無効な権限

いくつかの研究をすること、私はこの修正が他の場所で言及されているのを見つけました(AWSコンソールを介して行われる)。

修正:API Gateway> API名>リソース>リソース名>メソッド>統合要求> Lambda関数と既存の関数を再選択し、小さなチェックマークで「保存する前に

今これは私のために動作しますが、私のAPIを構築するためにserverless.template(JSON)を使用する自動化を壊します。誰もがこれをServerless.Templateファイル内で修正する方法を知っていますか?解決するためにコンソールで行動を起こす必要がないようにこれがServerless.Templateファイルからのマイメソッドの1つのサンプルです。

{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Transform" : "AWS::Serverless-2016-10-31",
  "Description" : "An AWS Serverless Application.",

  "Resources" : {

    "Get" : {
      "Type" : "AWS::Serverless::Function",
      "Properties": {
        "VpcConfig":{
          "SecurityGroupIds" : ["sg-111a1476"],
          "SubnetIds" : [ "subnet-3029a769","subnet-5ec0b928"]
        },
        "Handler": "AWSServerlessInSiteDataGw::AWSServerlessInSiteDataGw.Functions::Get",
        "Runtime": "dotnetcore2.0",
        "CodeUri": "",
        "MemorySize": 256,
        "Timeout": 30,
        "Role": null,
        "Policies": [ "AWSLambdaBasicExecutionRole","AWSLambdaVPCAccessExecutionRole","AmazonSSMFullAccess"],
        "Events": {
          "PutResource": {
            "Type": "Api",
            "Properties": {
              "Path": "/",
              "Method": "GET"
            }
          }
        }
      }
    },
 _
16
JamesMatson

私は同じ問題を抱えていましたが、私はTerraformを通して展開していました。他のユーザーからの提案の後、私はAPIゲートウェイの統合部分で私のLambda関数を再選択してから、私のLambdaのアクセス許可で何が変わったかを確認しました。私は私のLambdaリソースのAPIゲートウェイトリガのSource_ARNセクションにステージ名を入れる "*"を追加する必要がありました。 SAMがTerraFormとどのように比較されるかわからないが、おそらくステージ名を変更するか、または私が試したこのトラブルシューティング手法を試してみてください。

My SO転記: AWS API GatewayおよびLambda関数Terraform - 実行に失敗しました - 設定エラー:Lambda関数に対する無効な権限

1
transposeglobal

私は同様の問題を抱えていました - 私は削除してからLambda関数を再インストールしました。私のAPI Gatewayはまだ古いものを指していたので、私はAPIゲートウェイに入り、私のリソースメソッドを変更して新しいものを指すように統合要求設定を変更することができました(それは正しいものを指しているように見えるかもしれません)私のケースの「t」

1
Liam

私は同じ問題を抱えていましたので削除してからスタックを作成し、それを処理しました。

0
T. Cervenka

私は同様の問題を抱えており、Terraformを使用していました。それはその中の「投稿」との方針を必要としました。何らかの理由で/ * /(ワイルドカード)ポリシーは機能しませんでしたか?

これが問題を解決するために使用したポリシーとTerraformの例です。

上記のおかげで.

これが私のLambda関数ポリシーJSONがどのように見え、terraform:

    {
      "Version": "2012-10-17",
      "Id": "default",
      "Statement": [
        {
          "Sid": "AllowAPIGatewayInvoke",
          "Effect": "Allow",
          "Principal": {
            "Service": "apigateway.amazonaws.com"
          },
          "Action": "lambda:InvokeFunction",
          "Resource": "arn:aws:lambda:us-east-1:999999999999:function:MY-APP",
          "Condition": {
            "ArnLike": {
              "AWS:SourceArn": "arn:aws:execute-api:us-east-1:999999999999:d85kyq3jx3/test/*/MY-APP"
            }
          }
        },
        {
          "Sid": "e841fc76-c755-43b5-bd2c-53edf052cb3e",
          "Effect": "Allow",
          "Principal": {
            "Service": "apigateway.amazonaws.com"
          },
          "Action": "lambda:InvokeFunction",
          "Resource": "arn:aws:lambda:us-east-1:999999999999:function:MY-APP",
          "Condition": {
            "ArnLike": {
              "AWS:SourceArn": "arn:aws:execute-api:us-east-1:999999999999:d85kyq3jx3/*/POST/MY-APP"
            }
          }
        }
      ]
    }

    add in a terraform like this:


    //************************************************
    // allows you to read in the ARN and parse out needed info, like region, and account
    //************************************************
    data "aws_arn" "api_gw_deployment_arn" {
        arn = aws_api_gateway_deployment.MY-APP_deployment.execution_arn 
    }

    //************************************************
    // Add in this to support API GW testing in AWS Console.
    //************************************************
    resource "aws_lambda_permission" "apigw-post" {
        statement_id  = "AllowAPIGatewayInvokePOST"
        action        = "lambda:InvokeFunction"
        //function_name = aws_lambda_function.lambda-MY-APP.arn
        function_name = module.lambda.function_name
        principal     = "apigateway.amazonaws.com"

        // "arn:aws:execute-api:us-east-1:473097069755:708lig5xuc/dev/POST1/cloudability-church-ws"
        source_arn = "arn:aws:execute-api:${data.aws_arn.api_gw_deployment_arn.region}:${data.aws_arn.api_gw_deployment_arn.account}:${aws_api_gateway_deployment.MY-APP_deployment.rest_api_id}/*/POST/${var.api_gateway_root_path}"
    }
 _
0
atom88

同じ問題に直面して、問題は次のとおりです.API Gatewayは、Lambda関数のCloudWatchログが表示されないため、Lambda関数を呼び出すことができません。

そのため、最初に私はAPI Gateway Consoleと下に、統合要求 - Lambda関数の全ARNを与えました。そしてそれは働き始めます。

第二に、雲の変化を通して

x-Amazon-apigateway-integration:
        credentials:
          Fn::Sub: "${ApiGatewayLambdaRole.Arn}"
        type: "aws"
        uri:
          Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${lambda_function.Arn}/invocations"
 _
0
DHEERAJ

私は同じ問題を抱えていました。最初に統合を統合しました。その後に完璧に働いた。

それが役立つことを願っています。

0