从lambda函数中访问AWS API?

2024-10-06 12:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写我的第一个lambda函数(用Python编写),对于凭证在lambda环境中应该如何工作,我有点困惑。我试图从aws secrets api中检索一个秘密(用于Aurora数据库访问),使用的示例代码如下(为了简洁起见,我去掉了所有的错误处理):

def get_secret():
    secret_name = 'dbtest-postgres-secret'
    region_name = 'us-east-2'

    session = boto3.session.Session()                                                                                                                                                          
    client = session.client(                                                                                                                                                                   
        service_name='secretsmanager',                                                                                                                                                         
        region_name=region_name                                                                                                                                                                
    )                                                                                                                                                                                          

    get_secret_value_response = client.get_secret_value(                                                                                                                                   
        SecretId=secret_name                                                                                                                                                               
    )                                                                                                                                                                                      

    secret = get_secret_value_response['SecretString']

    return secret

在我拥有普通AWS凭据的环境中,这可以在本地正常工作,但在作为lambda函数的一部分运行时不会返回任何错误。我是这样使用它的:

def handler(event, context):
    secret = get_secret()
    assert secret is not None

它在assert语句中失败了:

{
  "errorType": "AssertionError",
  "stackTrace": [
    "  File \"/var/task/dbtest.py\", line nn, in handler\n    assert secret is not None\n"
  ]
}

我假设通过向lambda函数分配一个具有适当权限(AmazonRDSDataFullAccess,其中包括访问机密管理器的权限)的角色,一切都将被设置。我是否需要为lambda函数提供显式凭据(例如,访问密钥和密码)


Tags: lambda函数nameclientgetsecret环境value
1条回答
网友
1楼 · 发布于 2024-10-06 12:28:37

您不需要提供显式凭据,lambda将从您分配给它的角色获取凭据。你要的秘密是什么,因为AmazonRDSDataFullAccess只能在rds-db-credentials/*访问秘密

相关问题 更多 >