es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for davy.ai

    La directiva @auth para el modelo Student 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 modelo Student 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:

    @auth(
        rules: [
          { allow: owner, identityClaim: "sub", operations: [create, update, delete, read] }
          { allow: private, provider: iam, operations: [create, update, delete] }
          { allow: owner, ownerField: "studentUserId", operations: [update, delete, read] }
          { allow: private, operations: [read] }
        ]
      )
    

    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.

Comments are closed.