Как включить ведение журнала доступа к серверу s3 с помощью boto3 sdk? - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь использовать boto3 SDK, чтобы включить ведение журнала доступа к серверу через python. Тем не менее, я получаю сообщение об ошибке:

Вы должны предоставить группе доставки журналов разрешения WRITE и READ_ACP для целевого сегмента

Я знаю, что мне нужно добавить разрешения для этой группы, но я не знаю, как это сделать с помощью Python SDK.

Я пытался выполнить Включение ведения журнала программно - Amazon Simple Storage Service , но мне не удалось преобразовать его в Python.

Я дополнительно попытался поместить Грантополучателя и Разрешения в вызов put_bucket_logging, но безрезультатно.

Ниже приведена моя функция, чтобы попытаться сделать это, что привело к вышеупомянутой ошибке:

def enableAccessLogging(clientS3, bucketName, storageBucket, 
                        targetPrefix):

    #Give the group log-delievery WRITE and READ_ACP permisions to the
    #target bucket
    acl = get_bucket_acl(clientS3, storageBucket)

    new_grant = {
        'Grantee': {
            'ID' : 'LogDelivery',
            'Type' : 'Group'
        },
        'Permission': 'FULL_CONTROL',
    }

    modified_acl = copy.deepcopy(acl)
    modified_acl['Grants'].append(new_grant)

    setBucketAcl(clientS3, bucketName, modified_acl)

    response = clientS3.put_bucket_logging(
        Bucket=bucketName,
        BucketLoggingStatus={
            'LoggingEnabled': {
                'TargetBucket': storageBucket,
                'TargetPrefix': targetPrefix
            }
        }

    )

1 Ответ

0 голосов
/ 18 июня 2019

Я понял это, я правильно сделал новый acl, но когда я применил его, я применил его к исходной корзине, а не targetBucket, поэтому для всех, кто это делает, правильный код приведен ниже:

def enableAccessLogging(clientS3, bucketName, storageBucket, 
                        targetPrefix):

    #Give the group log-delievery WRITE and READ_ACP permisions to the
    #target bucket
    acl = get_bucket_acl(clientS3, storageBucket)

    new_grant = {
        'Grantee': {
            'URI': "http://acs.amazonaws.com/groups/s3/LogDelivery",
            'Type' : 'Group'
        },
        'Permission': 'FULL_CONTROL',
    }

    modified_acl = copy.deepcopy(acl)
    modified_acl['Grants'].append(new_grant)

    setBucketAcl(clientS3, storageBucket, modified_acl)

    response = clientS3.put_bucket_logging(
        Bucket=bucketName,
        BucketLoggingStatus={
            'LoggingEnabled': {
                'TargetBucket': storageBucket,
                'TargetPrefix': targetPrefix
            }
        }

    )
...