Encrypt files in S3

Last time I wrote about encrypting EBS boot volumes, this week I will continue with the encryption as the main topic by writing about S3 encryption and since it could not have turned out any other way, we will use again KMS for that.

Files in S3 also can be encrypted by using KMS, providing an extra layer of security.
In the example I will use to explain it, I will use:

  • An EC2 instance
  • An IAM role (I will call it “sync”) attached to the EC2 instance
  • S3 Bucket  (I will call it „encrypted-sync“)
  • Key in KMS

Remember that to use roles for applications that run on Amazon EC2 instances instead of AWS credentials is an AWS best practice.

 

Use Case

Files in the server will synchronise with S3 every 5 minutes. The files will be encrypted in S3.

 

Graphical overview

 

Solution

As simple as our scenario: Just a command.

/usr/local/bin/aws s3 --region eu-central-1 sync --sse aws:kms --sse-kms-key-id 611g215z-a7j3-3c6f-g59e-f1e6f53b2et3 /data/ s3://encrypted-sync

 
Here a small explanation for some parts of the command:

--sse (string) Specifies server-side encryption of the object in S3.

--sse-kms-key-id (string) The AWS KMS key ID that should be used to server-side encrypt the object in S3.

 
In order that the synchronisation takes place every 5 minutes, you just need to create a cronjob.

 

Amazon AWS Cross-Account Zugriff

Viele AWS Kunden haben mehrere AWS Accounts, die über einen zentralen Account abgerechnet werden. (Consolidated Billing). Wenn man so einen zentralen Account hat, wäre es natürlich prima, wenn man seine IAM-User nur im zentralen AWS-Account anlegt und diese dann auch Rechte in den untergeordneten AWS Accounts haben. Möglich wäre diese durch Definition einer speziellen IAM-Rolle. Leider gilt der damit erteilte Zugriff im Augenblick nur für API-Zugriffe und NICHT für AWS-Consolen Zugriffe … somit bleibt nur die Hoffnung, dass diese Rolle auch bald bei AWS-Consolen Zugriffen Berücksichtigung findet.

IAM Management Console - Google Chrome_2013-07-01_16-54-29

IAM User Rechte einschränken

In vielen Unternehmen müssen Mitarbeiter selbst bei geringsten Beschaffungen sich eine Unterschrift von ihrem Chef holen … in der Amazon Cloud hingegen kann ein Mitarbeiter oft viele tausend Euro auf Knopfdruck ausgeben … sofern man dieses nicht explizit über Rechte in IAM unterbindet.

Viele Unternehmen definieren für Ihre Admins eine IAM-Gruppe „Operators“, die dann mit Rechten aus dem Policy Template „Power User Access“ versehen wird. Dadurch haben Mitglieder dieser Gruppe dann Rechte auf alle Module aber nicht auf IAM.

Wenn diese Operators aber in EC2 z.B. keine Reserved Instances kaufen dürfen, dann muss dieses noch durch weitere Policies unterbunden werden. Hier ein Beispiel, wie man den Kauf von EC2 Reserved Instances unterbindet:

1. Für die Gruppe Operators eine weitere Policy hinzufügen:

(mehr …)