如何使用 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

通过 AWS AppSync GraphQL API 使用多种授权类型