amazon-web-services - 将基于资源的策略添加到 AWS Lambda 函数的正确 JSON 格式是什么?
问题描述
我有一个现有的 Lambda 函数 Lambda1 ,它附加了一个资源策略。此资源策略提供对 AWS API Gateway 的 Lambda 函数的访问,特别是对资源 API Authorizer 的访问。如果我在 Lambda 函数控制台上查看资源策略,我会看到以下 JSON 文本
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "333380d7-2251-452f-8640-d919e5d3d1bf",
"Effect": "Allow",
"Principal": {
"Service": "apigateway.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:eu-west-1:492572502211:function:Lambda1",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:execute-api:eu-west-1:492572502211:kkwykrocn2/authorizers/98sqsv"
}
}
}
]
}
我想附加一个类似于Resource based policy
我的另一个 Lambda 函数 Lambda2。我想执行以下命令
aws lambda add-permission --cli-input-json file://C:\script\policy.json
如果我将 JSON 文本粘贴到 policy.json 文件中并执行上述命令,则会收到以下错误:
Parameter validation failed:
Missing required parameter in input: "FunctionName"
Missing required parameter in input: "StatementId"
Unknown parameter in input: "Version", must be one of: FunctionName, StatementId, Action, Principal, SourceArn, SourceAccount, EventSourceToken, Qualifier, RevisionId
Unknown parameter in input: "Id", must be one of: FunctionName, StatementId, Action, Principal, SourceArn, SourceAccount, EventSourceToken, Qualifier, RevisionId
Unknown parameter in input: "Sid", must be one of: FunctionName, StatementId, Action, Principal, SourceArn, SourceAccount, EventSourceToken, Qualifier, RevisionId
Unknown parameter in input: "Effect", must be one of: FunctionName, StatementId, Action, Principal, SourceArn, SourceAccount, EventSourceToken, Qualifier, RevisionId
Unknown parameter in input: "Resource", must be one of: FunctionName, StatementId, Action, Principal, SourceArn, SourceAccount, EventSourceToken, Qualifier, RevisionId
Unknown parameter in input: "Condition", must be one of: FunctionName, StatementId, Action, Principal, SourceArn, SourceAccount, EventSourceToken, Qualifier, RevisionId
Invalid type for parameter Principal, value: {'Service': 'apigateway.amazonaws.com'}, type: <class 'dict'>, valid types: <class 'str'>
在检查add-permission AWS CLI 命令的文档时,我发现使用--generate-cli-skeleton
正确格式应如下的选项:
{
"StatementId": "",
"Action": "",
"Principal": "",
"SourceArn": "",
"SourceAccount": "",
"EventSourceToken": "",
"Qualifier": "",
"RevisionId": ""
}
在上面的 JSON 结构中,没有条件元素,通过它我可以只提供对 API 网关中授权方资源的访问。有人可以帮我理解如何添加上述 JSON 结构的条件元素吗?(请参阅粘贴在本问题开头的 JSON 文本以查看条件元素)
解决方案
如果您指定和/或,将自动创建条件。SourceArn
SourceAccount
你不能创造其他条件。您可以使用这些参数检查文档以创建权限,例如:
aws lambda add-permission --function-name my-function --action lambda:InvokeFunction --statement-id sns-my-topic \
--principal sns.amazonaws.com --source-arn arn:aws:sns:us-east-2:123456789012:my-topic
推荐阅读
- java - 数据加载时间很长,RecyclerView中不显示数据
- sql - 每个用户的 SQL 最新日期 - 消除重复
- c# - 太多数据 xcb_xlib_too_much_data_requested
- ruby-on-rails - 查询关联表
- python - numpy 数组重塑 astype 太慢
- sql-server - 每日订阅未触发
- python - 具有等距x轴值python的线图
- javascript - jQuery选择父然后其他div
- java - 从 URL 的数组中获取数组
- qt - 其中定义了'index'属性,因为Repeater用于实例化一个项目数组,每个项目都可以访问索引