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 appsync (GraphQL) 禁用自省查询?
使用 AWS Amplify/AppSync 的嵌套 GraphQL 突变
如何在部署前从@aws-cdk/aws-appsync 检索 schema.graphql 文件