Почему срок действия моего предварительно назначенного URL-адреса для корзины Amazon S3 истекает раньше указанного мной срока? - PullRequest
0 голосов
/ 22 января 2019

У меня есть фрагмент кода, который отправляет письмо с предварительно подписанным URL-адресом S3, который я генерирую в Java с использованием AWS SDK (1.11.482), например:

ZonedDateTime expiration = ZonedDateTime.now();
expiration = expiration.plusDays(7);
GeneratePresignedUrlRequest generatePresignedUrlRequest =  new GeneratePresignedUrlRequest(<Bucket>, <Key>).withMethod(HttpMethod.GET)
    .withExpiration(Date.from(expiration.toInstant()));

AmazonS3 amazonS3Client = AmazonS3ClientBuilder.standard().withRegion(<Region>)
        .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(<AccessKey>, <SecretKey>))).build()

String s3Url = amazonS3Client.generatePresignedUrl(generatePresignedUrlRequest).toString();

Однако вместо истечения срока действиячерез 7 дней он истекает примерно через 24 часа.Как ни странно, если я посмотрю на фактический URL:

https://<AWS S3 Url>
?X-Amz-Security-Token=<Token>
&X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Date=20190117T072701Z
&X-Amz-SignedHeaders=host
&X-Amz-Expires=604799
&X-Amz-Credential=<Credential>aws4_request
&X-Amz-Signature=<Signature>

Тогда отметка времени истечения - это то, что я и ожидал.Но даже при доступе к нему через 24 часа я получаю:

<Error>
<Code>ExpiredToken</Code>
<Message>The provided token has expired.</Message>
<Token-0>
FQoGZXIvYXdzEPD//////////wEaDNkjQqZnq1LsP/9OCCKIAtq5Au7PKYSxzcqpwPlTF9DH3oyOrjo2Zft91L1pkCKX5VXHCFPClo0b0V5jo+GaNjHBLNYWN7lrUJm+20hOPURxvP/7ytZ5w5L3kk0DiisDdqPlup4xBUXGAOXqnQrjd7CqV6R0cr+8AD+tEh8QXZFxz//VCYKviFRA3vO/fIimuRq9Os4CACXLuuEU3GDKpDkhoHSN70tgmxMr2xBD6Wlo2UFClSUOt5pNzbSAjgD896fWSqf3C5DbZVAuasK/z2IOAI0OG6N/auOnsBBkLJ23nLvHrjzgnJZaKO/JSaG4PF0jyOphED8fvQ1V5P8xm2gDKT/shv1U1IQLYJjRVzZySdpStZMJfCiwxYDiBQ==
</Token-0>
<RequestId>23CFB9FB0973C599</RequestId>
<HostId>
G4tEmvGfauxHfkcyuGgTDJ+JxAJ4DEO6WPcDwBWkDBMLnw0R1cdTepUFHbIGmSF/FeV/oYnSq7c=
</HostId>
</Error>

Примечание: доступ и секретный ключ связаны с пользователем IAM без установленного срока действия.

1 Ответ

0 голосов
/ 22 января 2019

Чтобы создать назначенный URL-адрес, действительный до 7 дней, сначала назначьте учетные данные пользователя IAM (ключ доступа и секретный ключ доступа) для используемого вами SDK (кажется, это Java AWS SDK в вашемдело).Затем создайте предварительно назначенный URL-адрес, используя AWS Signature Version 4 .

. Вот пример с Boto на python:

import boto3
from botocore.client import Config

# Get the service client with sigv4 configured
s3 = boto3.client('s3', config=Config(signature_version='s3v4'))

Кроме того, я знаю, что вы упоминали об этом, новам нужно убедиться, что вы используете учетные данные непосредственно от пользователя IAM, а не от роли IAM, поскольку их токен вращается каждые 24-36 часов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...