¿Cómo (correctamente) usar credenciales externas en una función de AWS Lambda?

Tengo una función lambda AWS (extremadamente básica pero que funciona perfectamente) escrita en Python que, sin embargo, tiene credenciales integradas para conectarse a: 1) un servicio web externo 2) una tabla DynamoDB.

Lo que hace la función es bastante básico: POSTA un inicio de sesión contra un servicio (con credenciales # 1) y luego guarda parte del estado de respuesta en una tabla de DynamoDB (con credenciales de AWS # 2).

Estas son las partes relevantes de la función:

h = httplib2.Http() auth = base64.encodestring('myuser' + ':' + 'mysecretpassword') (response, content) = h.request('https://vca.vmware.com/api/iam/login', 'POST', headers = {'Authorization':'Basic ' + auth,'Accept':'application/xml;version=5.7'}) 

y entonces

 conn = boto.connect_dynamodb(aws_access_key_id='FAKEhhahahah',aws_secret_access_key='FAKEdhdhdudjjdjdjhdjjhdjdjjd') 

¿Cómo haría para limpiar el código al NO tener estas credenciales dentro de la función?

Para su información, esta función está progtwigda para ejecutarse cada 5 minutos (no hay ningún otro evento externo que lo active).

En tu ejemplo tienes 2 tipos de credenciales:

  1. Credenciales de AWS
  2. Ninguna credencial de AWS

Con AWS acredita que todo sea sencillo: cree un rol de IAM, déle permiso para dynamodb y le irá bien.

Sin credenciales de AWS, el enfoque más seguro sería:

  1. Cifre las credenciales por adelantado utilizando el servicio kms. ( kms.encrypt('foo') )
  2. Una vez que haya cifrado la versión de su información. Siéntete libre de guardarlo donde quieras. La forma más sencilla sería codificarlo en lambda.
  3. Agregue permiso al rol lambda IAM para descifrar información usando la clave kms que utilizó en el paso 1.
  4. Luego, cada vez que se invoca lambda, deje que llame a kms para descifrar la información.

La forma más limpia es otorgar privilegios de LambdaExec rol LambdaExec . Tu boto connect se convierte en:

 conn = boto.connect_dynamodb() 

O revise las políticas de IAM adjuntas al usuario cuyas credenciales está proporcionando para conectarse. Elija y elija las políticas de esa lista y otorgue esos privilegios al rol de LambdaExec . También eche un vistazo a: Fácil autorización de las funciones de AWS Lambda