Jak wzbogacić wyniki AWS Security Hub o metadane konta

11 lutego 2022

W tym wpisie przedstawimy Ci, jak wdrożyć rozwiązanie, które wzbogaci wyniki AWS Security Hub o dodatkowe metadane związane z kontem, takie jak nazwa konta, jednostka organizacyjna (OU) powiązana z kontem, informacje kontaktowe dotyczące bezpieczeństwa, i tagi konta.

Metadane konta mogą pomóc w wyszukiwaniu wyników, tworzeniu analiz oraz lepszym reagowaniu i korygowaniu wyników.

AWS Security Hub przyjmuje wyniki z wielu usług AWS, w tym Amazon GuardDutyAmazon InspectorAmazon MacieAWS Firewall ManagerAWS Identity and Access Management (IAM) Access Analyzer oraz AWS Systems Manager Patch Manager. Wyniki z każdej usługi są znormalizowane do formatu AWS Security Finding Format (ASFF), dzięki czemu możesz przeglądać wyniki w standardowym formacie i szybko podejmować działania. Możesz użyć AWS Security Hub, aby zapewnić pojedynczy widok wszystkich ustaleń związanych z bezpieczeństwem oraz skonfigurować alerty, zautomatyzować działania naprawcze i wyeksportować określone ustalenia do systemów zarządzania incydentami innych firm.

Zespoły ds. Bezpieczeństwa lub DevOps odpowiedzialne za badanie, reagowanie i korygowanie wyników Security Hub mogą potrzebować dodatkowych metadanych konta poza identyfikatorem ID konta, aby określić, co zrobić z odkryciem lub gdzie je przekierować. Na przykład ustalenie czy wynik pochodzi z konta testowego lub produkcyjnego, może być kluczem do ustalenia priorytetu tego wyniku i rodzaju potrzebnych działań naprawczych. Posiadanie tych informacji o metadanych w wynikach umożliwia klientom tworzenie niestandardowych podglądów w Security Hub’ie w celu śledzenia, które jednostki organizacyjne lub aplikacje (na podstawie tagów kont) mają najbardziej poważne problemy z bezpieczeństwem.

Ten wpis przedstawia rozwiązanie, które wzbogaca wyniki o metadane konta, aby pomóc zespołom ds. bezpieczeństwa i DevOps lepiej zrozumieć oraz poprawić stan zabezpieczeń.

Omówienie rozwiązania

W tym rozwiązaniu użyjesz połączenia usług AWS Security Gub, Amazon EventBridge oraz AWS Lambda, aby przyswoić wyniki oraz automatycznie wzbogacić je o metadane związane z kontem, odpytując AWS Organizations i interfejsy API usług zarządzania kontem. Architekturę rozwiązania pokazano na rysunku 1 poniżej:

Rysunek 1: Architektura rozwiązania i workflow dla wzbogacania metadanych

Rysunek 1: Architektura rozwiązania i workflow dla wzbogacania metadanych.

Workflow rozwiązania obejmuje następujące kroki:

1. Nowe wyniki i aktualizacje istniejących wyników programu Security Hub ze wszystkich kont członkowskich trafiają na konto administratora programu Security Hub. Security Hub generuje zdarzenia Amazon EventBridge dla wyników.

2. Reguła EventBridge utworzona jako część rozwiązania na koncie administratora Security Hub będzie wyzwalać funkcję Lambda skonfigurowaną jako cel za każdym razem, gdy powiadomienie EventBridge o nowym lub zaktualizowanym znalezisku zaimportowanym do Security Hub będzie pasowało do reguły EventBridge pokazanej poniżej:

 

 

{

  "detail-type": ["Security Hub Findings - Imported"],

  "source": ["aws.securityhub"],

  "detail": {

    "findings": {

      "RecordState": ["ACTIVE"],

      "UserDefinedFields": {

        "findingEnriched": [{

          "exists": false

        }]

      }

    }

  }

}

3. Funkcja Lambda wykorzystuje identyfikator konta z payload’u zdarzenia do pobrania zarówno informacji o koncie, jak i alternatywnych danych kontaktowych z API AWS Organizations and Account management service. Poniższy kod w py konstruuje obiekt account_details reprezentujący informacje o koncie w celu wzbogacenia wyników:

