2012-02-14 17 views
7

lo general, cuando subo al almacenamiento S3, yo uso un AmazonS3Client así:Carga en Amazon S3 sin acceso y clave secreta

var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey, s3Config) 

Esto funciona bien para uso interno, pero ahora estoy buscando a proporcionar una aplicación para usuarios externos y no quieren que nuestro (sacret) acceda a las claves secretas & para estar afuera. He configurado un depósito S3 con una política de depósito que permite las cargas (PutObject) de usuarios anónimos, pero ¿cómo uso ahora el SDK de Amazon? Parece que no puedo encontrar ningún camino sin proporcionar el acceso y la clave secreta.

Respuesta

6

Solo necesita pasar null para accessKey y secretKey y puede usar el SDK para cualquier operación permitida anónimamente.

¡Mira esto related question of mine incluye una respuesta oficial de un empleado de Amazon desde su foro de desarrolladores! La información relevante de la cuestión vinculada:

Se trata de un empleado oficial de Amazon en su foro:

partir de la versión 1.3.8.0 del SDK se puede pasar nulo para el acceso y clave secreta y el SDK omitirá el proceso de firma y probará las operaciones como GetObject como una operación pública.

Norma

+2

¡Guau! Ese parece ser un método obvio y simple. Menos mal que también hiciste la pregunta o me sentiría avergonzado por no haber intentado esto antes de preguntar. :) Déjame probar eso. – BlueVoodoo

+0

@BlueVoodoo Hehe, ¡me alegro de haber ayudado dos veces! ¡Tanto al preguntar como al responder! Estoy un poco sorprendido de que no proporcionen un constructor que solo requiera s3Config, sin la necesidad de especificar 'accessKey' y' secretKey' ... ¡Creo que sería más intuitivo! – InvertedAcceleration

+1

Hmmm. Obtuve una ArgumentNullException al intentar inicializar mi carga multiparte. Motivo: "¡La clave de acceso secreta de AWS especificada es NULL!". El código es el siguiente: InitiateMultipartUploadResponse initResponse = s3Client.InitiateMultipartUpload (initRequest); – BlueVoodoo

6

No debe abrir un cubo para escritura pública, probable. Está abierto a muchos ataques y necesitará vigilar de cerca sus archivos de registro, etc.

Una mejor solución sería mantener el acceso privado predeterminado en el depósito, luego crear un usuario de IAM que solo tenga carga (y quizás descargar) permisos para el área requerida. Luego, cuando alguien quiera subir un archivo, puede usar una llamada a su servidor que tiene las teclas IAM para calcular y devolver una "publicación previamente firmada" que permitirá que su aplicación cliente publique un nuevo archivo en el servidor. A continuación, puede usar cualquier herramienta de autenticación que desee en su servidor para decidir si permite o no que alguien cargue, incluida la ausencia de autenticación, pero que tenga detección de abuso. Cuando hace esto, la clave secreta para el usuario de IAM nunca se envía al cliente, que puede estar en una sesión de depuración, etc.

Como toda la publicación está pre firmada, también puede decidir dónde está permitido el archivo. ir, el nombre del archivo cargado, etc. y devolverlo en la respuesta del servidor.

+0

Gracias por su consejo. Leerá sobre esto. – BlueVoodoo