Lambda脚本调用LakeFormation授权报错:TableWildcard参数不合法
问题排查:Lambda调用LakeFormation grant_permissions接口参数错误
错误信息
Error granting permission:Parameter validation failed
Unknown parameter in Resource.Table.TableWildcard:"TableWildcard",must be one of:
问题分析
脚本中对TableWildcard的写法不符合AWS LakeFormation API规范。根据定义,TableWildcard是一个空结构体,仅用来表示匹配指定数据库下的所有表,不需要传入任何额外参数(你写的{db_name}.%这种通配符格式完全错误)。
你错误地给TableWildcard嵌套了同名键值对,直接触发了参数校验失败。
修正后的代码
import json import boto3 def lambda_handler(event, context): lf_client = boto3.client('lakeformation') account_id = "123456789012" db_name = event["DatabaseName"] try: lf_client.grant_permissions( Principal={ "DataLakePrincipalIdentifier": f"arn:aws:iam::{account_id}:role/service-role/AWSLambdaBasicExecutionRole" }, Resource={ "Table": { "DatabaseName": db_name, "TableWildcard": {} # 改为空结构体即可 } }, Permissions=["ALL"] ) print(f"已为数据库 {db_name} 授予权限") return { "statusCode": 200, "body": json.dumps("权限授予成功") } except Exception as e: print(e) raise e
补充说明
- 若需匹配特定表而非所有表,应使用
TableName字段指定具体表名,而非TableWildcard。 TableWildcard的唯一作用就是匹配指定数据库下的全部表,无需额外配置通配符表达式。
内容的提问来源于stack exchange,提问作者Shubham Badhaya
相关产品推荐
相关产品推荐