def get_account_details(account_id, role_name):

    account_details ={}

    organizations_client = AwsHelper().get_client('organizations')

    response = organizations_client.describe_account(AccountId=account_id)

    account_details["Name"] = response["Account"]["Name"]

    response = organizations_client.list_parents(ChildId=account_id)

    ou_id = response["Parents"][0]["Id"]

    if ou_id and response["Parents"][0]["Type"] == "ORGANIZATIONAL_UNIT":

        response = organizations_client.describe_organizational_unit(OrganizationalUnitId=ou_id)

        account_details["OUName"] = response["OrganizationalUnit"]["Name"]

    elif ou_id:

        account_details["OUName"] = "ROOT"

    if role_name:

        account_client = AwsHelper().get_session_for_role(role_name).client("account")

    else:

        account_client = AwsHelper().get_client('account')

    try:

        response = account_client.get_alternate_contact(

            AccountId=account_id,

            AlternateContactType='SECURITY'

        )

        if response['AlternateContact']:

            print("contact :{}".format(str(response["AlternateContact"])))

            account_details["AlternateContact"] = response["AlternateContact"]

    except account_client.exceptions.AccessDeniedException as error:

        #Potentially due to calling alternate contact on Org Management account

        print(error.response['Error']['Message'])

   

    response = organizations_client.list_tags_for_resource(ResourceId=account_id)

    results = response["Tags"]

    while "NextToken" in response:

        response = organizations_client.list_tags_for_resource(ResourceId=account_id, NextToken=response["NextToken"])

        results.extend(response["Tags"])

   

    account_details["tags"] = results

    AccountHelper.logger.info("account_details: %s" , str(account_details))

    return account_details

4. Funkcja Lambda aktualizuje wyniki za pomocą interfejsu API Security Hub BatchUpdateFindings w celu dodania danych związanych z kontem do atrybutów Note i UserDefinedFields wyników SecurityHub:

#lookup and build the finding note and user defined fields  based on account Id

enrichment_text, tags_dict = enrich_finding(account_id, assume_role_name)

logger.debug("Text to post: %s" , enrichment_text)

logger.debug("User defined Fields %s" , json.dumps(tags_dict))

#add the Note to the finding and add a userDefinedField to use in the event bridge rule and prevent repeat lookups

response = secHubClient.batch_update_findings(

    FindingIdentifiers=[

        {

            'Id': enrichment_finding_id,

            'ProductArn': enrichment_finding_arn

        }

    ],

    Note={

        'Text': enrichment_text,

        'UpdatedBy': enrichment_author

    },

    UserDefinedFields=tags_dict

)

Uwaga: Wszystkie zdarzenia zmiany stanu publikowane przez usługi AWS za pośrednictwem Amazon Event Bridge są bezpłatne. Bezpłatna warstwa AWS Lambda obejmuje 1 mln bezpłatnych żądań miesięcznie i 400 000 GB-sekund czasu obliczeniowego miesięcznie w momencie publikacji tego posta. Jeśli przetwarzasz 2 mln żądań miesięcznie, szacowany koszt tego rozwiązania wyniesie około 7,20 USD miesięcznie.

Warunki wstępne

1. Twoja organizacja AWS musi mieć włączone wszystkie funkcje.

2. To rozwiązanie wymaga włączenia AWS Security Hub w środowisku wielokontowym AWS, które jest zintegrowane z AWS Organizations. Konto zarządzania AWS Organizations musi wyznaczyć konto administratora Security Hub, które może wyświetlać dane i zarządzać konfiguracją swoich kont członkowskich. Wykonaj te czynności, aby wyznaczyć konto administratora Security Hub dla swojej organizacji AWS.

3. Wszystkie konta członków są oznaczone zgodnie ze strategią tagowania Twojej organizacji, a ich alternatywny kontakt bezpieczeństwa jest wypełniony. Jeśli tagi lub alternatywne kontakty nie są dostępne, wzbogacenie będzie ograniczone do nazwy konta (Account Name) i nazwy jednostki organizacyjnej (Organizational Unit).

4. Zaufany dostęp musi być włączony z usługą AWS Organizations for AWS Account Management service. Umożliwi to kontu zarządzania AWS Organizations wywoływanie operacji AWS Account Management API (takich jak GetAlternateContact) dla innych kont członkowskich w organizacji. Zaufany dostęp można włączyć za pomocą konsoli AWS Management lub za pomocą AWS CLI i zestawów SDK.

