Encryptie is een van de meest fundamentele vereisten voor het waarborgen van de privacy van gegevens, met name voor de end-to-end beveiliging van gegevens die via netwerken worden verzonden. Platte tekst is versleutelde met een encryptie algoritme en een encryptie sleutel. Versleuteling zet de leesbare tekst om in een onleesbare tekst, wat cijfertekst (versleutelde gegevens).
In de blog van vandaag bespreken we verschillende encryptieopties van de AWS Simple Storage Service, beter bekend als S3. S3 is zeer betrouwbaar, veilig en voordelig vergeleken met on-premises (on-prem) dataopslag voor opslagintensieve applicaties zoals Hadoop EMR. S3 slaat de data op als objecten, zogenaamde "buckets", en elk object kan maximaal 5 TB groot zijn.
Versleutelingsmethodologieën
AWS S3 biedt beide encryptiemethodologieën, Versleuteling tijdens het transport en Versleuteling in rust.
Versleuteling tijdens het transport
Versleuteling tijdens het transport voor Amazon S3 kan worden gefaciliteerd met behulp van SSL / TLS aan de kant van de klant en met het onderstaande vergelijkbare bucketbeleid op bucketniveau:
{
"Id": "Policy1600282742195",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1600282739517",
"Action": [
"s3:GetObject"
],
"Effect": "Deny",
"Resource": "arn:aws:s3:::mysecures3buket",
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
},
"Principal": "*"
}
]
}
Versleuteling in rust
Versleuteling in rust kan verder worden ingedeeld in Codering aan de clientzijde en Versleuteling aan de serverzijde Ook. Voor zowel server- als client-side encryptie gebruikt AWS AES-256 met Galois Counter Mode (GCM) voor alle encryptiebewerkingen met symmetrische sleutels. GCM biedt geverifieerde encryptie door een unieke tag toe te voegen aan de cijfertekst, die verifieert dat de versleutelde gegevens op geen enkele manier zijn gemanipuleerd.
Versleuteling aan de clientzijde
In Codering aan de clientzijdeDe gegevens worden gecodeerd voordat ze naar de S3-bucket worden verzonden. Om te implementeren Codering aan de clientzijde In S3 hebben we de volgende twee opties:
- Gebruik een CMK (klant hoofdsleutel) opgeslagen in AWS KMS (Key Management Service)
- Gebruik een door de klant verstrekte hoofdsleutel die is opgeslagen in de eigen applicatie van de klant
Note: Uw client-side hoofdsleutels en uw ongecodeerde gegevens worden nooit naar AWS verzonden. Het is erg belangrijk dat u uw encryptiesleutels met de grootste zorg beheert. Als u ze kwijtraakt, kunt u uw gegevens niet meer ontsleutelen.
Versleuteling aan de serverzijde
In Versleuteling aan de serverzijdeDe gegevens worden gecodeerd nadat ze naar de S3-bucket zijn verzonden en voordat ze in de S3-bucket worden opgeslagen.
Server-side encryptie kent de volgende drie opties:
- Gebruik door Amazon S3 beheerde sleutels (SSE-S3)Hierbij worden het sleutelmateriaal en de sleutel door AWS zelf geleverd om de objecten in de S3-bucket te versleutelen.
- CMK (Customer Master Key) gebruiken in AWS KMS (SSE-KMS)Hierbij worden sleutelmateriaal en de sleutel gegenereerd in de AWS KMS-service om de objecten in de S3-bucket te versleutelen.
- Gebruik een door de klant verstrekte encryptiesleutel (SSE-C)Hierbij wordt de sleutel door de klant verstrekt en beheert Amazon S3 de encryptie en decryptie proces tijdens het uploaden/downloaden van de objecten naar de S3-bucket.
Met SSE-S3De server-side encryptie van Amazon S3 maakt gebruik van een van de veiligste blokcijfers, AES-256 (Advanced Encryption Standard), om elk object te versleutelen met een unieke sleutel. Dit betekent dat er geen overlappende sleutels worden gebruikt voor het versleutelen van de objecten. Deze unieke sleutels worden bovendien versleuteld met een hoofdsleutel die regelmatig wordt gewisseld voor extra gegevensbeveiliging.
Met SSE-KMSAmazon S3 gebruikt de functionaliteit van AWS KMS om de gegevens in de S3-bucket te versleutelen. De combinatie van Amazon S3 en AWS KMS biedt een perfecte combinatie van beveiliging en beschikbaarheid.
Diagrammatische weergave van hoe SSE-KMS werkt
-
CMK maakt gebruik van het encryptie-algoritme (AES-256) en maakt twee sleutels: één is een plattetekst-datasleutel en de andere is een gecodeerde datasleutel.

-
Tijdens het uploaden van het object naar de S3-bucket versleutelt S3 het object met de platte tekst-datasleutel. Het versleutelde object (Ciphertext) wordt vervolgens samen met de versleutelde datasleutel opgeslagen in S3.

-
Tijdens het downloaden van het object uit de S3-bucket stuurt S3 de versleutelde datasleutel naar KMS. KMS koppelt de juiste CMK, ontsleutelt vervolgens de versleutelde datasleutel en stuurt de platte tekst datasleutel naar S3. S3 downloadt het object vervolgens door het te ontsleutelen met deze platte tekst datasleutel.

