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

Я пытаюсь создать 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.

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


person Sumit Jindal    schedule 01.04.2019    source источник
comment
Привет! Важный вопрос: хотите ли вы запустить этот код на платформе AWS. Если вы это сделаете, вам следует использовать роль исполнения. Вы запускаете код на AWS позже? Если это так, я помогу вам запустить его. Привет Доминик   -  person DominikHelps    schedule 17.08.2019
comment
К сожалению, я не смог получить ответ / решение этой проблемы, поэтому я изменил свой подход и вместо этого поместил все, что связано с созданием ресурсов AWS, в скрипт Terraform, и просто получил доступ к SQS из кода Java с помощью модуля Spring-Cloud-Messaging.   -  person Sumit Jindal    schedule 20.08.2019
comment
@SumitJindal, что настроено у вашего провайдера AWS? Роль IAM ARN или ключи доступа?   -  person abdullahkhawer    schedule 21.08.2019
comment
@slashdottir, работает ли измененная роль IAM?   -  person mewa    schedule 22.08.2019
comment
Я сейчас активно не работаю над этим, и, как я уже упоминал, я создал ресурсы, используя скрипт terraform, и получил к ним доступ, используя свой Java-код.   -  person Sumit Jindal    schedule 23.08.2019


Ответы (1)


Вам необходимо указать подстановочные знаки для региона AWS и номера учетной записи.

new Resource("arn:aws:sqs:*:*:test-queue")

Вы можете протестировать эквивалентную политику IAM с помощью имитатора IAM.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sqs:CreateQueue",
            "Resource": "arn:aws:sqs:*:*:test-queue"
        }
    ]
}
person mewa    schedule 21.08.2019