繁体   English   中英

boto3 aws 检查 s3 bucket 是否加密

[英]boto3 aws check if s3 bucket is encrypted

我在下面发布了以下代码,它获取了 aws 上的所有 s3 存储桶列表,我正在尝试编写代码来检查存储桶是否在 python 中加密,但我无法弄清楚如何做到这一点。 谁能告诉我如何修改我的代码来做到这一点。 我尝试了在线示例并查看了文档。

我的代码是:

 from __future__ import print_function
 import boto3
 import os

 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']

首先值得了解一些关于 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'}}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM