AWS学习记录

2022-09-26 MyFirstBlog

2022-09-28  本文已影响0人  清风晓星辰

How to centrally monitor failed backup jobs in Security Hub

Customers love to build and innovate their business in their AWS accounts with fast ,easy and scalable services which AWS provides. Also you can manage the security postures by using different controls, such as: Preventive controls, Detective controls and Corrective controls. For data loss prevention, using backup is a very effective measure as both Preventive and Corrective controls.

AWS Backup offers a cost-effective, fully managed, policy-based managed service that simplifies data protection at scale. AWS Backup leverages AWS Organizations to centrally automate backup policies to implement, configure, manage, and govern backup activity across supported AWS resources.

But if a you do not properly back things up, they are more at risk of suffering consequences from things like a ransomware attack, so you should consider failed backups from a security risk and compliance perspective.

AWS Security Hub is designed to give you a comprehensive view of your security posture across your AWS accounts. With Security Hub, you have a single pane of glass that aggregates, organizes, correlates and prioritizes your security finding from multiple AWS services, multiple account and regions.

In this post, I will walk through with you on how to centrally monitor your backup failure alerts across your single or multi-account in multi-region AWS environment in Security Hub with different design architectures. Also I will provide sample code in this Github repository(https://github.com/jessicawyc/securityhub-custom-finding/tree/main/backupfailure) for you to automatically deploy the solution.

Solution overview

Generally speaking, the solution includes a serverless architecture for getting backup event logged by AWS CloudTrail, the Amazon EventBridge Rule will trigger an AWS Lambda function which will analysis the event and then generate a Critical finding into Security hub if it is a failed backup job.

Figure 1. Basic Architecture
As you may have different AWS account structures ,I also provide below different deployment architecture:

Prerequisites

Before getting started, make sure that you have a basic understanding of the following:

You will also need to enable Security Hub with Aggregation Region

Solution Walkthrough

You can download all the related templates from Github repository in the local folder where you will run CLI command. Then choose one deployment architecture for your AWS accounts to follow.
I will guide you to use CLI command to run Cloudformation stack or stacksets to create related resources in the following chapters. If you prefer to use Cloudformation template in AWS console for each region or account, please refer to user guide

Single Account with multiple regions

The CloudFormation template will create Eventbridge rule and Lambda function in each region, and Security Hub will automatically aggregates all findings into Aggregation Region.

Figure 2. Single AWS account architecture

Deploying

stackname=backup-sechub-cfn
regions=($(aws ec2 describe-regions --query 'Regions[*].RegionName' --output text --region=us-east-1))
echo $regions

If you do not want to deploy it in all regions, you may adjust the "regions" list manually.

stacktemplate=Arch1-memberaccounts.yaml
for region in $regions; do
aws cloudformation create-stack --stack-name $stackname --template-body file://$stacktemplate --capabilities CAPABILITY_NAMED_IAM --region=$region
echo $region
done

Multiple Accounts with multiple regions

For multiple accounts in AWS Organizations, we will use below CLI commands to create CloudFormation stacksets to create resources.So you should config your CLI profile with the Organizations management account user or role.

Architecture 1 - multiple lambda functions

Figure 3. Multiple AWS accounts Architecture 1

Deploying

stacksetname=backup-sechub-org
region=us-east-1
regions=($(aws ec2 describe-regions --query 'Regions[*].RegionName' --output text))
echo $regions
stacksettemplate=Arch1-memberaccounts.yaml
aws cloudformation create-stack-set \
    --stack-set-name $stacksetname\
    --template-body file://$stacksettemplate  \
    --permission-model SERVICE_MANAGED \
    --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=true \
    --capabilities CAPABILITY_NAMED_IAM \
    --region=$region
aws cloudformation create-stack-instances \
    --stack-set-name $stacksetname\
    --deployment-targets OrganizationalUnitIds=$(aws organizations list-roots --query "Roots[].Id" --output text)  \
    --regions $regions  --region=$region

If the output looks like below format, means you successfully created a StackSet and Operation of it for your whole organizations member accounts.

{
    "StackSetId": "backup-sechub-org:3092ef5d-5d89-4876-9e20-bc15446c9594"
}
{
    "OperationId": "ab088733-f7a7-47a9-b7f7-1810409bcd58"
}

Architecture 2 -one central lambda function

For this architecture,I will use a central Event Bus to receive events from all the member accounts. This central event bus will be in the Delegated admin account of security hub aggregation region.


Figure 4. Multiple AWS accounts Architecture 2

Deploying

  1. Set Parameter in Security Hub delegated admin account
    The 'region' should be your aggregation region of Security Hub
region=eu-west-2
ebarn=$(aws events list-event-buses --region=$region --output text --query "EventBuses[*].Arn") 
echo $ebarn
  1. Deploy CloudFormation template in management account
region=us-east-1
stacksetname=backup-sechub-member
regions=($(aws ec2 describe-regions --query 'Regions[*].RegionName' --output text --region=us-east-1))
echo regions

If you do not want to deploy it in all regions, you may adjust the 'regions' list manually.

stacksettemplate=Arch2-memberaccounts.yaml
root=$(aws organizations list-roots --query "Roots[].Id" --output text) 
admin=$(aws securityhub list-organization-admin-accounts --region=$region --output text --query 'AdminAccounts[*].AccountId')
aws cloudformation create-stack-set \
    --stack-set-name $stacksetname\
    --template-body file://$stacksettemplate  \
    --parameters  \
    ParameterKey=EBARN,ParameterValue=$ebarn  \
    --permission-model SERVICE_MANAGED \
    --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=true \
    --capabilities CAPABILITY_NAMED_IAM \
    --region=$region
aws cloudformation create-stack-instances --stack-set-name $stacksetname \
        --deployment-targets OrganizationalUnitIds=$root \
        --operation-preferences FailureToleranceCount=1 --regions $regions --region=$region

The output should look like below:

{
    "StackSetId": "backup-sechub-member:21191bfb-b235-4247-bbac-a2bb8acb865f"
}
{
    "OperationId": "7e21e52c-9b80-4449-89a5-9a26fddb9558"
}
  1. Deploy lambda function in Delegated Admin account of Security Hub
stackname=backup-sechub-admin
region=eu-west-2
stacktemplate=Arch1-memberaccounts.yaml
aws cloudformation create-stack --stack-name $stackname --template-body file://$stacktemplate --capabilities CAPABILITY_NAMED_IAM --region=$region
--region=$region

China Region

If you use the two China regions, for Single Account and Multiple Account Architecture 1, above steps are also applied to. Only for Architecture 2, you need to adjust the architecture a little because so far China regions Event Bridge has not supported cross region event bus aggregation yet, so you will need to deploy two lambda functions in each region as below picture shows the architecture:


Figure 5. China region architecture 2

The deployment steps only need to repeat once again in the other region in your delegated admin account

Review the result

Once there is failed backup job, in Security Hub, you will see a new critical finding. Let's create a custom insight by using below CLI command in Security Hub delegated admin account:
region should be your aggregation region

region='eu-west-2'
insight='BackupAlert'
aws securityhub create-insight \
--filters \
 '{"RecordState": [{ "Comparison": "EQUALS", "Value": "ACTIVE"}], "WorkflowStatus": [{"Comparison": "EQUALS", "Value": "NEW"}], "ProductName": [{"Comparison": "EQUALS", "Value": "Default"}], "Type": [{"Comparison": "EQUALS", "Value": "Effects/Data Destruction/Backup Data"}]}' \
 --group-by-attribute "ResourceId" \
--name $insight \
--query 'InsightArn' --output text --region=$region

It is easier for security admin to watch this insight for backup failure alert and take follow up actions.

Figure 6. Custom Insight

Cleanup

It is very easy to delete the CloudFormation stack or stacksets you have deployed in previous steps in your AWS console.

Conclusion

In this post, I demonstrated how easily it is to centrally monitor AWS backup job failure alert in Security Hub for security team in different architectures.You can also modify the sample code to add more customized information of the new finding.

上一篇下一篇

猜你喜欢

热点阅读