Как получить сессионный ARN отправителя SQS - PullRequest
0 голосов
/ 03 мая 2020

У меня есть мобильное приложение, внутренний сервер REST API на AWS для операции входа пользователя в систему и очередь SQS, в которую мобильное приложение будет периодически синхронизировать c данные об использовании.

  1. Во-первых, мобильное приложение будет иметь логин пользователя для получения токена доступа к приложению вместе с AWS временными токенами (AccessKeyId, SecreAccessKey и SessionToken)
  2. Затем мобильное приложение использует временные токены AWS для отправки данных в очередь SQS с помощью SQS Javascript SDK.

Токены генерируются моим серверным API во время входа в систему. , используя метод assumeRole из STS Java SDK.

Integer sessionDurationSeconds = 360;
String superAppMobileRoleArn = "..."; // IAM Role for mobile app
String sessionNamePrefix = "mobile_app"

AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest();
assumeRoleRequest.setDurationSeconds(sessionDurationSeconds);
assumeRoleRequest.setRoleArn(superAppMobileRoleArn);
assumeRoleRequest.setRoleSessionName(sessionNamePrefix + "_" + customerUuid);

AssumeRoleResult assumeRoleResult = stsClient.assumeRole(assumeRoleRequest);
Credentials credentials = assumeRoleResult.getCredentials()

String accessKeyId = credentials.getAccessKeyId();
String secretAccessKey = credentials.getSecretAccessKey();
String sessionToken = credentials.getSessionToken();

Обратите внимание, что я добавляю customerId после имени сеанса.

У меня есть обработчик SQS (использующий Spring Cloud Messaging) на бэкэнде, который прослушивает очередь и обрабатывает данные.
@Component
public class MyDataListener {
    @SqsListener("${myQueueName}")
    public void onMessageReceive(String dataString, @Headers MessageHeaders headers) {
        ...
    }
}

Проблема

Я знаю из AWS документ (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_disable-perms.html) о том, что при отправке запроса мобильным приложением с использованием этих временных токенов роль ARAM IAM будет иметь вид, подобный

arn:aws:sts::{AccountId}:assumed-role/{RoleName}/{SessionName}

Я хотел бы знать ARN сеанса внутри MyDataListener это возможно? Я хочу извлечь customerId из сеанса ARN, чтобы узнать, кто является владельцем данных. Я не могу полагаться на добавление customerId в теле сообщения, потому что тогда некоторые клиенты могут обмануть данные, указав customerId других людей.

...