Как защитить AWS API Gateway с помощью доступа и секретных ключей в CloudFormation? - PullRequest
0 голосов
/ 11 мая 2018

Я создал безсерверное приложение Lambda с помощью шаблона AWS Toolkit for Visual Studio (я использовал Учебное пособие: создание и тестирование безсерверного приложения с помощью AWS Lambda ).Я выбрал «Пустой безсерверный проект» и создал простую лямбда-функцию , связанную с API Gateway .

Шаблон CloudFormation выглядит следующим образом:

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

  "Resources" : {

    "Get" : {
      "Type" : "AWS::Serverless::Function",
      "Properties": {
        "Handler": "AWSServerless::AWSServerless.Functions::Get",
        "Runtime": "dotnetcore2.0",
        "CodeUri": "",
        "MemorySize": 256,
        "Timeout": 30,
        "Role": null,
        "Policies": [ "AWSLambdaBasicExecutionRole" ],
        "Events": {
          "PutResource": {
            "Type": "Api",
            "Properties": {
              "Path": "/",
              "Method": "GET"
            }
          }
        }
      }
    }
  },

  "Outputs" : {
    "ApiURL" : {
        "Description" : "API endpoint URL for Prod environment",
        "Value" : { "Fn::Sub" : "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/" }
    }
  }
}

Теперь мне нужно защитить свой API-шлюз с помощью Access и Secret Keys.Я немного исследовал, и если я прав, это должно выглядеть следующим образом:

"security":[{"sigv4":[]}]

Но мне все еще не ясно, где я должен применить это?Возможно, что я ошибаюсь и это можно сделать по-другому.Итак, мой вопрос:

Как обезопасить Шлюз API с помощью Access и секретных ключей в CloudFormation?

1 Ответ

0 голосов
/ 11 мая 2018

Вы можете использовать Ключ API или Авторизаторы

В следующих примерах создается пользовательский авторизатор, который является функцией AWS Lambda.

"Authorizer": {
  "Type": "AWS::ApiGateway::Authorizer",
  "Properties": {
    "AuthorizerCredentials": { "Fn::GetAtt": ["LambdaInvocationRole", "Arn"] },
    "AuthorizerResultTtlInSeconds": "300",
    "AuthorizerUri" : {"Fn::Join" : ["", [
      "arn:aws:apigateway:",
      {"Ref" : "AWS::Region"},
      ":lambda:path/2015-03-31/functions/",
      {"Fn::GetAtt" : ["LambdaAuthorizer", "Arn"]}, "/invocations"
    ]]},
    "Type": "TOKEN",
    "IdentitySource": "method.request.header.Auth",
    "Name": "DefaultAuthorizer",
    "RestApiId": {
      "Ref": "RestApi"
    }
  }
}

(обновление)
ТАК тема на Как использовать авторизаторы в шаблоне

Ссылка на определение Authorizer в пути к шлюзу API

...