AWS AppSync GraphQL 读取策略没有任何效果

Posted

技术标签:

【中文标题】AWS AppSync GraphQL 读取策略没有任何效果【英文标题】:AWS AppSync GraphQL Read policy not having any effect 【发布时间】:2022-01-01 09:27:06 【问题描述】:

我设置了一个 AppSync GraphQL API,它使用两种授权模式,默认是 Cognito,其他是 IAM。现在我想在用户登录之前运行这个查询,我将使用 IAM 授权模式。此 Api 将通过 lambda 函数访问 dynamodb 表。

根据我的理解,我猜用户可以执行读取操作,即使他们没有使用附加到 Amplify 项目的 IAM 用户权限登录。在这里,我将以下策略/权限附加到 IAM 用户。如果我的想法正确,请告诉我。

这是我为在我的 API 上执行查询操作而创建的策略


    "Version": "2012-10-17",
    "Statement": [
        
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "appsync:GraphQL",
            "Resource": "arn:aws:appsync:<REGION>:<ACCOUNT>:apis/<APIID>/types/Query/fields/getUserById"
        
    ]

现在,当我在 AppSync 控制台中使用 IAM 授权模式运行时,我仍然收到未经授权的错误。 这是控制台的截图 -

【问题讨论】:

【参考方案1】:

您必须添加 schema directives 才能应用 AppSync 其他授权模式。只有默认授权模式会自动应用于整个 API。

type Query 
    getPost(id: ID): Post
    getAllPosts(): [Post]
    @aws_iam

aws_iam auth 模式需要 IAM 访问密钥和密钥凭证,您当然不想提供给客户端。如果您需要预登录公共路由,api_key auth 是更好的选择。

AWS blogpost:私有数据需要使用 IAM、Amazon Cognito 用户池和 OIDC 等授权机制进行身份验证访问。公共数据不需要经过身份验证的访问,而是通过 API 密钥等授权机制交付。

【讨论】:

感谢fedonev的详细解释。我按照你说的做了,我现在正在取回数据。

以上是关于AWS AppSync GraphQL 读取策略没有任何效果的主要内容,如果未能解决你的问题,请参考以下文章

AWS GraphQL Appsync - 无法担任角色

如何使用 AWS appsync (GraphQL) 禁用自省查询?

使用 AWS Amplify/AppSync 的嵌套 GraphQL 突变

如何在部署前从@aws-cdk/aws-appsync 检索 schema.graphql 文件

我们可以在不使用 GraphQL 的情况下在项目中实施 AWS-Appsync 吗?

aws amplify appsync 中的 Graphql 突变错误