У меня есть мобильное приложение, внутренний сервер REST API на AWS для операции входа пользователя в систему и очередь SQS, в которую мобильное приложение будет периодически синхронизировать c данные об использовании.
- Во-первых, мобильное приложение будет иметь логин пользователя для получения токена доступа к приложению вместе с AWS временными токенами (
AccessKeyId
, SecreAccessKey
и SessionToken
) - Затем мобильное приложение использует временные токены 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 других людей.