Я пытаюсь настроить службу, которая получает файл (изображение, видео) и загружает его в мое хранилище s3. Мы хотим перейти от общедоступного сегмента к тому, который доступен только определенным пользователям, который теоретически имеет мой аккаунт:
Список контроля доступа к ведру
Я обновил свой код для использования моих новых учетных данных и корзины s3 (я использовал этот код для загрузки в другую систему корзины на основе s3). Но теперь, когда я указал на это новое ведро, я получаю только ответы «Отказано в доступе». Внутренние исключения также «Отказано в доступе», пока я не нажму ноль.
Я пробовал несколько вещей, включая добавление этой политики в корзину:
{
"Id": "Policy1553720963443",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1553720961364",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::<BUCKETNAME>/*",
"Principal": {
"AWS": [
"arn:aws:iam::<iamid>:user/<me>@<company>"
]
}
}
]
}
Конфигурация CORS:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
И даже добавление себя в группу с такой политикой:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<BUCKETNAME>/*",
"arn:aws:s3:::<BUCKETNAME>"
]
}
]
}
Ни один из них не имел никакого влияния на "Ошибка отказа в доступе"
Может кто-нибудь помочь мне здесь? Можно ли получить дополнительную информацию об ошибке «Отказано в доступе»? Я пытался использовать fiddler для получения подробного ответа от aws, но использование fiddler, похоже, вызывает ошибку тайм-аута шлюза, поэтому это не помогает.
Любой совет будет принят с благодарностью. Спасибо!
~ Josh
Edit, вот код, который я пытаюсь загрузить:
private static readonly string serviceURL = ConfigurationManager.AppSettings["ServiceURL"];
private static readonly string BucketName = ConfigurationManager.AppSettings["BucketName"];
private static readonly long UploadPartSize = Convert.ToInt64(ConfigurationManager.AppSettings["UploadPartSize"]);
private static AmazonS3Config config = new AmazonS3Config { ServiceURL = serviceURL, ForcePathStyle = true, RegionEndpoint = RegionEndpoint.USWest2 };
private readonly AmazonS3Client _s3Client = new AmazonS3Client(config);
private async Task<string> UploadFileAsync(string contentType, Stream stream, long length, UploadVideoParams @params, CancellationToken token)
{
using (var fileTransferUtility = new TransferUtility(_s3Client))
{
var now = DateTime.UtcNow;
var key = MakeS3Key(@params);
try
{
await fileTransferUtility.UploadAsync(new TransferUtilityUploadRequest
{
BucketName = BucketName,
AutoCloseStream = true,
AutoResetStreamPosition = false,
InputStream = new WrapperStream(stream, length),
PartSize = UploadPartSize,
StorageClass = S3StorageClass.Standard,
Key = key,
CannedACL = S3CannedACL.PublicRead,
ContentType = contentType
}, token).ConfigureAwait(false);
LogInfo(@params.TransactionId, "Made Upload Async call. Key: " + key);
return key;
}
catch (Exception e)
{
await fileTransferUtility.AbortMultipartUploadsAsync(BucketName, now, token).ConfigureAwait(false);
HandleError(@params.TransactionId, e);
throw e;
}
}
}