Создание SQS с использованием AWS Java SDK для федеративного пользователя на основе ролей без учетных данных - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь создать SQS с помощью AWS Java SDK. У меня нет ключа доступа и идентификатора ключа, я захожу в консоль AWS по ссылке, предоставленной моей компанией. Это доступ на основе ролей SAML (федеративный вход в систему). Всякий раз, когда я пытаюсь создать SQS из кода Java, либо я получаю ошибку 403 (если я не пишу код для учетных данных), либо я сталкиваюсь с большим количеством ошибок, если я пытаюсь использовать код, указанный в блогах AWS для федеративных пользователей.

Я пробовал следующий код, но он не работает:

AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder
                    .standard()
                    .withCredentials(new DefaultAWSCredentialsProviderChain())
                    .withRegion(Regions.EU_WEST_1)
                    .build();

GetFederationTokenRequest getFederationTokenRequest = new GetFederationTokenRequest();
            getFederationTokenRequest.setDurationSeconds(7200);
            getFederationTokenRequest.setName("<username>@<company>.com");

// Define the policy and add it to the request.
            Policy policy = new Policy();
            policy.withStatements(new Statement(Statement.Effect.Allow)
                    .withActions(SQSActions.AllSQSActions)
                    .withResources(new Resource("arn:aws:sqs:::test-queue")));
            getFederationTokenRequest.setPolicy(policy.toJson());

// Get the temporary security credentials.
            GetFederationTokenResult federationTokenResult = stsClient.getFederationToken(getFederationTokenRequest);

Credentials sessionCredentials = federationTokenResult.getCredentials();

// Package the session credentials as a BasicSessionCredentials BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials(
                    sessionCredentials.getAccessKeyId(),
                    sessionCredentials.getSecretAccessKey(),
                    sessionCredentials.getSessionToken());

AmazonSQSAsync amazonSQS = AmazonSQSAsyncClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(basicSessionCredentials))
                    .withRegion(Regions.EU_WEST_1)
                    .build();

CreateQueueRequest request = new CreateQueueRequest("wifi-test-queue");

String result = amazonSQS.createQueue(request).getQueueUrl();

Приведенный выше код не работает, к сожалению. Я уверен, что у моей учетной записи есть разрешения на создание / доступ к SQS, потому что я могу добиться аналогичных результатов с помощью Terraform.

Может кто-нибудь помочь мне, как создать ресурс с таким аккаунтом?

...