Кросс-аккаунт для доступа AWS лямбда в CDK - PullRequest
0 голосов
/ 06 марта 2020

Это то, как я предоставляю внешнюю учетную запись AWS для разрешения доступа к моей лямбде.

    myLambda.grantInvoke(new iam.AccountPrincipal('account_id_b'));

Ран развертывание cdk

Политика на основе ресурсов имеет следующее json, как показано в консоли

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "generated_Sid",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account_id_b:root"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "my_lambda_arn"
    }
  ]
}

Я выполнил следующие шаги https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-cross-account-lambda-integrations.html, чтобы создать шлюз API, который может вызывать эту лямбду из учетной записи account_id_b.

Тестирование шлюза API из account_id_b приводит к следующим журналам:

Fri Mar 06 03:00:07 UTC 2020 : Execution failed due to configuration error: Invalid permissions on Lambda function
Fri Mar 06 03:00:07 UTC 2020 : Method completed with status: 500

Что мне еще нужно сделать, чтобы настроить это правильно?

1 Ответ

0 голосов
/ 06 марта 2020

Политика должна иметь следующую форму:

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "what-ever-sid",
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "my_lambda_arn",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "api_gateway_arn"
        }
      }
    }
  ]
}

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

Для тестирования и простоты вы можете избавиться от Condition.

Надеюсь, это поможет.

...