¿Cómo puedo agregar la ACL de control total del propietario del bucket a mis objetos en Amazon S3?

Última actualización: 10/12/2021

Estoy intentando agregar la lista de control de acceso (ACL) de control total del propietario del bucket a los objetos existentes en Amazon Simple Storage Service (Amazon S3). ¿Cómo puedo hacerlo?

Descripción corta

De forma predeterminada, en un escenario entre cuentas en el que otras cuentas de AWS cargan objetos en su bucket de Amazon S3, los objetos siguen siendo propiedad de la cuenta de carga. Cuando se agrega la ACL de control total del propietario del bucket, el propietario del bucket tiene control total sobre cualquier objeto nuevo que escriban otras cuentas.

Si el escritor de objetos no especifica permisos para la cuenta de destino en un nivel de ACL de objeto, la cuenta de destino solo puede eliminar objetos.

Cuando se agrega la ACL de control total del propietario del bucket, el propietario del bucket tiene control total sobre cualquier objeto nuevo que escriban otras cuentas de AWS. Esta ACL también es necesaria si el bucket de destino ha habilitado la propiedad de objetos de S3. Cuando la propiedad de objetos de S3 está habilitada, actualiza el propietario de los nuevos objetos en la cuenta de destino.

Importante: La concesión de acceso entre cuentas a través de ACL de bucket y objeto no funciona para los buckets que tienen la propiedad de objetos S3 establecida en Bucket Owner Enforced. En la mayoría de los casos, las ACL no están obligadas a otorgar permisos a objetos y buckets. En su lugar, utilice las políticas de AWS Identity Access and Management (IAM) y las políticas de bucket de S3 para conceder permisos a objetos y buckets.

Para los objetos existentes, el propietario del objeto puede actualizar la ACL del objeto para otorgar al propietario del bucket el control total de este. Al escribir nuevos objetos, la ACL de control total del propietario del bucket se puede especificar durante una operación PUT o COPY.

Para que un usuario de la cuenta A otorgue una ACL enlatada de control total del propietario del bucket a los objetos de la cuenta B, se deben conceder los siguientes permisos:

  • Su rol o usuario de IAM en la cuenta A debe conceder acceso al bucket en la cuenta B
  • La política de bucket en la cuenta B debe conceder acceso al rol o usuario de IAM en la cuenta A

Puede conceder acceso de control total al propietario del bucket a los objetos de las siguientes maneras:

  • ACL enlatadas
  • Operaciones por lotes de S3 (para operaciones por lotes a gran escala)

Nota: Asegúrese de revisar la política de punto de enlace de la VPC cuando agregue la ACL enlatada de control total del propietario del bucket a sus objetos de S3.

Resolución

Su rol o usuario de IAM en la cuenta A debe conceder acceso al bucket en la cuenta B

Nota: Si el usuario o el rol de IAM deben actualizar la ACL del objeto durante la carga, entonces el usuario debe tener permisos para s3:putObjectAcl en su política de IAM.

Cree un rol de IAM en la cuenta A. Conceda permisos al rol o al usuario para realizar PutObjectAcl en objetos de la cuenta B.

