cloud team bij ACA werkt met AWS
CLOUD & MANAGED SERVICESCLOUDAWSSECURITY & PRIVACY
26/02/2020 • Peter Jans

Jouw cloud beveiligen met AWS Config

AWS Config is een dienst waarmee je de configuraties van je AWS-resources kunt beoordelen, auditen en evalueren. Je kan dit gebruiken voor:

  • beveiliging: valideer de beste beveiligingspraktijken op je AWS-account
  • compliance: rapporteer over afwijkingen in de configuratie voor AWS-resources op basis van
    beste praktijken of architectuurbeginselen en richtlijnen
  • efficiëntie: rapporteer over verloren gegane of ongebruikte resources in je AWS-account

In deze blogpost leg ik uit hoe je jouw cloud resources met deze tool kunt monitoren. Dit eerste deel gaat over accountinstellingen voor AWS Config, het inschakelen van meldingen voor wanneer resources niet compatibel zijn, en de implementatie ervan.

Waarom AWS Config?

AWS is het belangrijkste cloudplatform dat we bij ACA gebruiken. Wij beheren meerdere accounts in AWS om allerlei applicaties voor onszelf en voor onze klanten te hosten. In de loop der jaren hebben we steeds meer projecten in AWS opgezet. Dit leidde ertoe dat er veel accounts werden aangemaakt, die op hun beurt veel cloudresources gebruiken. Natuurlijk betekent dit dat het bijhouden van al deze resources ook steeds uitdagender wordt.

AWS Config heeft ons geholpen deze uitdaging het hoofd te bieden. Wij gebruiken het om alle resources in onze hele AWS-organisatie te inventariseren en te monitoren. Ook kunnen we er ook nalevingsregels voor onze resources mee opstellen die conform moeten zijn voor alle accounts. Bijvoorbeeld: een Elastic IP mag niet ongebruikt blijven, of een EC2 beveiligingsgroep mag niet al het inkomend verkeer zonder beperkingen toestaan. Op deze manier zijn we in staat om een standaard te ontwikkelen voor al onze AWS-accounts.

Als AWS Config in uw organisatie is ingeschakeld, biedt dat een aantal voordelen.

  • We hebben altijd een actuele inventarisatie van alle resources in onze accounts.
  • We kunnen de wijzigingsgeschiedenis van al onze resources 24/7 inspecteren.
  • Het geeft ons de mogelijkheid om organisatieregels op te stellen en continu te monitoren of onze resources compatibel zijn. Als dat niet het geval is, krijgen we meteen een melding.

AWS Config instellen voor één account

In dit eerste deel van mijn AWS Config blog wil ik laten zien hoe je AWS Config instelt voor één account. In een toekomstige blogpost zal ik verder uitleg geven over hoe je dit kunt doen voor een hele AWS-organisatie. De afbeelding hieronder toont een overzicht van de opzet voor één account, dat een

  • AWS Config-recorder,
  • de AWS Config-regels,
  • en de S3-bucket bevat

AWS congif recorder explained with a figure

De AWS Config-recorder is het belangrijkste onderdeel van de opzet. Je kunt de standaard recorder in de AWS-console aanzetten. Het zal standaard alle resourcetypes registreren. Je kunt op deze pagina meer informatie vinden over alle beschikbare resourcetypes.

AWS config settings overview

Als je het registreren start worden alle AWS-resources als configuratie-items opgeslagen in de S3-bucket. Het registreren van deze configuratie-items is niet gratis. Op het moment van schrijven kost het $0,003 per geregistreerd configuratie-item. Deze kosten worden gegenereerd wanneer het configuratie-item voor het eerst wordt geregistreerd, of wanneer er iets verandert aan het item of een van de relaties ervan. In de instellingen van de AWS Config-recorder, kun je ook aangeven hoe lang deze configuratie-items moeten worden opgeslagen in de S3-bucket.

The AWS Config rules are the most important part of your setup. These rules can be used as compliancy checks to make sure the resources in your account are configured as intended. It’s possible to create custom rules or choose from a large set of AWS managed rules. In our setup at ACA, we chose to only use AWS managed rules since they fitted all our needs. In the image below, you can see one of the rules we deployed.

De AWS Config-regels zijn het belangrijkste deel van je opzet. Deze regels kunnen worden gebruikt als compatibiliteitscontroles, om er zeker van te zijn dat de resources in je account zijn geconfigureerd zoals bedoeld. Het is mogelijk om aangepaste regels te maken of te kiezen uit een grote set van door AWS beheerde rules. In de opstelling bij ACA hebben we ervoor gekozen om alleen door AWS beheerde rules te gebruiken, omdat die passen bij onze behoefte. In de afbeelding hieronder zie je een van de rules die we hebben geïmplementeerd.

AWS config settings rules

Net als het registreren van configuratie-items kost het uitvoeren van regelevaluaties geld. Op het moment van schrijven is dit $0,001 voor de eerste 100.000 regel evaluaties per regio, $0,0008 voor 100.000 - 500.000 en daarna $0,0005.

