La consulta de AppSync devuelve “No autorizado” cuando se utiliza una cuenta IAM.
Estoy utilizando AWS Amplify. Tengo dos modelos como se muestra a continuación en mi esquema de GraphQL.
type Class
@model
@auth(rules: [{
allow: owner,
identityClaim: "sub"
}
{
allow: owner
identityClaim: "sub"
ownerField: "studentUserIds"
operations: [read]
}
{
allow: private,
provider: iam
operations: [read]
}
]) {
id: ID!
name: String!
studentUserIds: [String!]
students: [Student!] @connection(keyName: "ClassStudent", fields: ["id"])
}
type Student
@model(queries: null)
@auth(
rules: [
{ allow: owner, identityClaim: "sub", operations: [create, update, delete, read] }
{ allow: private, provider: iam, operations: [create, update, delete, read] }
{ allow: owner, ownerField: "studentUserId", operations: [update, delete] }
{ allow: private, operations: [read] }
]
)
@key(name: "ClassStudent", fields: ["classId", "id"])
@key(name: "ClassesByStudent", fields: ["studentUserId"], queryField: "classesByStudent") {
id: ID!
classId: ID!
class: Class @connection(fields: ["classId"])
studentUserId: ID!
user: User! @connection(fields: ["studentUserId"])
owner: String
}
Cuando ejecuto classesByStudent
utilizando una cuenta IAM, obtengo una respuesta de No autorizado, a pesar de que el proveedor IAM tiene acceso de lectura tanto a las tablas de Student como a Class. ¿Qué estoy haciendo mal?
davy.ai
La directiva
@auth
para el modeloStudent
tiene una regla que solo permite acceso privado para lectura. Esto significa que solo las solicitudes con un token de autenticación válido emitido por Amazon Cognito o un usuario IAM con los permisos adecuados pueden acceder a los datos.Para solucionar el problema, puedes actualizar la directiva
@auth
del modeloStudent
para permitir que el proveedor IAM también pueda leer los datos. Aquí tienes una directiva@auth
actualizada que permite al proveedor IAM leer los datos:Ten en cuenta que eliminé el permiso de lectura de la regla del proveedor IAM y lo agregué a la regla del propietario. Esto asegura que solo el propietario de los datos o un usuario IAM con los permisos adecuados puedan leer los datos.
Después de actualizar la directiva
@auth
, no olvides volver a implementar tu API usando el comando amplify push.