Я пытаюсь использовать поставщик учетных данных для доступа к корзине aws S3 с моего устройства IoT.Я реализовал все шаги в этом посте: https://aws.amazon.com/blogs/security/how-to-eliminate-the-need-for-hardcoded-aws-credentials-in-devices-by-using-the-aws-iot-credentials-provider/;однако, когда я использую учетные данные, предоставленные службой для доступа к S3, я получаю «AmazonS3Exception: предоставленный вами идентификатор ключа доступа AWS не существует в наших записях».(Java SDK) Моя роль имеет следующую политику доступа:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::*/*"
}
]
}
и это отношение ржавчины:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "credentials.iot.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Здесь я использовал конечную точку поставщика учетных данных:
aws iot describe-endpoint --endpoint-type iot:CredentialProvider
Сертификат устройства и ключи работают нормально для доступа к брокеру сообщений MQTT.
edit системное время и время сервера различаются в течение 1 часа, поэтому токен выглядит так, как если бы он истеккогда я получу его (поле «срок действия» в токене совпадает с текущим системным временем).Это не должно иметь никакого значения, не так ли?Есть ли способ напрямую использовать роль вместо псевдонима для проверки этого предположения?
Вот так я получаю доступ к s3 в java:
final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withCredentials(
new AWSStaticCredentialsProvider(
new BasicAWSCredentials(
securityToken.getCredentials().getAccessKeyId(),
securityToken.getCredentials().getSecretAccessKey()
)
)
).withRegion(Regions.US_EAST_1)
.build();
final ObjectMetadata object = s3.getObject(new GetObjectRequest(
"iot-raspberry-test", "updateKioskJob.json"
), new File("/downloads/downloaded.json"));
Это политика, прикрепленная ксертификат моей вещи:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "iot:AssumeRoleWithCertificate",
"Resource": "arn:aws:iot:us-east-1:myaccountid:rolealias/s3-access-role-alias"
}
}
Чего мне не хватать?Заранее спасибо!