【发布时间】:2023-01-27 20:58:30
【问题描述】:
我有一个公共 ARN 层,我希望在部署 Lambda 函数时使用它。
我的代码的相关 sn-p 如下:
LAMBDA_ARN_LAYER = "arn:aws:lambda:eu-north-1:012345678901:layer:canedge-influxdb-writer-2:5"
lambda_client = session.client("lambda")
lambda_client.create_function(
FunctionName=LAMBDA_FUNCTION_NAME,
Runtime=PYTHON_BUILD,
Role=LAMBDA_ROLE_ARN,
Handler=LAMBDA_HANDLER,
Code={"ZipFile": open(f"{LAMBDA_ZIP_FILE}.zip", "rb").read()},
Timeout=180,
MemorySize=1024,
Layers=[LAMBDA_ARN_LAYER],
)
当我使用自己的帐户(我也用它来创建和发布 ARN 层)运行它时,它会正常运行。但是,如果我尝试使用不同的账户部署 Lambda 函数,我会收到以下错误:
An error occurred (AccessDeniedException) when calling the CreateFunction operation: User: arn:aws:iam::XXX:user/XXX is not authorized to perform: lambda:GetLayerVersion on resource: arn:aws:lambda:eu-north-1:012345678901:layer:canedge-influxdb-writer-2:5 because no resource-based policy allows the lambda:GetLayerVersion action
奇怪的是,我可以用同一个用户“手动”进入我的 Lambda 函数并添加 ARN 层,它可以正常工作,所以它看起来是公开的。
当我最初创建 Lambda ARN 层时,我使用了以下代码(在通过子进程引用 AWS CLI 的 Python 脚本中:
aws lambda publish-layer-version --region {region} --layer-name {layer_name} --description "{layer_description}" --cli-connect-timeout 6000 --license-info "MIT" --zip-file "fileb://canedge-influxdb-writer.zip" --compatible-runtimes python3.9
aws lambda add-layer-version-permission --layer-name {layer_name} --version-number {version} --statement-id allAccountsExample --principal * --action lambda:GetLayerVersion --region {region}
我尝试部署的用户具有默认的管理员访问权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
我在上面缺少什么?
【问题讨论】:
标签: aws-lambda aws-cli aws-lambda-layers