Tijdens het gebruik van SSE-KMS, kunt u de volgende combinaties hebben:
- Door de klant beheerde CMK (klanthoofdsleutel)Dit is een use case waarbij u volledige controle wilt hebben over de CMK, d.w.z. u kunt deze aanmaken, wijzigen, uitschakelen, controleren en volledige toegangscontrole hebben over wie deze mag gebruiken. Als u Customer Managed CMK's wilt gebruiken, kunt u deze aanmaken onder de AWS KMS-console voordat u ze op S3-niveau gebruikt.
- AWS Managed CMK (klanthoofdsleutel)Dit is een use case waarbij u geen door de klant beheerde CMK specificeert. Om het proces voor gebruikers te vergemakkelijken, maakt Amazon S3 automatisch een door AWS beheerde CMK aan in het AWS-account wanneer u voor het eerst een met SSE-KMS versleuteld object aan een bucket toevoegt. Amazon S3 gebruikt deze CMK standaard voor SSE-KMS.
Let op: Alle verzoeken (GET en PUT) voor een object dat is versleuteld met SSE-KMS leveren een foutmelding op als ze niet via https of met SigV4 worden gedaan. Amazon SigV4 is een authenticatiemechanisme dat door Amazon S3 wordt ondersteund voor het ondertekenen van API-verzoeken. Dit stelt Amazon S3 in staat om de afzender/bron te identificeren en uw verzoeken te beschermen tegen kwaadwillenden.
- Bij serverside-encryptie worden alleen de objectgegevens versleuteld, niet de objectmetadata.
Met SSE-CAmazon S3 voert server-side encryptie uit met door de klant verstrekte encryptiesleutels. Met de door de gebruiker verstrekte encryptiesleutel beheert Amazon S3 het encryptie- en decryptieproces, terwijl de gegevens achtereenvolgens naar schijven worden geschreven en geopend. Omdat het beheer van de encryptie en decryptie door Amazon S3 wordt verzorgd, is het niet nodig om de code op gebruikersniveau te beheren. De enige vereiste vanuit gebruikersperspectief is het beheer van de encryptiesleutels. Amazon S3 gebruikt AES-256-bits encryptie om de gegevens te encrypteren met de door de klant verstrekte sleutel en verwijdert de sleutel uit het geheugen na voltooiing van het encryptieproces. Tijdens het decryptieproces controleert het systeem eerst of dezelfde sleutel is verstrekt (die tijdens de encryptie is verstrekt) en koppelt het de gegevens vervolgens aan de gebruiker.
Let op: Amazon S3 slaat de encryptiesleutel niet op, maar een willekeurig gezouten HMAC-waarde (hash-based message authentication code) van de encryptiesleutel om toekomstige verzoeken te valideren. De gezouten HMAC-waarde kan niet worden gebruikt om de daadwerkelijke encryptiesleutel af te leiden of om de inhoud van de versleutelde gegevens te decoderen. Dit betekent dat als u de encryptiesleutel kwijtraakt, u ook de gegevens kwijtraakt.
Vergelijking van S3-encryptieopties
S3 biedt meerdere opties om de gegevens in de S3-bucket te versleutelen. De volgende tabel geeft een overzicht van alle beschikbare opties om gegevens in rust en tijdens verzending te versleutelen:
| Versleuteling in rust | Versleuteling tijdens het transport | Symmetrische sleutelversleuteling | Asymmetrische sleutelcodering | Verantwoordelijke partij voor gegevensversleuteling/-ontsleuteling | Verantwoordelijke partij voor geheime opslag | |
|---|---|---|---|---|---|---|
| AWS:SecureTransport | N | Y | Y | Y | AWS | AWS |
| SSE-S3 | Y | N | Y | N | AWS | AWS |
| SSE-KMS (door AWS beheerde CMK) | Y | N | Y | N | AWS | AWS |
| SSE-KMS (door de klant beheerde CMK) | Y | N | Y | N | AWS | AWS |
| SSE-C | Y | N | Y | N | AWS | |
| AWS SDK + KMS (door AWS beheerde CMK) | Y | N | Y | N | AWS | |
| AWS SDK + KMS (door de klant beheerde CMK) | Y | N | Y | N | AWS | |
| AWS SDK + zelfbeheerd geheim | Y | N | Y | Y |
Conclusie
Amazon S3 is zeer geschikt voor een omgeving met verschillende applicaties die grote hoeveelheden data genereren. De reden om voor S3 te kiezen is niet alleen dat het enorme hoeveelheden data tegen lagere tarieven kan opslaan, maar ook dat het duurzaam, schaalbaar en zeer beschikbaar is. Gegevensprivacy en compliance zijn essentieel als het gaat om gegevensbeveiliging. Dit kan worden bereikt met behulp van de verschillende encryptiemethoden die Amazon S3 biedt. Dankzij de verschillende encryptieopties van S3 kunt u zich geen zorgen maken over datalekken.
- Versleutelingsmethodologieën
- Versleuteling aan de clientzijde
- Versleuteling aan de serverzijde
- Diagrammatische weergave van hoe SSE-KMS werkt
- CMK maakt gebruik van het encryptie-algoritme (AES-256) en maakt twee sleutels: één is een plattetekst-datasleutel en de andere is een gecodeerde datasleutel.
- Tijdens het uploaden van het object naar de S3-bucket versleutelt S3 het object met de platte tekst-datasleutel. Het versleutelde object (Ciphertext) wordt vervolgens samen met de versleutelde datasleutel opgeslagen in S3.
- Tijdens het downloaden van het object uit de S3-bucket stuurt S3 de versleutelde datasleutel naar KMS. KMS koppelt de juiste CMK, ontsleutelt vervolgens de versleutelde datasleutel en stuurt de platte tekst datasleutel naar S3. S3 downloadt het object vervolgens door het te ontsleutelen met deze platte tekst datasleutel.
- Diagrammatische weergave van hoe SSE-KMS werkt
- Vergelijking van S3-encryptieopties
