Przejdź do treści

API Gateway i Lambda – jak dodać API_KEY | bezpieczeństwo

API Gateway & Lambda - API key

Cześć, z tego artykułu dowiesz się, jak można połączyć funkcję lambda z API Gateway i jak łatwo można takie połączenie zabezpieczyć. Ja dodam klucz API.

API Gateway – API key – lambda

W tym artykule i video tutorialu pokażę Ci również 2 sposoby na stworzenie API Gateway. Najpierw dłuższy i nieco trudniejszy, a potem prosty i szybki.

API Gateway & Lambda – how to use API_KEY

Lambda

Stworzę od podstaw prostą funkcję lambda w Pythonie 3.9. Moja funkcja po prostu generuje losowe liczby.

import json
import random
from random import randrange


def lambda_handler(event, context):
    number = randrange(10)
    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda! Random number: %s' % number)
    }

Po utworzeniu funkcji lambda pamiętaj kliknąć deploy i sprawdź, czy działa poprawnie.

1) API Gateway – sposób 1

Dobra, teraz stworzę API Gateway i dodam do niego klucz API w dłuższy sposób, ale dzięki temu przejdę przez konfigurację krok po kroku.

Tworzenie API Gateway

Znajdź GATEWAY API wybierz REST API, dodaj nazwę itp.

API Gateway - rest API
API Gateway – rest API

Stwórz nową metodę, w moim przypadku GET. Wybierz odpowiedni typ integracji. Możesz zaznaczyć także Lambda proxy integration, dzięki temu automatycznie zostaną dodane odpowiednie uprawnienia pozwalające na uruchomienie funkcji lambda za pomocą Api Gateway. Na koniec wybierz odpowiedni region i swoją funkcję lambda. Gdy to zrobisz, to możesz zatwierdzić swój wybór i przejść dalej.

API gateway - create GET method
API gateway – create GET method

Teraz możesz przetestować połączenie pomiędzy Api Gateway i funkcją Lambda. Jeśli wszystko działa poprawnie, to przejdź do kolejnego kroku.

test APIGateway to lambda connection
test connection from API Gateway to lambda function

Za każdym razem, gdy zmieniasz coś w konfiguracji ApiGateway, to musisz dodać te zmiany do odpowiedniego stage – wykonać Deploy API.

APIgateway - Deploy API
APIgateway – Deploy API

Przejdź do Stages i sprawdź, czy URL działa poprawnie. Za jego pomocą powinieneś móc wywołać funkcję lambda i otrzymać odpowiedź.

API Gateway - stages
API Gateway – stages

Możesz także użyć polecenia w linii komend np.:

curl -X GET https://zwl2owqucc.execute-api.eu-west-2.amazonaws.com/prod

Dodanie klucza API do API Gateway

Teraz dodaj zabezpieczenie w postaci klucza API do ApiGateway. Na początek zmień ustawienie API key Required z false na true. Oczywiście, gdy to zrobisz, to wykonaj Deploy API w sposób jak wcześniej.

API Gateway - API key Required
API Gateway – API key Required

Dodaj nowy usage plan. Dodaj nazwę, możesz też ograniczyć liczbę zapytań do API Gateway tak jak ja, ale nie jest to konieczne.

API usage plans
API usage plans

Teraz wybierz swój API Gateway i odpowiedni stage.

API - associated API stages
API – associated API stages

Po przejściu dalej możesz wybrać istniejący klucz API lub utworzyć nowy. Gdy będziesz miał dodany klucz, to możesz kliknąć Done.

Teraz w Usage Plans powinieneś mieć utworzony nowy plan, dodany do niego odpowiedni stage swojego API gateway i klucz API. Swój klucz znajdziesz także w zakładce Keys. Możesz skopiować jego wartość i zapisać gdzieś w notatniku, żeby był pod ręką, ponieważ niedługo się przyda.

API keys AWS
AWS – API keys

Sprawdzenie poprawności działania

Możesz ponownie sprawdzić adres URL swojego API Gateway. Tym razem nie będziesz miał do niego dostępu, jeśli nie podasz odpowiedniego klucza. Wystarczy, że dodasz do polecenia –header z odpowiednią wartością API key, jak w przykładzie poniżej, a będziesz mógł się połączyć do swojej funkcji lambda.

curl -X GET --header "x-api-key: ADD_API_KEY_HERE" https://zwl2owqucc.execute-api.eu-west-2.amazonaws.com/prod

Ja w tym przykładzie definiowałem tylko metodę GET, więc tylko jej mogę używać. Jeśli wszystko zrobiłeś poprawnie, to nie powinieneś mieć problemów z uruchomieniem funkcji Lambda za pomocą API Gateway.

2) API Gateway – sposób 2

Teraz szybszy sposób na stworzenie API Gateway. Należy wrócić do utworzonej na samym początku funkcji lambda. Wystarczy dodać nowy trigger. Na liście odszukaj API Gateway.

add trigger to AWS lambda
add trigger to Lambda

Utwórz nowe REST API, jako zabezpieczenie wybierz API key.

add trigger API gateway to lambda
REST API with security API key

Teraz wszystko zostanie utworzone automatycznie. Nie opuszczając funkcji lambda, możesz odczytać adres URL nowego API Gatewaya, a nawet wartość klucza API.

API Gateway from Lambda
API Gateway from Lambda

Sprawdzenie poprawności działania

Do sprawdzenia poprawności działania nowego API Gatewaya możesz użyć ponownie tego samego polecenia co wcześniej. Pamiętaj tylko użyć nowego adresu URL i nowego klucza API.

curl -X GET --header "x-api-key: ADD_API_KEY_HERE" https://zwl2owqucc.execute-api.eu-west-2.amazonaws.com/prod

Gdy sprawdzisz poprawność działania, to możesz przejść do strony z konfiguracją API Gateway, żeby dostosować konfigurację do własnych potrzeb.

Jeśli stworzyłeś gateway na dwa sposoby, to możesz porównać ze sobą ich konfigurację. Jak zapewne zauważysz trochę się od siebie różnią.

Podsumowanie

Sposobów na stworzenie API Gateway jest więcej. Ja uwielbiam tworzyć infrastrukturę jako kod za pomocą terraforma. Jednak najlepiej jest zacząć naukę chmury, od tworzenia zasobów za pomocą portalu. Gdy zrozumiesz, jak coś działa, to możesz iść krok dalej.

Do API Gateway możesz dodać więcej elementów jak na przykład custom domain. Pozwoli to na dostęp do funkcji lambda, mikroserwisu itp za pomocą ładniejszej bardziej spersonalizowanej nazwy URL.

Możesz także przed gatewayem dodać WAF i zezwolić tylko na ruch w określonych krajach albo ograniczyć zapytania do konkretnych adresów IP.

AWS custom domain – WAF – API Gateway – API key – lambda – Microservices

Możliwości są ogromne, na początek zacznij od czegoś prostego, a potem rozbuduj swój projekt. Jeśli spodobał Ci się mój artykuł, zobacz inne artykuły z kategorii AWS.

tutorial – AWS gp3
tutorial – jak wyłączyć wszystkie EC2