Quiero crear un depósito y objetos sin acceso público, es decir, debería ser privado usando el código python de boto3, ¿cómo puedo lograrlo?
s3_client = boto3.client('s3', aws_access_key_id=accessKey, aws_secret_access_key=secretKey, region_name=region) s3_bucket= s3_client.create_bucket(Bucket=bucket_name) print('bucket created') print(s3_bucket) bucket_name = 'bucket123' response_public = s3_client.put_public_access_block( Bucket=bucket_name, PublicAccessBlockConfiguration={ 'BlockPublicAcls': True, 'IgnorePublicAcls': True, 'BlockPublicPolicy': True, 'RestrictPublicBuckets': True }, ) print("pubic",response_public)Cubo creado pero obteniendo
error: en acceso público como objeto 'S3' no tiene atributo 'put_public_access_block'
Editar
Como se pensó originalmente, la versión boto3 era una versión heredada (1.9.42), esta función no está disponible en esa versión, como puede ver en esta documentación .
Original
Lo ejecuté así y todo se aplicó con éxito, sugeriría mirar la sangría y verificar la versión de Boto3 que está ejecutando.
s3_client = boto3.client('s3', region_name='eu-west-1') bucket_name= 'ohfihfhfeuhehfuhfeih' s3_bucket= s3_client.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={'LocationConstraint': 'eu-west-1'}) response_public = s3_client.put_public_access_block( Bucket=bucket_name, PublicAccessBlockConfiguration={ 'BlockPublicAcls': True, 'IgnorePublicAcls': True, 'BlockPublicPolicy': True, 'RestrictPublicBuckets': True }, )En resumen , su código está bien (agregué la configuración de la región porque ciertas regiones lo requieren), hay otro factor. Corrija la sangría, verifique su versión de boto3 (y actualice si es anterior, la versión actual es 1.14.7).
La razón probablemente se deba al hecho de que está creando un depósito llamado
bucket_name= 's3buck123' pero luego usa un nombre diferente para configurar put_public_access_block
bucket_name = 'bucket123'También la sangría es incorrecta, pero supongo que esto se debe a copiar y pegar en SO.