为什么我不能在 IAM 策略中使用通配符来调用 lambda 函数?
Why can't I put wildcard to invoke a lambda function in IAM policy?
我需要从另一个 lambda (lambdaA) 调用一个 lambda (lambdaB)。在 lambdaA 的 IAM 策略中,我有以下配置:
{
"Action": [
"lambda:invokeFunction"
],
"Resource": [
"arn:aws:lambda:ap-southeast-2:264100014405:function:handler:*"
],
"Effect": "Allow"
}
它不起作用,我在 lambdaA 中遇到以下错误:
lambdaA 无权执行:lambda:InvokeFunction 资源:arn:aws:lambda:ap-southeast-2:264100014405:handler 因为没有基于身份的策略允许 lambda:InvokeFunction 操作。
但是如果我从资源中删除通配符:
"Resource": [
"arn:aws:lambda:ap-southeast-2:264100014405:function:handler"
],
它工作正常。
lambdaA 调用 aws-sdk 调用 lambda,lambda 名称为 handler
.
我放通配符的原因是我想授予 lambdaA 权限以在将来调用 lambdaB 上的所有别名。我应该为 lambdaA 的角色设置什么正确的 IAM 策略?
您对AWS Lambda 函数的ARN 有一点误解。将 IAM 策略中的 ARN 更改为:
arn:aws:lambda:ap-southeast-2:264100014405:function:YOUR_FUNCTION_NAME
您可以在 AWS 控制台中找到 YOUR_FUNCTION_NAME
或使用 aws-cli 并调用 aws lambda list-functions
。
说明
Lambda 函数的 ARN 包括:
arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME
使用别名或版本时,您可以附加:
arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME:ALIAS
arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME:VERSION
你可以阅读更多in the Lambda documentation
Lambda 函数的 handler
就 Lambda 而言是一个配置变量。它在 Arns 中不起作用。如果您使用 aws-cli 执行 aws lambda list-functions
命令,您会看到处理程序是与 ARN 分开的 属性。例如,对于每个函数:
{
"FunctionName": "stack-overflow-func",
"FunctionArn": "arn:aws:lambda:us-west-2:111111111111:function:stack-overflow-func",
"Runtime": "python3.9",
"Role": "arn:aws:iam::111111111111:role/role-name-3IJQ",
"Handler": "handler.lambda_handler",
...
}
您需要将通配符添加到不带冒号的 lambdaName 中。像这样:
arn:aws:lambda:ap-southeast-2:264100014405:function:handler*
它将授予调用 handler
的全部 versions/aliases 的权限。
我需要从另一个 lambda (lambdaA) 调用一个 lambda (lambdaB)。在 lambdaA 的 IAM 策略中,我有以下配置:
{
"Action": [
"lambda:invokeFunction"
],
"Resource": [
"arn:aws:lambda:ap-southeast-2:264100014405:function:handler:*"
],
"Effect": "Allow"
}
它不起作用,我在 lambdaA 中遇到以下错误:
lambdaA 无权执行:lambda:InvokeFunction 资源:arn:aws:lambda:ap-southeast-2:264100014405:handler 因为没有基于身份的策略允许 lambda:InvokeFunction 操作。
但是如果我从资源中删除通配符:
"Resource": [
"arn:aws:lambda:ap-southeast-2:264100014405:function:handler"
],
它工作正常。
lambdaA 调用 aws-sdk 调用 lambda,lambda 名称为 handler
.
我放通配符的原因是我想授予 lambdaA 权限以在将来调用 lambdaB 上的所有别名。我应该为 lambdaA 的角色设置什么正确的 IAM 策略?
您对AWS Lambda 函数的ARN 有一点误解。将 IAM 策略中的 ARN 更改为:
arn:aws:lambda:ap-southeast-2:264100014405:function:YOUR_FUNCTION_NAME
您可以在 AWS 控制台中找到 YOUR_FUNCTION_NAME
或使用 aws-cli 并调用 aws lambda list-functions
。
说明
Lambda 函数的 ARN 包括:
arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME
使用别名或版本时,您可以附加:
arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME:ALIAS
arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME:VERSION
你可以阅读更多in the Lambda documentation
Lambda 函数的 handler
就 Lambda 而言是一个配置变量。它在 Arns 中不起作用。如果您使用 aws-cli 执行 aws lambda list-functions
命令,您会看到处理程序是与 ARN 分开的 属性。例如,对于每个函数:
{
"FunctionName": "stack-overflow-func",
"FunctionArn": "arn:aws:lambda:us-west-2:111111111111:function:stack-overflow-func",
"Runtime": "python3.9",
"Role": "arn:aws:iam::111111111111:role/role-name-3IJQ",
"Handler": "handler.lambda_handler",
...
}
您需要将通配符添加到不带冒号的 lambdaName 中。像这样:
arn:aws:lambda:ap-southeast-2:264100014405:function:handler*
它将授予调用 handler
的全部 versions/aliases 的权限。