Appsync 查询使用 Cognito Auth 返回 Null
Appsync Query Returning Null with Cognito Auth
我正在尝试使用属于该组的用户池用户在控制台中执行一些应用程序同步。
但是,我的查询在响应中返回 null
。
我query
下面的PK绝对存在
我怀疑这个问题与cognito有关。我不能准确地确定它。我正在测试的用户在 customers
组中,由于 cognito 组权限,我在那里没有收到错误。
日志没有帮助。
如果我在控制台中创建一个新的 API(使用 API 密钥而不是 cognito 进行身份验证)并导入 dynamodb table(使用相同的角色),相同的查询 returns 数据。
我是否需要为我的 Cognito 组分配一个允许他们与 appsync 交互的角色?
我的查询:
query MyQuery {
getTable(PK: "PRODUCT#cb699976-153c-4852-a455-bc9a7bce6a93", SK: "PRODUCT#BLEND") {
DK1
PK
SK
}
}
回复:
{
"data": {
"getTable": null
}
}
架构:
type Query {
getTable(PK: String!, SK: String!): Table
@aws_auth(cognito_groups: ["customers"])
}
type Table @aws_auth(cognito_groups: ["customers"]) {
DK1: String
PK: String!
SK: String!
}
dynamodb 的 iam 角色(最小权限访问仍然是待办事项)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": [
"arn:aws:dynamodb:us-east-1:blah_account:table/blah_table/index/GSI1",
"arn:aws:dynamodb:us-east-1:blah_account:table/blah_table"
]
}
]
}
appsync 角色信任关系
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "appsync.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
appsync 配置($ aws appsync get-graphql-api
):
{
"graphqlApi": {
"name": "blah_dev_appsync",
"apiId": "blah",
"authenticationType": "AMAZON_COGNITO_USER_POOLS",
"userPoolConfig": {
"userPoolId": "us-east-1_blah",
"awsRegion": "us-east-1",
"defaultAction": "DENY"
},
"arn": "arn:aws:appsync:us-east-1:blah_id:apis/blah_",
"xrayEnabled": false
}
}
您能否检查您的(失败的)Appsync API 是否附加了解析器?
如果您有权访问 Web 控制台,请查找此屏幕:
如果 getTable
没有附加任何内容,那么这可能就是您得到空答案的原因。
Resolvers Docs
感谢 Ivan Caracamo 的回复,我了解到我需要正确配置我的解析器。
我能够通过 resolver docs and this post 到达那里。
这是我的请求模板
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"PK": $util.dynamodb.toDynamoDBJson($ctx.args.PK),
"SK": $util.dynamodb.toDynamoDBJson($ctx.args.SK),
},
}
这是我的回复模板
$util.toJson($ctx.result)
我正在尝试使用属于该组的用户池用户在控制台中执行一些应用程序同步。
但是,我的查询在响应中返回 null
。
我query
下面的PK绝对存在
我怀疑这个问题与cognito有关。我不能准确地确定它。我正在测试的用户在 customers
组中,由于 cognito 组权限,我在那里没有收到错误。
日志没有帮助。
如果我在控制台中创建一个新的 API(使用 API 密钥而不是 cognito 进行身份验证)并导入 dynamodb table(使用相同的角色),相同的查询 returns 数据。
我是否需要为我的 Cognito 组分配一个允许他们与 appsync 交互的角色?
我的查询:
query MyQuery {
getTable(PK: "PRODUCT#cb699976-153c-4852-a455-bc9a7bce6a93", SK: "PRODUCT#BLEND") {
DK1
PK
SK
}
}
回复:
{
"data": {
"getTable": null
}
}
架构:
type Query {
getTable(PK: String!, SK: String!): Table
@aws_auth(cognito_groups: ["customers"])
}
type Table @aws_auth(cognito_groups: ["customers"]) {
DK1: String
PK: String!
SK: String!
}
dynamodb 的 iam 角色(最小权限访问仍然是待办事项)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": [
"arn:aws:dynamodb:us-east-1:blah_account:table/blah_table/index/GSI1",
"arn:aws:dynamodb:us-east-1:blah_account:table/blah_table"
]
}
]
}
appsync 角色信任关系
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "appsync.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
appsync 配置($ aws appsync get-graphql-api
):
{
"graphqlApi": {
"name": "blah_dev_appsync",
"apiId": "blah",
"authenticationType": "AMAZON_COGNITO_USER_POOLS",
"userPoolConfig": {
"userPoolId": "us-east-1_blah",
"awsRegion": "us-east-1",
"defaultAction": "DENY"
},
"arn": "arn:aws:appsync:us-east-1:blah_id:apis/blah_",
"xrayEnabled": false
}
}
您能否检查您的(失败的)Appsync API 是否附加了解析器?
如果您有权访问 Web 控制台,请查找此屏幕:
如果 getTable
没有附加任何内容,那么这可能就是您得到空答案的原因。
Resolvers Docs
感谢 Ivan Caracamo 的回复,我了解到我需要正确配置我的解析器。
我能够通过 resolver docs and this post 到达那里。
这是我的请求模板
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"PK": $util.dynamodb.toDynamoDBJson($ctx.args.PK),
"SK": $util.dynamodb.toDynamoDBJson($ctx.args.SK),
},
}
这是我的回复模板
$util.toJson($ctx.result)