Er zijn een heleboel regels beschikbaar, met verschillende voordelen voor uw AWS-account. Dit zijn enkele van de door AWS beheerde rules die we hebben geconfigureerd:

  • Rules die de beveiliging verbeteren
    • AccessKeysRotated: controleert of de toegangssleutels van een IAM-gebruiker zijn geroteerd binnen een bepaald aantal dagen.
    • IamRootAccessKeyCheck: controleert of aan een root-account toegangssleutels zijn toegewezen, wat niet aan te raden is.
    • S3BucketServerSideEncryptionEnabled: controleert of de standaard encryptie voor een S3-bucket is ingeschakeld
  • Rules die ongebruikte resources opsporen (kostenverlaging)
    • Ec2VolumeInuseCheck: controleert of een EBS-volume wordt gebruikt
    • EipAttached: controleert of een Elastic IP wordt gebruikt
  • Rules die optimalisaties van resources detecteren
    • VpcVpn2TunnelsUp: controleert of een VPN-verbinding twee tunnels beschikbaar heeft

Meldingen instellen wanneer resources niet compatibel zijn

AWS Config-regels controleren configuratie-items. Als een configuratie-item niet voldoet aan de regelvereisten, wordt het gemarkeerd als 'niet-compatibel'. Wanneer dit gebeurt, wil je daar een melding van krijgen, zodat je de juiste maatregelen kunt treffen om dit te verhelpen. In onderstaande afbeelding kun je zien hoe we de meldingen voor onze AWS Config-regels hebben geïmplementeerd.

notifications implemented in AWS config rules

Om meldingen te gaan geven moet CloudTrail zijn ingeschakeld en moet er een pad zijn dat alle activiteiten op het account registreert. Nu is CloudWatch in staat om de CloudTrail gebeurtenissen op te pikken. In onze setup hebben we 5 CloudWatch-gebeurtenisregels aangemaakt die meldingen sturen volgens prioriteit. Dit maakt het voor ons mogelijk om te beslissen wat het prioriteitsniveau van de waarschuwing voor elke AWS Config-regel zou moeten zijn. De onderstaande afbeelding toont hiervan een voorbeeld.

AWS config rule explained how to create rule

In de paragraaf 'Doelen' kun je het SNS-onderwerp zien dat de berichten ontvangt van de CloudWatch-gebeurtenisregel. Opsgenie heeft een apart abonnement voor elk van de SNS onderwerpen (P1, P2, P3, P4 & P5). Op deze manier ontvangen wij meldingen wanneer de compatibiliteit verandert en zien ook de ernst ervan door te kijken naar het prioriteitsniveau in de waarschuwing uit Opsgenie.

OpsGenie SNS topic

Jouw AWS Config deployen

Bij ACA proberen we onze AWS-infrastructuur altijd te beheren met Terraform. Dit geldt dus ook voor AWS Config. Dit is de workflow voor onze implementatie:

deployment workflow terraform

Wij beheren alles wat met AWS Config te maken heeft in Terraform. Dit is een voorbeeld van een van de AWS Config-regels in Terraform, waarin de waarde van het rule_identifier attribuut gevonden kan worden in de documentatie van de door AWS Config beheerde rules:

resource "aws_config_config_rule" "mfa_enabled_for_iam_console_access" {
  name                        = "MfaEnabledForIamConsoleAccess"
  description                 = "Checks whether AWS Multi-Factor Authentication (MFA) is enabled for all AWS Identity and Access Management (IAM) users that use a console password. The rule is compliant if MFA is enabled."
  rule_identifier             = "MFA_ENABLED_FOR_IAM_CONSOLE_ACCESS"
  maximum_execution_frequency = "One_Hour"
  excluded_accounts           = "${var.aws_config_organization_rules_excluded_accounts}"
}

De versie van de Terraform-code wordt beheerd met Git. Wanneer de code moet worden geïmplementeerd, doet Jenkins een checkout van de Git repository en implementeert deze in AWS met Terraform.

Conclusie

Met AWS Config zijn we in staat om meer inzicht te krijgen in onze AWS cloudresources. AWS Config verbetert onze veiligheid, vermijdt het aanhouden van resources die niet worden gebruikt, en zorgt ervoor dat onze resources op een optimale manier worden geconfigureerd. Naast deze voordelen geeft het ons ook een inventarisatie van al onze resources en hun configuratiegeschiedenis, zodat we dit op elk gewenst moment kunnen inspecteren.

Hiermee komt mijn eerste blogpost met als onderwerp AWS Config ten einde. In een toekomstige post wil ik uitleggen hoe je dit in moet stellen voor een AWS-organisatie. Als je dit onderwerp interessant vond en je een vraag hebt, of als je meer wil weten over onze AWS Config-opzet, neem contact met ons op via opsklaar@aca-it.be.