Poniższy przykład AWS CLI umożliwia zaufany dostęp do zarządzania AWS Account Management w organizacji konta wywołującego.

aws organizations enable-aws-service-access --service-principal account.amazonaws.com

5. Rola uprawnień IAM z dostępem tylko do odczytu w celu wyszukiwania szczegółów GetAlternateContact, musi zostać utworzona na koncie zarządzania z polityką zaufania, która pozwala kontu administratora Security Hub przejąć tę rolę.

Wdrażanie rozwiązania

To rozwiązanie składa się z dwóch części:

    1. Utwórz rolę uprawnień IAM na koncie organizacji, nadając mu niezbędne uprawnienia zgodnie z opisem w poniższej procedurze tworzenia roli uprawnień IAM.
    2. Wdróż funkcję Lambda i inne powiązane zasoby na koncie administratora Security Hub.

Utworzenie roli IAM

Korzystając z AWS CLI lub AWS API

Postępuj zgodnie z instrukcjami tworzenia roli, aby delegować uprawnienia do uprawnień użytkownika, aby utworzyć rolę uprawnień IAM za pomocą konsoli AWS CLI lub interfejsu API AWS, na koncie zarządzania AWS Organization z nazwą roli account-contact-readonly, na podstawie szablonu polityk zaufania i uprawnień podanego poniżej. Będziesz potrzebować identyfikatora konta administratora Security Hub.

Polityki zaufania IAM pozwalają kontu administratora Security Hub przejąć rolę na koncie zarządzania organizacją.

Polityka zaufania do roli uprawnień IAM

{

  "Version": "2012-10-17",

  "Statement": [

    {

      "Effect": "Allow",

      "Principal": {

        "AWS": "arn:aws:iam::<SH administrator Account ID>:root"

      },

      "Action": "sts:AssumeRole",

      "Condition": {}

    }

  ]

}

Uwaga: Zastąp <SH Delegated Account ID> identyfikatorem konta administratora Security Hub. Po wdrożeniu rozwiązania należy zaktualizować podmiot zabezpieczeń w przedstawionych powyżej politykach zaufania, aby korzystać z nowej roli uprawnień IAM utworzonej dla rozwiązania.

Polityka IAM

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Action": [

                "account:GetAlternateContact"

            ],

            "Resource": "arn:aws:account::<Org. Management Account id>:account/o-*/*"

        }

    ]

}

Polityki uprawnień IAM umożliwiają kontu administratora Security Hub na wyszukiwanie alternatywnych informacji kontaktowych dla kont członkowskich.

Zanotuj Rolę ARN dla roli IAM, podobnie jak w tym formacie:

arn:aws:iam::<Org. Management Account id>:role/account-contact-readonly.

Będzie to potrzebne podczas wdrażania rozwiązania w następnej procedurze.

Wykorzystanie AWS CloudFormation

Alternatywnie możesz użyć dostarczonego szablonu CloudFormation do utworzenia roli na koncie zarządzania. ARN roli IAM jest dostępne w sekcji Outputs utworzonego stosu CloudFormation.

Wdrożenie rozwiązania na własnym koncie administratora Security Hub

Rozwiązanie możesz wdrożyć za pomocą konsoli AWS Management Console lub z repozytorium GitHub za pomocą interfejsu AWS SAM CLI.

Uwaga: jeśli wyznaczyłeś region agregacji w ramach konta administratora Security Hub, możesz wdrożyć to rozwiązanie tylko w regionie agregacji, w przeciwnym razie musisz wdrożyć to rozwiązanie osobno w każdym regionie konta administratora Security Hub, w którym jest włączone Security Hub.

Wdrożenie rozwiązania za pomocą AWS Management Console

1. Na koncie administratora Security Hub uruchom szablon, wybierając przycisk Launch Stack, który tworzy stos w regionie us-east-1.

Uwaga: jeśli region agregacji Security Hub jest inny niż us-east-1 lub chcesz wdrożyć rozwiązanie w innym regionie AWS, możesz wdrożyć rozwiązanie z repozytorium GitHub opisanego w następnej sekcji.

