Lors du téléchargement d'un objet vers S3 avec un script Python J'ai étudié comment crypter côté serveur.
Référence: Il existe à peu près deux types.
Client-Side Encryption(CSE)
Le côté client crypte les données avant de les envoyer au serveur pour stockage. -> Les données sont protégées lors de la transmission et de la réception avec le serveur (S3).
Server-Side Encryption(SSE)
Le client envoie les données telles quelles et le serveur les chiffre avant de les stocker. -> Les données sont protégées lorsqu'elles sont stockées sur le serveur (S3).
Ce dernier demande moins d'efforts du côté client pour penser au chiffrement. Il est facile à gérer car il est déchiffré de manière transparente, même lorsqu'il est téléchargé. __ * Les informations sensibles doivent bien sûr être cryptées avant l'envoi et la réception __
Référence: Il existe différents types d'options SSE dans S3.
SSE-S3 | SSE-KMS | SSE-C | |
---|---|---|---|
Clé de cryptage | La clé que S3 gère dans les coulisses | Clés gérées par le service AWS KMS | Clé gérée par l'utilisateur |
Fonctionnalité | Puisque tout est géré par AWS, il y a moins d'efforts. Cependant, l'autorité d'accès à la clé ne peut pas être manipulée et la clé ne peut être utilisée que pour enregistrer des données dans S3. | Vous pouvez modifier de manière flexible l'autorité d'accès à la clé elle-même en utilisant des utilisateurs et des rôles IAM. SSE-Bien qu'il ait un tour plus petit que S3, le nombre d'éléments de réglage augmente. | Vous pouvez choisir la clé à utiliser et l'emplacement de stockage. Il offre le plus haut degré de liberté, mais vous devez vous assurer vous-même le stockage sécurisé des clés. |
Je voulais laisser le rôle au côté AWS autant que possible, alors j'ai essayé deux, SSE-S3 et SSE-KMS.
Lorsque vous essayez d'enregistrer un objet dans un compartiment dans la console de gestion En cours de route, vous recevrez une option de cryptage.
«Amazon S3 master-key» signifie SSE-S3. Même si vous le sélectionnez, il n'y a pas de choix particulier.
«Clé principale AWS KMS» signifie AWS-KMS. Lorsque vous le sélectionnez, vous aurez le choix entre les clés à utiliser.
Si vous essayez de l'enregistrer avec SSE-S3, il sera affiché comme ceci sur l'écran des détails de l'objet.
Faites cela à partir du script (boto3).
Parce qu'il n'y a pas de description de pour Python dans [Document] de S3 (http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingServerSideEncryption.html) Je l'ai écrit en référence à d'autres langages et à la documentation boto3. L'environnement d'exécution est le Python 3.6 de Lambda, mais je ne pense pas que le style d'écriture et le comportement changeront beaucoup n'importe où.
Réécrivez le rôle correctement afin que vous puissiez accéder aux clés S3 et KMS.
SSE-S3
SSE-S3
import boto3
def lambda_handler(event, context):
file_name = 'test.txt'
#Peut être utilisé temporairement'/tmp'Créer un fichier dans
with open('/tmp/' + file_name, 'w') as f:
f.write('hoge')
#Spécifiez la méthode de cryptage pour ExtraArgs lors du téléchargement de fichiers
response = boto3.client('s3').upload_file(
Filename='/tmp/' + file_name,
Bucket='nanakenashi-test',
Key=file_name,
ExtraArgs={'ServerSideEncryption': 'AES256'})
return True
C'est très simple, avec seulement plus d'arguments statiques lors du téléchargement. Pour le moment (16 septembre 2017), la seule méthode de cryptage semble être ʻAES256`. Vous pouvez voir que l'objet réellement enregistré a la même forme qu'auparavant.
SSE-KMS
Réécrivez uniquement ʻExtraArgs` dans le script ci-dessus.
SSE-KMS (en utilisant la clé par défaut pour S3)
ExtraArgs={
'ServerSideEncryption': 'aws:kms',
}
L'objet enregistré est chiffré avec la clé par défaut pour S3. (Puisque cette clé a été créée à ce moment, je pense qu'elle est différente de la clé pour SSE-S3)
Cependant, cette clé n'est pas très différente du SSE-S3 car les paramètres ne peuvent pas être modifiés.
SSE-KMS (en utilisant la clé créée par KMS)
#Ajouter l'ID de la clé à utiliser
ExtraArgs={
'ServerSideEncryption': 'aws:kms',
'SSEKMSKeyId': 'ea41458h-0c2o-496g-b92e-67441d771282'
}
Vous pouvez voir qu'il est chiffré avec la clé créée à l'avance.
SSE-S3 et SSE-KMS /AmazonS3/latest/dev/UsingKMSEncryption.html)
Avec le chiffrement côté serveur, seules les données d'objet sont chiffrées. Les métadonnées des objets ne sont pas chiffrées.
Aussi
Si vous avez besoin d'un chiffrement côté serveur pour tous les objets stockés dans votre compartiment Vous pouvez utiliser des stratégies de compartiment.
(C'est difficile japonais ...) En d'autres termes, il est possible d'interdire la sauvegarde d'objets non chiffrés. La définition de cette stratégie de compartiment facilite le maintien d'un état sécurisé.
Pour rendre le stockage des données dans S3 plus sécurisé J'ai essayé plusieurs options de cryptage côté serveur.
Au fait, pour SSE-C, reportez-vous à Around here. Si vous le faites, vous pouvez l'utiliser.
Recommended Posts