Как выполнить итерацию по нескольким сегментам s3, чтобы узнать, установлены ли все значения в конфигурации publicaccessblock в значение TRUE

#python #amazon-s3

Вопрос:

Поэтому я пытаюсь написать скрипт на python, который проверяет, установлены ли все значения в блоке public_access_block в корзинах s3 в значение TRUE, и если одно из них не соответствует, то распечатайте, какое это ведро.

 s3 = boto3.client('s3')
buckets = s3.get_public_access_block(Bucket = 'my-test-bucket)  #this is for one bucket
print(buckets)
 

Мой вопрос заключается в следующем: как написать логику If, которая повторяется через несколько сегментов для проверки

Ответ №1:

Убедитесь, что это сработает в вашем случае,

Примечание: Если конфигурация блока общего доступа не найдена, то функция вызывает исключение, и это движение мы также получили из функции генератора. Настройте его в соответствии с вашими требованиями.

 import boto3
import botocore

s3_resource = boto3.resource('s3')
s3_client = boto3.client('s3')


def buckets_with_public_access_block_restrictions() -> Generator:
    """
    Checks for PublicAccessBlockConfiguration values and yield Bucket if any values is False,
    otherwise it will keep continue to check public_access_block.

    It may raise an exception when PublicAccessBlockConfiguration not configured.
    At that movement it will yield bucket as well.

    :return: Bucket
    :rtype: Generator
    """
    for bkt in s3_resource.buckets.all():
        try:
            # Checks bucket which have PublicAccessBlockConfiguration configured
            # else it will raise error `NoSuchPublicAccessBlockConfiguration`
            bucket_conf = s3_client.get_public_access_block(Bucket=bkt.name)
            if not all(bucket_conf.get('PublicAccessBlockConfiguration').values()):
                yield bkt
        except botocore.exceptions.ClientError:
            # Executes when the public access block configuration was not found
            yield bkt  # TODO: It depends on the requirement


def enlist_buckets() -> None:
    for bucket in buckets_with_public_access_block_restrictions():
        print(bucket.name)  # TODO: Perform some operation


enlist_buckets()
 

Комментарии:

1. Я работал над этим, и это сработало великолепно! Спасибо!