Jak automatycznie wyeksportować dzienniki audytu AWS RDS do instancji S3 Bucket?
Opublikowany: 2022-03-05Zanim dowiemy się, jak automatycznie eksportować logi RDS Audit do S3, czy wiesz, że AWS CloudWatch automatycznie przechowuje logi RDS DB? Tak, robią, ale przechowują tylko ogólne dzienniki dla Twojej instancji bazy danych. A co jeśli chcesz znaleźć konkretne zapytanie lub dane z dziennika? Który użytkownik wykonał określone zapytanie lub z jakiego adresu IP? Kto usunął niektóre rekordy z Twoich tabel bazy danych?
Ponadto w jakiś sposób udało Ci się wyeksportować wszystkie dzienniki kontrolne instancji RDS do CloudWatch, co jest świetne. Ale czy wiesz? CloudWatch zachowa te logi tylko przez 30 dni!! Aby zachować je przez dłuższy czas, musisz wyeksportować logi CloudWatch do zasobnika S3. Możesz to zrobić ręcznie z pulpitu CloudWatch. Ale co, jeśli chcesz mieć do tego automatyzację?
Ten przewodnik przeprowadzi Cię przez wszystkie kroki wymagane do automatycznego rejestrowania wszystkich takich zdarzeń !!
Ten przewodnik zawiera:
1) Dostosuj ustawienia RDS, aby wysyłać logi audytu do CloudWatch
2) Utwórz zasobnik S3 (w celu przechowywania dzienników kontrolnych CloudWatch)
3) Utwórz rolę uprawnień (będziemy jej używać do automatyzacji Lambda)
4) Lambda (funkcja automatyzacji eksportu logów CloudWatch do S3)
Zaczynajmy!
Dostosuj ustawienia RDS, aby wysyłać dzienniki kontrolne do CloudWatch
Przede wszystkim musimy dostosować RDS, aby wysyłać określone logi do CloudWatch. W tym celu utworzymy jedną grupę opcji i jedną grupę parametrów.
Utwórz grupę opcji
⇒ Odwiedź pulpit nawigacyjny Amazon RDS.
⇒ Przejdź do grupy opcji.
⇒ Kliknij przycisk Utwórz grupę.
⇒ Wprowadź nazwę i opis dla tej grupy.
⇒ Wybierz silnik: mysql i wersję silnika: 8.0. Kliknij Utwórz.
⇒ Kliknij utworzoną grupę opcji.
⇒ W sekcji Opcje kliknij przycisk Dodaj opcję.
⇒ W opcji „SERVER_AUDIT_EVENTS*” wprowadź wartości, które chcesz kontrolować, tj. CONNECT, QUERY, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT. Jeśli chcesz rejestrować wszystkie zapytania uruchomione na Twoich tabelach, po prostu wpisz QUERY w tym polu.
⇒ Ustaw „Tak” dla Zastosuj natychmiast. Kliknij Dodaj opcję.
Utwórz grupę parametrów
⇒ Otwórzmy pulpit nawigacyjny Amazon RDS.
Kliknij grupę parametrów.
⇒ Kliknij przycisk Utwórz grupę parametrów.
⇒ Wybierz „Rodzina grupy parametrów”: mysql8.0
⇒ Wybierz „Typ”: Grupa parametrów DB
⇒ Wprowadź nazwę i opis grupy. Kliknij Utwórz.
⇒ Kliknij teraz na utworzony parametr Grupa.
⇒ W sekcji Parametr zmodyfikujemy określone parametry i ustawimy następujące wartości:
⇒ Edytuj parametr: „log_output” ⇒ Zmień jego wartość z TABLE na FILE
⇒ Edytuj parametr: „slow_query_log” ⇒ Zmień jego wartość z BLANK na 1
⇒ Edytuj parametr: „general_log” ⇒ Zmień jego wartość z BLANK na 1
Teraz wszyscy jesteśmy gotowi z naszą Grupą Opcji i Grupą Parametrów. Teraz przydzielmy te grupy do naszego RDS.
⇒ Przejdź do pulpitu nawigacyjnego RDS.
⇒ Kliknij utworzony RDS.
⇒ Kliknij Modyfikuj.
⇒ Przewiń stronę w dół i przejdź do sekcji „Opcje bazy danych”.
⇒ W punkcie „Grupa parametrów DB” wybierz utworzoną grupę parametrów.
⇒ W „Grupa opcji” wybierz utworzoną grupę opcji.
Teraz wszyscy jesteśmy gotowi na RDS. Po wykonaniu powyższych kroków uprzejmie odczekaj 20-30 minut na wypełnienie danych w CloudWatch (UWAGA: może to zająć więcej czasu w zależności od rozmiaru dzienników).
Gdy CloudWatch zbierze wszystkie logi, zobaczysz logi audytu w panelu CloudWatch Dashboard. Będzie wyglądać jak na poniższym obrazku:
Utwórz zasobnik S3 (aby przechowywać dzienniki kontrolne CloudWatch)
⇒ Przejdź do pulpitu nawigacyjnego Amazon S3.
⇒ Utwórz nowy Bucket.
⇒ Po utworzeniu zasobnika otwórz go i przejdź do karty Uprawnienia.
⇒ Będziemy musieli zezwolić CloudWatch na umieszczanie obiektów w zasobniku (dostęp do zapisu)
⇒ Kliknij przycisk Edytuj dla zasad zasobnika. Wpisz następujący kod:
{
„Wersja”: „17.10.2012”,
"Oświadczenie": [
{
„Efekt”: „Zezwól”,
"Główny": {
„Usługa”: „logs.TWÓJ-REGION.amazonaws.com” // tj. logs.us-east-1.amazonaws.com
},
„Akcja”: „s3:GetBucketAcl”,
„Zasób”: „arn:aws:s3:::NAZWA_ZASOBNIKA_TUTAJ”
},
{
„Efekt”: „Zezwól”,
"Główny": {
„Usługa”: „logs.TWÓJ-REGION.amazonaws.com”
},
„Akcja”: „s3:PutObject”,
„Zasób”: „arn:aws:s3:::NAZWA_ZASOBNIKA_TUTAJ/*”,
"Stan": {
„Ciąg równa się”: {
„s3:x-amz-acl”: „pełna kontrola właściciela zasobnika”
}
}
}
] }
Utwórz rolę uprawnień (będziemy jej używać do automatyzacji Lambda)
Teraz stworzymy rolę IAM, która będzie używana w konfiguracji funkcji Lambda. Usługa AWS Lambda będzie wymagała uprawnień do rejestrowania zdarzeń i zapisu do utworzonego przez nas wiadra S3.
Utworzymy rolę uprawnień „Export-RDS-CloudWatch-to-S3-Lambda” z zasadami „AmazonS3FullAccess”, „CloudWatchLogsFullAccess” i „CloudWatchEventsFullAccess”.
⇒ Otwórz swój pulpit nawigacyjny AWS IAM.
⇒ Przejdź do ról i kliknij przycisk Utwórz rolę.
⇒ W “Przypadek użycia” wybierz Lambda i kliknij Dalej.
⇒ Wyszukaj „AmazonS3FullAccess” i wybierz go.
⇒ Wyszukaj „CloudWatchLogsFullAccess” i wybierz go.
⇒ Wyszukaj „CloudWatchEventsFullAccess” i wybierz go.
⇒ Ustaw nazwę roli: „Export-RDS-CloudWatch-to-S3-Lambda” i kliknij Utwórz rolę.
Lambda (funkcja automatyzacji eksportu logów CloudWatch do S3)
Funkcja Lambda umożliwia umieszczenie kodu pod funkcją i uruchomienie go na wyzwalaczach. Nie musisz mieć żadnego serwera ani konfigurować tego. Bardzo łatwe i wydajne!
⇒ Przełącz na AWS Lambda Dashboard.
⇒ Kliknij Funkcje, a następnie kliknij przycisk Utwórz funkcję.
⇒ Pozostaw zaznaczoną opcję „Autor dla Scratch”.
⇒ Ustaw „Nazwa funkcji”: Eksportuj-RDS-CloudWatch-Logs-To-S3
⇒ W sekcji „Runtime” wybierz Python 3.x.
⇒ W sekcji „Uprawnienia” wybierz „Użyj istniejącej roli” i wybierz rolę uprawnień, którą utworzyliśmy w poprzednim kroku.
⇒ Kliknij funkcję Utwórz i przejdź do widoku Kod i wprowadź następujący skrypt:
importuj boto3
importuj system
importuj datę i godzinęGROUP_NAME = os.environ['GROUP_NAME'] DESTINATION_BUCKET = os.environ['DESTINATION_BUCKET'] PREFIX = os.environ['PREFIX'] NDAYS = os.environ['NDAYS'] nDays = int(NDAYS)
aktualnyCzas = datagodzina.datagodzina.now()
DataRozpoczęcia = currentTime – datetime.timedelta(dni=nDni)
EndDate = currentTime – datetime.timedelta(dni=nDni – 1)fromDate = int(DataRozpoczęcia.timestamp() * 1000)
toDate = int(EndDate.timestamp() * 1000)BUCKET_PREFIX = os.path.join(PREFIX, StartDate.strftime('%Y{0}%m{0}%d').format(os.path.sep))
def lambda_handler(zdarzenie, kontekst):
klient = boto3.client('logi')
klient.utwórz_zadanie_eksportowe(
logGroupName=NAZWA_GRUPY,
fromTime=fromDate,
do=do tej pory,
miejsce docelowe=DESTINATION_BUCKET,
destinationPrefix=BUCKET_PREFIX
)
⇒ Teraz kliknij Konfiguracja ⇒ Zmienne środowiskowe.
⇒ Musimy stworzyć 4 zmienne:
⇒ DESTINATION_BUCKET: <Nazwa Twojego wiadra S3>
⇒ NAZWA_GRUPY: <Nazwa grupy dziennika, którą eksportujesz>
⇒ NDAYS: 1
⇒ PREFIX: eksportowane-logi
⇒ W porządku, wszystko gotowe. Zapisz funkcję.
Teraz ustawmy automatyzację na uruchomienie tej funkcji lambda.
⇒ Teraz odwiedź pulpit nawigacyjny CloudWatch.
⇒ Przejdź do Wydarzenia ⇒ Zasady.
⇒ Kliknij Utwórz regułę.
⇒ W obszarze Źródło zdarzenia wybierz opcję Harmonogram.
⇒ Ustaw Fixed rate lub cron expression automatycznie uruchamiając naszą funkcję lambda.
⇒ W polu Cel wybierz Funkcja Lambda.
⇒ W obszarze Funkcja wybierz funkcję, którą utworzyliśmy w poprzednim kroku.
To wszystko. Teraz masz skonfigurowane środowisko do automatycznego eksportu dzienników RDS do S3. Możesz przechowywać dzienniki tak długo, jak chcesz. Ale jeśli nadal masz jakiś problem, możesz dodać komentarz tutaj. Bardzo chcielibyśmy usłyszeć od Ciebie!!