我有一个用Python编写的(非常基本但完美的)AWS lambda函数,但是它具有嵌入式连接到的凭据: 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'})
然后
conn = boto.connect_dynamodb(aws_access_key_id='FAKEhhahahah',aws_secret_access_key='FAKEdhdhdudjjdjdjhdjjhdjdjjd')
如果不在函数内部使用这些凭据,您将如何清理代码?
FYI此功能计划每5分钟运行一次(没有其他外部事件触发它)。
答案 0 :(得分:8)
在您的示例中,您有两种凭据:
使用AWS信誉一切都很简单:创建IAM角色,赋予它对dynamodb的权限,然后你就可以了。
对于非AWS信用,最安全的方法是:
kms.encrypt('foo')
)答案 1 :(得分:4)
最干净的方法是为DynamoDB
角色授予LambdaExec
权限。您的boto连接变为:
conn = boto.connect_dynamodb()
或者检查附加到您要提供给boto connect的用户的IAM策略。从该列表中选择并选择策略,并将这些权限授予LambdaExec
角色。另请查看:Easy Authorization of AWS Lambda Functions