我想使用 AWS Lambda 的基于资源的策略来授予对 AWS 服务的访问权限。
简短描述
您可以将 AWS Command Line Interface(AWS CLI)与 Lambda 配合使用,通过基于资源的策略向 AWS 服务授予访问权限。有关更多信息,请参阅使用 AWS Lambda 的基于资源的策略。
解决方法
以下示例为向 EventBridge 添加权限,并验证 Lambda 函数是否调用基于资源的策略。
注意:
确认 Lambda 函数没有配置资源策略
某些 AWS 服务(例如 EventBridge)会为 Lambda 函数创建基于资源的策略。使用与以下类似的 AWS CLI 命令 get-policy,验证基于资源的策略是否没有 EventBridge 的权限:
aws lambda get-policy --region your-region --function-name your-function
An error occurred (ResourceNotFoundException) when calling the GetPolicy operation: The resource you requested does not exist.
此错误确认 Lambda 函数未配置基于资源的策略。
向 EventBridge 添加权限
运行 AWS CLI 命令 add-permission 以调用与以下类似的 Lambda 函数:
aws lambda add-permission --region your-region --function-name your-function --statement-id "your-event-permission" --action "lambda:InvokeFunction" --principal "events.amazonaws.com" --source-arn "arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event"
{
"Statement": "{\"Sid\":\"your-event-permission\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:your-region:xxxxxxxxxxxxx:function:your-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event\"}}}"
}
验证 Lambda 函数基于资源的策略的权限
再次运行与以下类似的 AWS CLI 命令 get-policy:
aws lambda get-policy --region your-region --function-name your-function
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "your-event-permission",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:your-region:xxxxxxxxxxxxx:function:your-function",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event"
}
}
}
]
}
(可选)从 Lambda 函数的基于资源的策略中删除权限
如果您不再需要 AWS 服务来触发 Lambda 函数,则可以运行与以下类似的 AWS CLI 命令 remove-permission:
aws lambda remove-permission --region your-region --function-name your-function --statement-id "your-event-permission"
**注意:**Lambda 函数的基于资源的策略配额为 20 KB。有关更多信息,请参阅 Lambda 配额。
相关信息
如何解决 Lambda 中的错误“最终策略大小超出限制”?