AWS CLI列出所有S3存储桶加密状态的命令

3

我的账户有几百个存储桶,我需要展示所有存储桶的加密状态。我想通过CLI完成这个任务,我看到有一个“get-bucket-encryption”命令操作,但我不知道如何运行它以针对所有存储桶而不仅仅是特定存储桶。


怎么样了?还不清楚如何列出状态吗? - Marcin
4个回答

9
你可以在遍历list-buckets的结果时,对其进行循环运行。
例如:
for bucket_name in $(aws s3api list-buckets --query "Buckets[].Name" --output text); do

    echo ${bucket_name}
    
    encryption_info=$(aws s3api get-bucket-encryption \
        --bucket ${bucket_name} 2>/dev/null)
        
    if [[ $? != 0 ]]; then
        echo " - no-encryption"
    else
        echo " - ${encryption_info}"
    fi
done

如果存储桶未加密,则get-bucket-encryption会返回错误,因此我假设任何错误都意味着没有加密。

谢谢,正是我需要的!在第二个 AWS CLI 命令中添加“--output text”使得对我来说更容易阅读,因为我的默认格式是 JSON。 - at0mzk

1

在这个稍早之前的问题上,我想要补充一个python3的答案。

和上面提到的Nodejs一样,它也假定您拥有正确的设置凭据以及安装了boto3 SDK。

import boto3, botocore.exceptions

def main():
    client = boto3.client('s3')
    bucket_list = client.list_buckets()
    encrypted_buckets = []
    unencrypted_buckets = []

    for item in bucket_list['Buckets']:
        try:
            encryption_info = client.get_bucket_encryption(
                Bucket=item['Name']
            )
            encrypted_buckets.append([item['Name'],(encryption_info['ServerSideEncryptionConfiguration'])])
        except botocore.exceptions.ClientError as error:
            if error.response['Error']['Code'] == 'ServerSideEncryptionConfigurationNotFoundError':
                unencrypted_buckets.append(item['Name'])
    
    print("Encrypted Buckets - Encryption Type")
    for item in encrypted_buckets:
        print(item)
    print("\nUnencrypted Buckets")  
    for item in unencrypted_buckets:
        print(item)
        
if __name__ == "__main__":
    main()

这将在命令行输出加密的存储桶列表,然后是未加密的存储桶。

1
一个一行代码的选项。它要么打印服务器端加密算法(即AES256),要么在SSE未启用时打印错误消息。
aws s3api list-buckets --query "Buckets[].Name" | jq -r ".[]" | xargs -I {} bash -c "echo {}; aws s3api get-bucket-encryption --bucket {} | jq -r '.ServerSideEncryptionConfiguration.Rules[0].ApplyServerSideEncryptionByDefault.SSEAlgorithm'"

1
我知道这个问题是关于CLI的,但是下面是Node.js的答案。
假设您已经设置好了所有凭据并安装了aws-sdk,则应运行以下内容。
const AWS = require('aws-sdk');
const s3 = new AWS.S3();

s3.listBuckets(function(err, data) {
    if (err) console.log(err, err.stack);
    let bucketData = data.Buckets;
    let bucketLength = data.Buckets.length;

    for (let i = 0; i < bucketLength; i++) {
        var params = {
            Bucket: `${bucketData[i].Name}` /* required */
        };
        s3.getBucketEncryption(params, function(err, data) {
            try {       // first it will print all non encypted buckets and then vice versa
                if(err){
                    console.log(bucketData[i].Name)   // Non Encrypted Bucket List
                }
                if (data) {
                    console.log(bucketData[i].Name);  // Encrpted Bucket List 
                }
            } catch (err) {}
        });
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接