Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

677
Visualizações
¿Cómo puedo asignar el control total del propietario del depósito al crear un objeto S3 con boto3?

Estoy usando la biblioteca de Amazon boto3 en Python para cargar un archivo en otro grupo de usuarios. La política de depósito aplicada al depósito de otros usuarios está configurada así

 { "Version": "2012-10-17", "Statement": [ { "Sid": "DelegateS3BucketList", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::uuu" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::bbb" }, { "Sid": "DelegateS3ObjectUpload", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::uuu" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::bbb", "arn:aws:s3:::bbb/*" ] } ] }

donde uuu es mi ID de usuario y bbb es el nombre del depósito que pertenece al otro usuario. Mi usuario y el otro usuario son cuentas de IAM que pertenecen a organizaciones diferentes . (Sé que esta política se puede escribir de manera más simple, pero la intención es agregar una verificación en la carga para bloquear objetos sin que se creen los permisos apropiados).

Luego puedo usar el siguiente código para enumerar todos los objetos en el depósito y también para cargar nuevos objetos en el depósito. Esto funciona, sin embargo, el propietario del depósito no tiene acceso al objeto debido a que Amazon hace que los objetos sean privados para el creador del objeto.

 import base64 import hashlib from boto3.session import Session access_key = "value generated by Amazon" secret_key = "value generated by Amazon" bucketname = "bbb" content_bytes = b"hello world!" content_md5 = base64.b64encode(hashlib.md5(content_bytes).digest()).decode("utf-8") filename = "foo.txt" sess = Session(aws_access_key_id=access_key, aws_secret_access_key=secret_key) bucket = sess.resource("s3").Bucket(bucketname) for o in bucket.objects.all(): print(o) s3 = sess.client("s3") s3.put_object( Bucket=bucketname, Key=filename, Body=content_bytes, ContentMD5=content_md5, # ACL="bucket-owner-full-control" # Uncomment this line to generate error )

Tan pronto como elimino el comentario de la opción ACL, el código genera un mensaje de error de acceso denegado. Si redirijo esto para que apunte a un depósito dentro de mi propia organización, la opción ACL tiene éxito y el propietario del depósito obtiene permiso completo para el objeto.

Ahora no puedo resolver esto, especialmente porque el propio consejo de Amazon parece ser hacerlo de la manera que he mostrado.

https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-owner-access/

https://aws.amazon.com/premiumsupport/knowledge-center/s3-require-object-ownership/

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

No es suficiente tener permiso solo en las políticas de depósito.

Compruebe si a su usuario (o función) le falta el permiso s3:PutObjectAcl en IAM .

over 4 years ago · Santiago Trujillo Relatório

0

Cuando se usan los métodos de resource en boto3, se pueden realizar varias llamadas API diferentes y no siempre es obvio qué llamadas se están realizando.

En comparación, cuando se utilizan métodos de client en boto3, existe una asignación de 1 a 1 entre la llamada a la API que se realiza en boto3 y la llamada a la API que recibe AWS.

Por lo tanto, es probable que el método resource.put_object() esté llamando a una API adicional, como PutObjectAcl . Puede confirmar esto mirando en AWS CloudTrail y viendo qué llamadas a la API se están realizando desde su aplicación.

En tal caso, necesitaría el permiso adicional s3:PutObjectAcl . Esto sería necesario si el proceso de carga primero crea el objeto y luego actualiza la Lista de control de acceso del objeto.

Al usar los métodos del client para cargar un archivo, también existe la posibilidad de especificar una ACL, que creo que se aplica directamente en lugar de requerir una segunda llamada a la API. Por lo tanto, usar el método de client para crear el objeto probablemente no requiera este permiso adicional.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda