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

AWS AppSync GraphQL Read policy not having any effect

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

根据我的理解,我猜用户即使没有登录也可以使用附加到 Amplify 项目的 IAM 用户权限执行读取操作。在这里,我将以下 policy/permission 附加到 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 授权模式时,我仍然遇到未经授权的错误。 这是控制台的片段 -

您必须添加 schema directives 才能应用 AppSync 其他授权模式。整个API.

只会自动应用默认的授权模式
type Query {
    getPost(id: ID): Post
    getAllPosts(): [Post]
    @aws_iam
}

aws_iam 身份验证模式需要 IAM 访问密钥和密钥凭据,您当然不想将其提供给客户端。如果您需要登录前 public 路由,api_key 身份验证是更好的选择。

AWS blogpost: Private data requires authenticated access using authorization mechanisms such as IAM, Amazon Cognito User Pools, and OIDC. Public data does not require authenticated access and is delivered through authorization mechanisms such as API Keys.