AWS: Может ли политика разрешений Lambda иметь источник из целевой группы с подстановочными знаками? - PullRequest
1 голос
/ 28 мая 2019

В настоящее время я пытаюсь выполнить большую часть лямбда-интеграции с настройкой балансировщика нагрузки в стеке облачной информации, и я нахожусь на этапе добавления разрешения для лямбда-функции, чтобы разрешить действие lambda:InvokeFunction от целевой группы elbv2 так что я подумал о том, чтобы иметь sourceArn в разрешении быть таким:

arn:aws:elasticloadbalancing:eu-west-1:######:targetgroup/*/*

на данный момент я просто тестирую без добавления ресурсов целевой группы в стек, но после развертывания в облачной информации и проверки результата построения лямбда-функции aws отображает ошибку:

An error occurred while listing alb relations: 'arn:aws:elasticloadbalancing:eu-west-1:#######:targetgroup/*/*' is not a valid target group ARN (Service: AmazonElasticLoadBalancing; Status Code: 400; Error Code: ValidationError; Request ID: 2ec4bd65-816b-11e9-b1a8-3d113de48409)

Результат политики в lambda составлен так:

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "project-dev-FixturesDashgetAllLambdaPermission-17SATFJ9GT266",
      "Effect": "Allow",
      "Principal": {
        "Service": "elasticloadbalancing.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:eu-west-1:######:function:project-dev-fixtures-getAll",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:elasticloadbalancing:eu-west-1:#######:targetgroup/*/*"
        }
      }
    }
  ]
}

Это делается безсерверной средой, но ресурс выходного стека выглядит следующим образом:

{
  "FixturesDashgetAllLambdaPermission": {
    "Type": "AWS::Lambda::Permission",
    "Properties": {
      "Action": "lambda:InvokeFunction",
      "Principal": {
        "Fn::Join": [
          "",
          [
            "elasticloadbalancing.",
            {
              "Ref": "AWS::URLSuffix"
            }
          ]
        ]
      },
      "FunctionName": {
        "Fn::GetAtt": [
          "FixturesDashgetAllLambdaFunction",
          "Arn"
        ]
      },
      "SourceArn": {
        "Fn::Join": [
          "",
          [
            "arn:",
            {
              "Ref": "AWS::Partition"
            },
            ":elasticloadbalancing:",
            {
              "Ref": "AWS::Region"
            },
            ":",
            {
              "Ref": "AWS::AccountId"
            },
            ":targetgroup/*/*"
          ]
        ]
      }
    }
  }
}

Так как лямбда показывает ошибку, утверждающую, что sourceArn недопустим, я задаюсь вопросом, разрешает ли sourceArn подстановочные знаки для ресурса целевой группы, я проверил стек serverless по умолчанию с определенными функциями, сгенерированные разрешения вот так, я создал свое собственное разрешение на основе этого сгенерированного разрешения с единственным отличием sourceArn.

...