Almacenamiento en la nube y estrategia de descarga segura en el motor de la aplicación. GCS acl o blobstore

Mi aplicación appengine crea archivos de almacenamiento en la nube. Los archivos serán descargados por un tercero. Los archivos contieneninformación médica personal.

¿Cuál sería la forma preferida de descarga?

Usando un enlace de descarga directa de GCS con un usuario READER acl.O utilizando un controlador de descarga de blobstore en una aplicación de appengine.

Ambas soluciones requieren que el tercero inicie sesión (inicio de sesión de Google). El rendimiento no es un problema. Privacidad y la ocurrencia de errores de seguridad y errores son.

Usar un archivo zip cifrado para descargar es una opción. Esto significa que tengo que almacenar la contraseña en el proyecto. ¿O enviar por correo electrónico una contraseña aleatoria?

Actualizar El código de anexo que utilicé para crear una URL de descarga firmada

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))

Respuestas a la pregunta(1)

Su respuesta a la pregunta