2010-02-10 12 views
10

Estoy jugando con el uso de servicios web de Amazon en mi proyecto personal. Agarré su AWS SDK para .NET y lo estoy usando, pero estoy un poco confundido.Mantener una clave secreta en secreto con Amazon Web Services

  1. acceso al servicio web (en este caso, SimpleDB, aunque no creo que eso es muy importante a la pregunta) está autorizado a través de un par de claves pública/privada.

  2. El AWS SDK para .NET API se utiliza para crear un objeto de cliente requiere la clave privada:

    AWSClientFactory.CreateAmazonSimpleDBClient(publicKey, privateKey); 
    
  3. Esta es una aplicación cliente, por lo que el código se ejecuta por completo en el cliente.

  4. sugiriendo que el cliente necesitaría tener acceso a mi clave privada para tener acceso al SimpleDB. Pero amazon reiteradamente y enfáticamente declara que mi clave privada no debe dejar mi control.

Esto no tiene sentido para mí, así que me parece que me falta algo.

¿Es una aplicación del lado del cliente el modelo incorrecto para los servicios web de Amazon en general, para usar su AWS SDK para .NET, o me falta algo que hace que una aplicación cliente sea perfectamente razonable? ¿Hay una buena manera de evitar esto sin crear un servicio de proxy propio que autentique a los clientes y envíe sus solicitudes al SimpleDB?

Respuesta

7

No es necesario que implemente un proxy que haga frente al servicio remoto (AWS). Simplemente implemente un servicio simple, pequeño y autenticado que devuelva al cliente la URL y los encabezados que se utilizarán al comunicarse con AWS. Su servicio web autenticado mantiene la AWS en secreto, y solo proporciona la URL de solicitud firmada y los encabezados al cliente, que luego ejecuta la llamada de trabajo real utilizando esa información devuelta.

De esta forma, evita la sobrecarga durante la llamada de AWS de tener que pasar por sus propios servidores, ahorrando latencia, ancho de banda, enchufes en su servidor, complejidad de manejo de fallas, etc. Simplemente toma un peso ligero por adelantado para que el cliente obtenga las instrucciones adecuadas.

+0

Agradezco la respuesta. Trabajo principalmente en un mundo de escritorio, por lo que la posibilidad de autenticar y proporcionar el url firmado y los encabezados nunca se me ocurrió. –

+0

Si sigue esta ruta, ¿puede seguir utilizando la API de .NET? –

+1

La respuesta a mi propia pregunta es "No": tiene que modificar el código para llamar a distancia AWSSDKUtils.HMACSign. –

Cuestiones relacionadas