Mon application appengine crée des fichiers cloudstorage. Les fichiers seront téléchargés par un tiers. Les fichiers contiennent informations médicales personnelles.Stockage cloud et stratégie de téléchargement sécurisé sur le moteur de l'application. GCS acl ou blobstore
Quel serait le meilleur moyen de téléchargement:
- L'utilisation d'un lien de téléchargement de GCS direct avec un utilisateur LECTEUR acl.
- Ou à l'aide d'un gestionnaire de téléchargement blobstore dans une application appengine.
Les deux solutions nécessitent la connexion du tiers (connexion Google). La performance n'est pas un problème. La vie privée et la survenance d'erreurs de sécurité et d'erreurs sont. L'utilisation d'un fichier zip chiffré pour le téléchargement est une option.
Cela signifie que je dois stocker le mot de passe dans le projet. Ou envoyez un mot de passe aléatoire par e-mail?
Mise à jour Le code AppEngine J'utilisé pour créer une URL de téléchargement signé
import time
import urllib
from datetime import datetime, timedelta
from google.appengine.api import app_identity
import os
import base64
API_ACCESS_ENDPOINT = 'https://storage.googleapis.com'
# Use the default bucket in the cloud and not the local SDK one from app_identity
default_bucket = '%s.appspot.com' % os.environ['APPLICATION_ID'].split('~', 1)[1]
google_access_id = app_identity.get_service_account_name()
def sign_url(bucket_object, expires_after_seconds=60):
""" cloudstorage signed url to download cloudstorage object without login
Docs : https://cloud.google.com/storage/docs/access-control?hl=bg#Signed-URLs
API : https://cloud.google.com/storage/docs/reference-methods?hl=bg#getobject
"""
method = 'GET'
gcs_filename = '/%s/%s' % (default_bucket, bucket_object)
content_md5, content_type = None, None
expiration = datetime.utcnow() + timedelta(seconds=expires_after_seconds)
expiration = int(time.mktime(expiration.timetuple()))
# Generate the string to sign.
signature_string = '\n'.join([
method,
content_md5 or '',
content_type or '',
str(expiration),
gcs_filename])
_, signature_bytes = app_identity.sign_blob(signature_string)
signature = base64.b64encode(signature_bytes)
# Set the right query parameters.
query_params = {'GoogleAccessId': google_access_id,
'Expires': str(expiration),
'Signature': signature}
# Return the download URL.
return '{endpoint}{resource}?{querystring}'.format(endpoint=API_ACCESS_ENDPOINT,
resource=gcs_filename,
querystring=urllib.urlencode(query_params))
Merci pour la troisième solution. La première partie de votre réponse est déjà en place. L'URL signée avec l'expiration est une bonne idée. Pas d'administration acl et un téléchargement de lien direct. Mais toute personne connaissant l'URL peut accéder à la ressource pour une durée limitée. – voscausa
L'URL est obscure et vous pouvez définir l'expiration sur quelques secondes. Assez de temps pour rediriger vers votre utilisateur et démarrer le téléchargement. –
Oui. Cela rend pratiquement impossible de détourner le lien. – voscausa