Türchen #2: S3 Check - Sind alle Buckets verschlüsselt und nicht-öffentlich?
Von Michael Krieg am 2. Dezember 2019
In unserer kleinen Adventskalender Blogserie möchten wir Euch verschiedene Themen vorstellen.
Weiter geht es mit "Türchen Nummer 2" - S3 Buckets Schnell-Check
S3 Buckets sollen verschlüsselt und nicht-öffentlich sein
InSpec ist ein praktisches Framework rund um das Thema Security. Seit Version 2 bietet es diverse Resource Checks an, um u. a. AWS Setups auf Herz und Nieren zu prüfen. Zur Ausführung wird ein IAM User mit entsprechenden Berechtigungen vorrausgesetzt. InSpec selbst kann direkt von der Kommandozeile oder aus Docker heraus aufgerufen werden. Damit der Start in die erste Dezemberwoche leicht fällt, hier, ohne lange Vorrede, zwei konkrete Beispiele:
Zunächst stellen wir aber sicher, das InSpec installiert ist und über entsprechende AWS Berechtigungen verfügt: siehe AWS Cloud Platform Support.
InSpec direkt aufrufen
inspec detect -t aws://
InSpec aus Docker heraus aufrufen
Hier wird es etwas anspruchsvoller, da wir unsere IAM (Session-) Credentials temporär in einen Docker Container einschleusen müssen:
INSPEC_VERSION="4.18"
INSPEC_OPTIONS="--log-level=error --show-progress"
INSPEC_ACCEPT_EULA="--chef-license=accept-silent"
INSPEC_DOCKER_RUN="docker container run -it -e AWS_SESSION_TOKEN -e AWS_REGION -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY --rm -v $(pwd):/share chef/inspec:$INSPEC_VERSION"
eval $INSPEC_DOCKER_RUN \
detect \
-t aws:// \
$INSPEC_ACCEPT_EULA
Control Code: Überprüfe alle S3 Buckets
Legen wir uns nun eine Datei test_s3.rb
mit Ruby Test Code folgendem Inhalts an:
title 'S3 Bucket Tests'
control 's3-public-buckets' do
all_buckets = aws_s3_buckets.bucket_names
all_buckets.each do |b|
describe aws_s3_bucket(b) do
it { should_not be_public }
it { should have_default_encryption_enabled }
end
end
end
…und führen hiernach die Tests aus (entweder direkt oder wie oben beschrieben - mittels Docker):
inspec exec test_s3.rb -t aws://
Nach kurzer Zeit sehen wir, ob alle S3 Buckets im Account und in der gesetzen Region nicht-öffentlich und verschlüsselt sind.