[PYTHON] Essayez le chiffrement côté serveur de S3 à l'aide de boto3

Lors du téléchargement d'un objet vers S3 avec un script Python J'ai étudié comment crypter côté serveur.

Chiffrement S3 et objet

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 __

Chiffrement S3 et côté serveur

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.

Confirmation préalable dans la console de gestion

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. 0.png

«Amazon S3 master-key» signifie SSE-S3. Même si vous le sélectionnez, il n'y a pas de choix particulier.

1.png

«Clé principale AWS KMS» signifie AWS-KMS. Lorsque vous le sélectionnez, vous aurez le choix entre les clés à utiliser.

2.png

Si vous essayez de l'enregistrer avec SSE-S3, il sera affiché comme ceci sur l'écran des détails de l'objet.

3.png

Faites cela à partir du script (boto3).

Description du script

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.

4.png

SSE-KMS

Lors de l'utilisation de la clé par défaut pour S3

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)

5.png

Cependant, cette clé n'est pas très différente du SSE-S3 car les paramètres ne peuvent pas être modifiés.

Lors de l'utilisation d'une clé créée par KMS

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.

6.png

Supplément

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é.

Résumé

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

Essayez le chiffrement côté serveur de S3 à l'aide de boto3
Chiffrement côté serveur S3 SSE avec Python boto3
Téléchargeur S3 avec boto
Opération S3 avec python boto3
Montez S3 sur Ubuntu avec goofys
Utilisez boto3 pour accéder à S3
Générer une URL signée S3 avec boto
Essayez SVM avec scikit-learn sur Jupyter Notebook
[AWS] Associez Lambda et S3 à boto3
Essayez Tensorflow avec une instance GPU sur AWS
Afficher les images sur S3 avec API Gateway + Lambda
Comment obtenir la clé sur Amazon S3 avec Boto 3, exemple de mise en œuvre, notes
Essayez de travailler avec Mongo en Python sur Mac
[Python] Résumé des opérations sur les fichiers S3 avec boto3
Installez le sélénium sur votre Mac et essayez-le avec python
Essayez de déboguer Python sur Raspberry Pi avec Visual Studio.
Manipuler des objets S3 avec Boto3 (API de haut niveau et API de bas niveau)
Émettre une URL limitée dans le temps S3 avec boto3 (avec confirmation de l'existence du fichier)
[Memo] Chargez le csv de s3 dans les pandas avec boto3
Testé avec boto3 + mock
Démarrez Lambda avec Boto3
Spécification de la région avec boto
Essayez SNN avec BindsNET
Essayez FEniCS sur Windows!
Essayez Poerty sur Windows
Essayez la régression avec TensorFlow
Essayez deepdream sur Mac
Essayez Amazon Simple Workflow Service (SWF) avec Python et boto3
lire le tag qui vous est attribué dans ec2 avec boto3
Essayez le clustering avec un modèle gaussien mixte sur Jupyter Notebook
Essayez le chiffrement / déchiffrement à l'aide de la clé OpenSSL avec la fonction pow de Python3
Je voulais supprimer plusieurs objets en s3 avec boto3