如何使用 AWS appsync (GraphQL) 禁用自省查询?
Posted
技术标签:
【中文标题】如何使用 AWS appsync (GraphQL) 禁用自省查询?【英文标题】:How to disable introspection queries with AWS appsync (GraphQL)? 【发布时间】:2020-04-17 14:44:10 【问题描述】:根据合规性,我们需要在生产中删除 AppSync 端点的自省查询。使用 AppSync 禁用自省查询的最佳方法是什么?
我没有看到 AppSync 的任何设置。
【问题讨论】:
您能否与 IAM 一起工作,您能否在此处提供答案 这方面有什么更新吗?我们只使用 API 密钥,不使用 IAM/Cognito,并且我们希望为我们的生产图禁用自省。 【参考方案1】:我使用 AWS WAF 的规则阻止任何包含字符串 __schema
的查询,然后我将其与我的 AppSync 端点相关联——它使用 OpenID 进行身份验证(此页面:https://docs.aws.amazon.com/appsync/latest/devguide/WAF-Integration.html)
如果您只想复制并粘贴到控制台中的规则:
"Name": "BodyRule",
"Priority": 5,
"Action":
"Block":
,
"VisibilityConfig":
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "BodyRule"
,
"Statement":
"ByteMatchStatement":
"FieldToMatch":
"Body":
,
"PositionalConstraint": "CONTAINS",
"SearchString": "__schema",
"TextTransformations": [
"Type": "LOWERCASE",
"Priority": 0
]
以及 CloudFormation 定义:
AppSyncIntrospectionWebACL:
Type: AWS::WAFv2::WebACL
Properties:
Name: BlockIntrospectionWebACL
DefaultAction:
Allow:
Description: Block GraphQL introspection queries
Scope: REGIONAL
VisibilityConfig:
SampledRequestsEnabled: true
CloudWatchMetricsEnabled: true
MetricName: BlockIntrospectionMetric
Rules:
- Name: BlockIntrospectionQueries
Priority: 0
Action:
Block:
VisibilityConfig:
SampledRequestsEnabled: true
CloudWatchMetricsEnabled: true
MetricName: BlockedIntrospection
Statement:
ByteMatchStatement:
FieldToMatch:
Body:
PositionalConstraint: CONTAINS
SearchString: __schema
TextTransformations:
- Type:
Priority: 0
AppSyncIntrospectionWebACLAssociation:
Type: AWS::WAFv2::WebACLAssociation
Properties:
ResourceArn: !GetAtt AppSyncAPI.Arn
WebACLArn: !GetAtt AppSyncIntrospectionWebACL.Arn
【讨论】:
【参考方案2】:目前无法直接从 AppSync 禁用自省查询。您可以在其前面放置一个 API Gateway api,并拦截自省查询调用。 GraphQL 端点本质上是自记录的,因此禁用自省查询会使 API 不是 GraphQL 兼容的端点。
您能否分享需要禁用自省查询的用例/合规标准?试图提高 [API 端点的] 安全性 [类型和字段的] 隐蔽 似乎是代码异味和入侵的秘诀。拥有强大的细粒度(即每个字段)授权是防止任何人访问他们不应该知道的数据的唯一安全方法。
【讨论】:
阅读更多。 IAM 政策有可能。 @Kannaiyan 是否可以与 Cognito 用户池集成? 是的,您可以为 cognito 进行配置。以上是关于如何使用 AWS appsync (GraphQL) 禁用自省查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何从命令行向 AWS AppSync 发送 GraphQL 查询?
如何操作 AWS AppSync 和 GraphQL 以符合 DynamoDB 最佳实践?
如何使用 Amplify 为 GraphQL API (AWS AppSync) 生成类
在将 aws cdk 与 appsync 一起使用时,如何将突变添加到 graphql 架构并防止部署失败?
AWS AppSync GraphQL - 如何使用 PK/SK 查询而不是扫描整个 dynamoDB 表以获取 graphql 列表 API