boto3 aws проверить, зашифрован ли сегмент s3 - PullRequest
1 голос
/ 17 апреля 2019

У меня есть следующий код, размещенный ниже, который получает весь список сегментов s3 в aws, и я пытаюсь написать код, который проверяет, зашифрованы ли сегменты в python, но у меня возникают проблемы с выяснением, как это сделать. Может кто-нибудь сказать мне, как изменить мой код, чтобы сделать это. Я попробовал онлайн примеры и посмотрел на документацию.

мой код: с будущее импорт print_function импорт boto3 импорт ОС

 os.environ['AWS_DEFAULT_REGION'] = "us-east-1"
 # Create an S3 client
 s3 = boto3.client('s3')
 # Call S3 to list current buckets

 response = s3.list_buckets()

 # Get a list of all bucket names from the response
 buckets = [bucket['Name'] for bucket in response['Buckets']]

 # Print out the bucket list
 print("Bucket List: %s" % buckets)

Пробовал следующие коды, но они не работают:

 s3 = boto3.resource('s3')
 bucket = s3.Bucket('my-bucket-name')
 for obj in bucket.objects.all():
     key = s3.Object(bucket.name, obj.key)
     print key.server_side_encryption

и

 #!/usr/bin/env python
 import boto3

 s3_client = boto3.client('s3')
 head = s3_client.head_object(
     Bucket="<S3 bucket name>",
     Key="<S3 object key>"
 )
 if 'ServerSideEncryption' in head:
     print head['ServerSideEncryption']

1 Ответ

3 голосов
/ 17 апреля 2019

Прежде всего стоит понять несколько вещей о S3 и шифровании.

  1. Когда вы включаете шифрование по умолчанию в корзине S3, вы фактически настраиваете правило конфигурации шифрования на стороне сервера в корзине, котороезаставит S3 зашифровать каждый объект, загруженный в корзину после того, как правило было настроено.
  2. Вне зависимости от # 1, вы можете применить политику сегмента S3 к корзине, запретив любые загрузки объектов, которые не зашифрованы.Это предотвратит добавление незашифрованных данных, но не приведет к автоматическому шифрованию чего-либо.
  3. Вы можете шифровать закачки для каждого объекта отдельно;Шифрование не обязательно должно быть широким.

Итак, один из способов узнать, какие сегменты попадают в категорию # 1 (автоматически зашифровывает все загруженное на них содержимое), можно сделать так:

import boto3
from botocore.exceptions import ClientError

s3 = boto3.client('s3')

response = s3.list_buckets()

for bucket in response['Buckets']:
  try:
    enc = s3.get_bucket_encryption(Bucket=bucket['Name'])
    rules = enc['ServerSideEncryptionConfiguration']['Rules']
    print('Bucket: %s, Encryption: %s' % (bucket['Name'], rules))
  except ClientError as e:
    if e.response['Error']['Code'] == 'ServerSideEncryptionConfigurationNotFoundError':
      print('Bucket: %s, no server-side encryption' % (bucket['Name']))
    else:
      print("Bucket: %s, unexpected error: %s" % (bucket['Name'], e))

Это приведет кв выводе, как это:

Bucket: mycats, no server-side encryption
Bucket: mydogs, no server-side encryption
Bucket: mytaxreturn, Encryption: [{'ApplyServerSideEncryptionByDefault': {'SSEAlgorithm': 'AES256'}}]
...