AWS S3 и Lambda. NET - Копирование файлов между папками изменяет доступность - PullRequest
0 голосов
/ 22 апреля 2020

У меня очень странная проблема с AWS S3 и лямбда-функцией в. NET Core. Я копирую (или лучше клонирую) через. NET «папку» в том же ведре. Эти папки доступны как CDN через указанный c домен.

Мне удалось выполнить рекурсивное копирование «папки» A в папку «B».

По какой-то странной причине некоторые из скопированных файлы не доступны через URL. Например: / A / images / picture.png и / B / images / picture.png

Я проверил метаданные и ACL для файла на A и В и это выглядит так же. Но все же я получаю AccessDenied, когда пытаюсь найти файл B.

Это фрагмент моего кода, может быть, кто-то может мне помочь. Я отключил Шифрование и дал скопированному OwnerFullAccess .

CopyObjectResponse response = await awsCDNS3Client.CopyObjectAsync(new CopyObjectRequest
{
    MetadataDirective = S3MetadataDirective.COPY,
    CannedACL = S3CannedACL.BucketOwnerFullControl,
    ServerSideEncryptionMethod = ServerSideEncryptionMethod.None,
    SourceBucket = sourceBucket,
    SourceKey = sourceKey,
    DestinationBucket = destinationBucket,
    DestinationKey = destinationKey
});
var uploadRequest = new TransferUtilityUploadRequest
{
    CannedACL = S3CannedACL.BucketOwnerFullControl,
    BucketName = bucketName,
    Key = bucketObjectKey,
    StorageClass = S3StorageClass.Standard,
    AutoCloseStream = true,
    PartSize = Bucket.MiminumPartSize,
    ServerSideEncryptionMethod = ServerSideEncryptionMethod.None
};

И в результате копирования получаю AccessDenied (объект на самом деле существует).

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>AAAAAA</RequestId>
<HostId>
NNNNNN</HostId>
</Error>

1 Ответ

0 голосов
/ 23 апреля 2020

Я нашел ответ на свой вопрос.

Объект X в папке A и папке B показывал другого владельца при вызове get-object-acl через CLI.

What I ' После того, как все сделано, установлен параметр ЗАМЕНИТЬ метаданные S3MetadataDirective в CopyRequest. Таким образом, у меня появился настоящий (?!) Предыдущий владелец.

Но проблема там не закончилась. В этот момент я получил доступ к файлу через браузер. К сожалению, браузер загружал его вместо того, чтобы показывать на странице (CSS и JS).

Что опять-таки мне нужно, это установить для Header.ContentType правильный MIME. Такое свойство недоступно при встроенном объявлении, поэтому вам нужно создать экземпляр и установить его позже.

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

Спасибо

...