2. Na stronie szybkiego tworzenia stosu w polu Stack name wprowadź unikatową nazwę stosu dla tego konta; na przykład stos aws-security-hub–findings-enrichment-stack, jak pokazano na rysunku 2 poniżej.

Rysunek 2: Tworzenie stosu Quick Create CloudFormation

3. W przypadku konta ManagementAccount, wprowadź identyfikator konta zarządzania AWS Organizations.

4. W przypadku OrgManagementAccountContactRole, wprowadź ARN roli utworzonej wcześniej w procedurze tworzenia roli uprawnień IAM.

5. Wybierz Create stack.

6. Kiedy utworzony zostanie stos, przejdź do zakładki Resources i zanotuj nazwę roli IAM, która została utworzona.

7. Zaktualizuj główny element polityki zaufania roli IAM, który wcześniej utworzyłeś na koncie zarządzania organizacji w powyższej procedurze Create the IAM role, zastępując go zapisaną nazwą roli, jak pokazano poniżej.

Rysunek 3 Aktualizacja Trust relationship na koncie zarządzającym

Rysunek 3 Aktualizacja Trust relationship na koncie zarządzającym.

Wdrożenie rozwiązania za pomocą GitHub Repository i AWS SAM CLI

1. Zainstaluj AWS SAM CLI

2. Pobierz lub sklonuj repozytorium github za pomocą następujących poleceń

$ git clone https://github.com/aws-samples/aws-security-hub-findings-account-data-enrichment.git

$ cd aws-security-hub-findings-account-data-enrichment

3. Zaktualizuj zawartość pliku profile.txt o nazwę profilu, którego chcesz użyć do wdrożenia

4. Aby utworzyć nowy bucket dla artefaktów wdrażania, uruchom create-bucket.sh, określając region jako argument, jak poniżej.

$ ./create-bucket.sh us-east-1

5. Wdróż rozwiązanie na koncie poprzez uruchomienie skryptu deploy.sh określając region jako argument.

$ ./deploy.sh us-east-1

6. Kiedy utworzony zostanie stos, przejdź do zakładki Resources i zanotuj nazwę roli IAM, która została utworzona.

7. Zaktualizuj główny element polityki zaufania roli IAM, który wcześniej utworzyłeś na koncie zarządzania organizacji w powyższej procedurze Create the IAM role, zastępując go zapisaną nazwą roli, jak pokazano poniżej.

"AWS": "arn:aws:iam::<SH Delegated Account ID>: role/<Role Name>"

Korzystanie ze wzbogaconych atrybutów

Aby sprawdzić, czy rozwiązanie działa zgodnie z oczekiwaniami, możesz utworzyć samodzielną grupę zabezpieczeń z regułą ruchu przychodzącego, która zezwala na ruch z Internetu. Spowoduje to pojawienie się wyniku w Security Hub, który zostanie wypełniony wzbogaconymi atrybutami. Możesz następnie użyć tych wzbogaconych atrybutów do filtrowania i tworzenia niestandardowych informacji lub podejmowania określonych działań zaradczych lub naprawczych.

Wygenerowanie przykładowych wyników w Security Hub za pomocą AWS CLI

1. Utwórz grupę bezpieczeństwa za pomocą następującego polecenia AWS CLI:

aws ec2 create-security-group --group-name TestSecHubEnrichmentSG--description "Test Security Hub enrichment function"

2. Zanotuj ID utworzonej grupy bezpieczeństwa i użyj w następnym kroku.

3. Dodaj regułę ruchu przychodzącego do grupy bezpieczeństwa, która zezwala na nieograniczony ruch na porcie 100:

aws ec2 authorize-security-group-ingress --group-id <Replace Security group ID> --protocol tcp --port 100 --cidr 0.0.0.0/0

W ciągu kilku minut w Security Hub zostanie wygenerowany nowy wynik, ostrzegający o regule nieograniczonego ruchu w grupie bezpieczeństwa TestSecHubEnrichmentSG. W przypadku nowych lub zaktualizowanych wyników, które nie mają atrybutu findingEnriched dla UserDefinedFields, ustawionego na wartość true, rozwiązanie wzbogaci wynik o pola związane z kontem w sekcjach Note i UserDefinedFields w wynikach wyszukiwania Security Hub.

Przegląd i filtrowanie wzbogaconego wyniku

