如何(正确)在AWS Lambda函数中使用外部凭据?

mre*_*rre 7 python boto amazon-web-services amazon-iam aws-lambda

我有一个(非常基本但完美的)AWS lambda函数,用Python编写,但是有嵌入的凭据连接到:1)外部Web服务2)DynamoDB表.

该函数的作用非常基本:它针对服务POST(登录凭证#1),然后将部分响应状态保存到DynamoDB表中(使用AWS凭证#2).

这些是该功能的相关部分:

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'})
Run Code Online (Sandbox Code Playgroud)

然后

conn = boto.connect_dynamodb(aws_access_key_id='FAKEhhahahah',aws_secret_access_key='FAKEdhdhdudjjdjdjhdjjhdjdjjd')
Run Code Online (Sandbox Code Playgroud)

如何通过在函数内部不使用这些凭据来清理代码?

仅供参考此功能计划每5分钟运行一次(没有其他外部事件触发它).

Vor*_*Vor 8

在您的示例中,您有两种类型的凭据:

  1. AWS信誉
  2. 没有AWS信誉

使用AWS信誉一切都很简单:创建IAM角色,赋予它对dynamodb的权限,你就可以了.

对于非AWS信用,最安全的方法是:

  1. 使用kms服务预先加密凭据.(kms.encrypt('foo'))
  2. 一旦你有了加密版的信息.随意存放在任何你想要的地方.最简单的方法是在lambda中进行硬编码.
  3. 添加lambda IAM Role的权限,以使用您在步骤1中使用的kms密钥解密信息.
  4. 然后每次调用lambda时,让它调用kms来解密信息.