从 lambda 函数中访问 AWS API?
Accessing AWS APIs from within a lambda function?
我正在编写我的第一个 lambda 函数(在 Python 中),我对凭证在 lambda 环境中的工作方式感到有点困惑。我正在尝试从 aws secrets api 中检索一个 secret(用于 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 凭据的环境中在本地运行良好,但是 returns None 在 运行 作为 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"
]
}
我假设通过为具有适当权限(AmazonRDSDataFullAccess
,包括访问机密管理器的权限)的 lambda 函数分配角色,一切都将被设置。我是否需要向 lambda 函数提供明确的凭据(例如,访问密钥和秘密)?
您无需提供明确的凭据,lambda 将从您分配给它的角色中获取凭据。您要的秘密是什么,因为 AmazonRDSDataFullAccess
只能访问位于 rds-db-credentials/*
.
的秘密
我正在编写我的第一个 lambda 函数(在 Python 中),我对凭证在 lambda 环境中的工作方式感到有点困惑。我正在尝试从 aws secrets api 中检索一个 secret(用于 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 凭据的环境中在本地运行良好,但是 returns None 在 运行 作为 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"
]
}
我假设通过为具有适当权限(AmazonRDSDataFullAccess
,包括访问机密管理器的权限)的 lambda 函数分配角色,一切都将被设置。我是否需要向 lambda 函数提供明确的凭据(例如,访问密钥和秘密)?
您无需提供明确的凭据,lambda 将从您分配给它的角色中获取凭据。您要的秘密是什么,因为 AmazonRDSDataFullAccess
只能访问位于 rds-db-credentials/*
.