La siguiente política de ejemplo otorga acceso al rol de IAM en la cuenta A para realizar las acciones GetObject, PutObject y PutObjectAcl en los objetos de la cuenta B:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::AccountB-Bucket/*"
        }
    ]
}

La política de bucket en la cuenta B debe conceder acceso al usuario o rol de IAM en la cuenta A

Las políticas de bucket pueden variar en función del requisito de ACL enlatado durante las cargas de objetos. Por ejemplo, estas dos políticas de bucket otorgan acceso al usuario o rol de IAM en la cuenta A de diferentes maneras:

  • Política 1: permite el acceso al usuario o rol de IAM en la cuenta A sin requerir que las operaciones PUT de Amazon S3 incluyan una ACL enlatada de control total del propietario del bucket.
  • Política 2: aplica todas las operaciones PUT de Amazon S3 para incluir la ACL enlatada de control total del propietario del bucket.

Política 1: permite el acceso al usuario o rol de IAM en la cuenta A sin requerir que las operaciones PUT de Amazon S3 incluyan una ACL enlatada de control total del propietario del bucket

Para permitir el acceso al rol de IAM en la cuenta A sin requerir una ACL, cree una política de bucket en la cuenta B (donde se cargan los objetos). Esta política de bucket debe conceder acceso al rol o usuario de IAM en la cuenta A. La siguiente política de bucket permite que el rol de la cuenta A realice acciones GetObject, PutObject y PutObjectAcl en los objetos de la cuenta B:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AccountA:role/AccountARole"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::AccountB-Bucket/*"
            ]
        }
    ]
}

Política 2: aplica todas las operaciones PUT de Amazon S3 para incluir la ACL enlatada de control total del propietario del bucket

La siguiente política de bucket especifica que un usuario o rol en la cuenta A puede cargar objetos en un bucket en la cuenta B (donde se cargarán los objetos). Las cargas solo se pueden realizar cuando la ACL del objeto está configurada en "control total del propietario del bucket". Por ejemplo:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Only allow writes to my bucket with bucket owner full control",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::AccountA:role/AccountARole"
                ]
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::AccountB-Bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

Nota: Cuando se aplica la política de bucket anterior, el usuario debe incluir la ACL enlatada de control total del propietario del bucket durante la operación PutObject. De lo contrario, la operación falla y se produce un error de acceso denegado. Para obtener información sobre cómo Amazon S3 permite la propiedad de objetos de otras cuentas de AWS, consulte Controlar la propiedad de los objetos cargados mediante la propiedad de objetos de S3.

Proporcionar acceso de control total al propietario del bucket

ACL enlatadas

Para otorgar una ACL enlatada de control total del propietario del bucket durante la carga de un objeto, ejecute el comando put-object desde la cuenta A (cuenta del propietario del objeto):

aws s3api put-object --bucket accountB-bucket --key example.txt --acl bucket-owner-full-control

Para otorgar una ACL enlatada de control total del propietario del bucket durante una operación de copia, ejecute el comando copiar objeto desde la cuenta A (cuenta del propietario del objeto):

aws s3api copy-object --copy-source accountA-bucket/example.txt --key example.txt --bucket accountB-bucket --acl bucket-owner-full-control

O bien, también puede ejecutar el comando cp desde la cuenta A para otorgar la ACL enlatada de control total del propietario del bucket:

aws s3 cp s3://accountA-bucket/test.txt s3://accountB-bucket/test2.txt --acl bucket-owner-full-control

Para una operación de copia de varios objetos, el propietario del objeto (cuenta A) puede ejecutar el siguiente comando:

aws s3 cp s3://accountA-bucket/ s3://accountB-bucket/ --acl bucket-owner-full-control --recursive

Si el objeto existe en un bucket en otra cuenta (cuenta B), el propietario del objeto puede conceder acceso al propietario del bucket con este comando:

aws s3api put-object-acl --bucket accountB-bucket --key example.txt --acl bucket-owner-full-control

Operaciones por lote de S3

Para agregar la ACL enlatada de control total del propietario del bucket en una gran cantidad de objetos de Amazon S3, utilice Operaciones por lotes de S3. Las operaciones por lotes de S3 puede realizar una sola operación en una lista de objetos que especifique. Incluso puede utilizar operaciones por lotes de S3 para establecer las ACL en una gran cantidad de objetos. Las operaciones por lotes de S3 admiten ACL personalizadas y predefinidas que Amazon S3 proporciona con un conjunto predefinido de permisos de acceso.

Nota: La operación Reemplazar lista de control de acceso (ACL) reemplaza las ACL de Amazon S3 para cada objeto que aparezca en el manifiesto.

Consideraciones adicionales

Acceso permitido por una política de punto de enlace de la VPC

Si un rol de IAM carga objetos en S3 mediante una instancia que se enruta a través de un punto de enlace de la VPC, verifique la política de puntos de enlace de la VPC. Por ejemplo, si un objeto se carga en S3 mediante una instancia de Amazon Elastic Compute Cloud (Amazon EC2) en una VPC, se debe revisar esa política de punto de enlace de la VPC. Asegúrese de que su política de punto de conexión otorga acceso a la acción PutObjectAcl, de esta manera:

{
    "Statement": [
        {
            "Sid": "Access-to-specific-bucket-only",
            "Principal": "*",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::AccountB-Bucket/*"
        }
    ]
}

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?