1. Otwórz Security Hub i kliknij w Findings po lewej stronie nawigacji.

2. Kliknij w pole filtra u góry, aby dodać dodatkowe filtry. Wybierz pole filtra AWS Account ID, typ dopasowania filtru is oraz wartość identyfikatora AWS Account ID, w którym utworzono grupę zabezpieczeń TestSecHubEnrichmentSG.

3. Dodaj jeszcze jeden filtr. Wybierz pole filtru Resource type, typ dopasowania filtru is oraz wartość AwsEc2SecurityGroup.

4. Zidentyfikuj wynik dotyczący grupy zabezpieczeń TestSecHubEnrichmentSG z aktualizacjami w polu Note i UserDefinedFields, jak pokazano na rysunkach 4 i 5 poniżej:

Rysunek 4: Wzbogacenie metadanych konta w polu Note wyników wyszukiwania w Security Hub

Rysunek 4: Wzbogacenie metadanych konta w polu Note wyników wyszukiwania w Security Hub.

Rysunek 5: Wzbogacenie metadanych konta w polu wyszukiwania w Security Hub w polu UserDefinedFields

Uwaga: Rzeczywiste atrybuty, które zobaczysz jako część UserDefinedFields, mogą różnić się od powyższego zrzutu ekranu. Wyświetlane atrybuty będą zależeć od konfiguracji tagowania i alternatywnej konfiguracji kontaktu. Zobaczysz przynajmniej pola AccountName i OU.

5. Po potwierdzeniu, że rozwiązanie działa zgodnie z oczekiwaniami, usuń grupę zabezpieczeń TestSecHubEnrichmentSG, która została utworzona do celów testowych.

Tworzenie niestandardowych podglądów za pomocą wzbogaconych atrybutów

Możesz użyć atrybutów dostępnych w wynikach UserDefinedFields w Security Hub, aby przefiltrować wyniki. Pozwala to na generowanie niestandardowych informacji o Security Hub Insight i raportów dostosowanych do potrzeb Twojej organizacji. Przykład przedstawiony na rysunku 6 poniżej tworzy niestandardowe narzędzie Security Hub Insight dla wyników pogrupowanych według ważności dla określonego właściciela, przy użyciu atrybutu Owner w obiekcie UserDefinedFields znalezionego Security Hub.

Rysunek 6: Niestandardowe wyniki z filtrami metadanych konta

Rysunek 6: Niestandardowe wyniki z filtrami metadanych konta.

Reguła Event Bridge dla reakcji lub działań naprawczych przy użyciu wzbogaconych atrybutów

Możesz również użyć atrybutów w obiekcie UserDefinedFields, które znajdują się w regule EventBridge, aby podjąć określone działania w odpowiedzi lub działania naprawcze na podstawie wartości w atrybutach. W poniższym przykładzie możesz zobaczyć, jak atrybut Environment może być używany w konfiguracji reguły EventBridge do wyzwalania określonych akcji tylko wtedy, gdy wartość jest zgodna z PROD.

 

 

{

  "detail-type": ["Security Hub Findings - Imported"],

  "source": ["aws.securityhub"],

  "detail": {

    "findings": {

      "RecordState": ["ACTIVE"],

      "UserDefinedFields": {

        "Environment": "PROD"

      }

    }

  }

}

Podsumowanie

Ten wpis przedstawia rozwiązanie, które wzbogaca wyniki AWS Security Hub o metadane związane z kontem AWS przy użyciu powiadomień Amazon EventBridge i AWS Lambda. Wzbogacając wyniki Security Hub o informacje związane z kontem, zespoły ds. bezpieczeństwa mają lepszą widoczność, dodatkowe wglądy i ulepszone możliwości tworzenia ukierunkowanych raportów dla określonych kont lub zespołów biznesowych, co pomaga im ustalać priorytety i poprawiać ogólną reakcję bezpieczeństwa. Aby dowiedzieć się więcej, zobacz:

źródło: AWS

Case Studies
Referencje

Rekomendujemy firmę Hostersi Sp. z o.o. jako odpowiedzialnego i wykwalifikowanego partnera, dbającego o wysoki poziom obsługi klienta. Zlecenie zostało wykonane profesjonalnie, według najlepszych standardów, w bardzo krótkim czasie.

Paweł Rokicki
Managing Director
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.