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.

Política de cubo con Minio

Tenga en cuenta: No estoy utilizando AWS como proveedor de S3, sino algo llamado Cegedim S3.

La siguiente operación no funciona con el cliente Minio, pero con boto3 sí funciona.

Cuando intento configurar la siguiente política con el cliente Minio, funciona para las operaciones a nivel de bucket, pero no para las operaciones a nivel de objeto.

 policy = {
            "Version": "2012-10-17",
            "Id": "Policy1639139464683",
            "Statement": [
                {
                    "Action": [
                        "s3:ListBucket"
                    ],
                    "Resource": "arn:aws:s3:::test",
                    "Effect": "Allow",
                    "Principal": {
                        "AWS": [
                            "{user_access_key}"
                        ]
                    },
                    "Sid": "Stmt1639139460416"
                },
                {
                    "Action": [
                        "s3:GetObject",
                        "s3:PutObject"
                    ],
                    "Resource": "arn:aws:s3:::test/*",
                    "Effect": "Allow",
                    "Principal": {
                        "AWS": [
                            "{user_access_key}"
                        ]
                    },
                    "Sid": "Stmt1639139460415",
                }
            ]
        }

Conexión Minio

 def minio(self) -> Minio:
     return Minio(
         endpoint=f"{self.config.s3.host}:{self.config.s3.port}",
         access_key=Secrets.S3_USER.get_value(),
         secret_key=Secrets.S3_PASSWORD.get_value(),
         secure=(self.config.s3.schema != "http"),
        )

Después de configurar esta política, no puedo realizar operaciones de obtener/poner ni ninguna otra operación en objetos.

¿Hay alguna solución alternativa para esto con el cliente Minio?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Dado que no estás utilizando AWS S3 como proveedor, sino un proveedor de S3 diferente llamado Cegedim S3, es posible que el cliente Minio no sea compatible con la API del proveedor para operaciones a nivel de objeto. Una solución alternativa para este problema con el cliente Minio podría ser utilizar el propio SDK o las bibliotecas de cliente del proveedor en lugar del cliente Minio para realizar operaciones a nivel de objeto.

    Alternativamente, podrías intentar modificar la política para incluir permisos para operaciones a nivel de objeto de forma explícita, agregando otra declaración con las acciones necesarias y la definición de recursos para las operaciones a nivel de objeto.

    Aquí tienes un ejemplo de política que incluye permisos explícitos para operaciones a nivel de objeto:

    policy = {
        "Version": "2012-10-17",
        "Id": "Policy1639139464683",
        "Statement": [
            {
                "Action": [
                    "s3:ListBucket"
                ],
                "Resource": "arn:aws:s3:::test",
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "{user_access_key}"
                    ]
                },
                "Sid": "Stmt1639139460416"
            },
            {
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::test/*",
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "{user_access_key}"
                    ]
                },
                "Sid": "Stmt1639139460415",
            },
            {
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::test/object/*",
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "{user_access_key}"
                    ]
                },
                "Sid": "Stmt1639139460417",
            }
        ]
    }
    

    En esta política modificada, la nueva declaración permite las acciones s3:GetObject y s3:PutObject para objetos bajo el prefijo test/object. Debes reemplazar test y object en el campo Resource con los nombres de bucket y prefijo apropiados para tu caso de uso.

    Si estas soluciones alternativas no resuelven el problema con el cliente Minio, es posible que necesites ponerse en contacto con el soporte del proveedor para obtener ayuda adicional con la integración de su API.

Comments are closed.