Saltar al contenido

Permisos de archivo de Amazon S3, acceso denegado cuando se copia desde otra cuenta

Solución:

¡Un acertijo muy interesante! Afortunadamente, hay una solución.

Primero, un resumen:

  • Cubo A en la cuenta A
  • Cubo B en la cuenta B
  • El usuario de la cuenta A copia objetos en el depósito B (habiendo recibido los permisos adecuados para hacerlo)
  • Los objetos en el depósito B todavía pertenecen a la cuenta A y no se puede acceder a la cuenta B

Logré reproducir esto y puedo confirmar que los usuarios de la cuenta B no pueden acceder al archivo, ¡ni siquiera el usuario root de la cuenta B!

Afortunadamente, las cosas se pueden arreglar. los aws s3 cp El comando en la AWS Command-Line Interface (CLI) puede actualizar los permisos en un archivo cuando se copia con el mismo nombre. Sin embargo, para activar esto, también debe actualizar algo más, de lo contrario, obtendrá este error:

Esta solicitud de copia es ilegal porque intenta copiar un objeto a sí mismo sin cambiar los metadatos, la clase de almacenamiento, la ubicación de redireccionamiento del sitio web o los atributos de cifrado del objeto.

Por tanto, los permisos se pueden actualizar con este comando:

aws s3 cp s3://my-bucket/ s3://my-bucket/ --recursive --acl bucket-owner-full-control --metadata "One=Two"
  • Debe ser ejecutado por un usuario de Cuenta A que tenga permisos de acceso a los objetos (por ejemplo, el usuario que originalmente copió los objetos en el Depósito B)
  • El contenido de los metadatos no es importante, pero es necesario para forzar la actualización.
  • --acl bucket-owner-full-control otorgará permiso a la cuenta B para que pueda usar los objetos con normalidad

Resultado final: ¡Un cubo que puedes usar!

aws s3 cp s3://account1/ s3://accountb/ --recursive --acl bucket-owner-full-control 

Para configurar correctamente los permisos adecuados para los archivos recién agregados, agregue esta política de depósito:

[...]
{
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::123456789012::user/their-user"
    },
    "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl"
    ],
    "Resource": "arn:aws:s3:::my-bucket/*"
}

Y configure ACL para archivos recién creados en código. Ejemplo de Python:

import boto3

client = boto3.client('s3')
local_file_path="/home/me/data.csv"
bucket_name="my-bucket"
bucket_file_path="exports/data.csv"
client.upload_file(
    local_file_path,
    bucket_name, 
    bucket_file_path, 
    ExtraArgs={'ACL':'bucket-owner-full-control'}
)

fuente: https://medium.com/artificial-industry/how-to-download-files-that-others-put-in-your-aws-s3-bucket-2269e20ed041 (descargo de responsabilidad: escrito por mí)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *