У меня есть сценарий, в котором я хочу получить доступ к ресурсам одной учетной записи из другой учетной записи в AWS (кросс-учетный доступ). И я хочу реализовать этот доступ в коде (NodeJs), реализованном в виде лямбда-функции, а также в виде долговременного кода на EC2.
Читая, как это сделать онлайн, я знаю, что мне нужны временные учетные данные, сгенерированные aws.STS
, вот так:
const AWS = require('aws-sdk');
const sts = new AWS.STS();
const stsResults = await sts.assumeRole({
RoleArn: 'arn:aws:iam::111111111111:role/role_name',
RoleSessionName: 'STRING_VALUE',
}).promise();
const dynamodb = new AWS.DynamoDB({
region: 'us-east-1',
accessKeyId: stsResults.Credentials.AccessKeyId,
secretAccessKey:stsResults.Credentials.SecretAccessKey,
sessionToken: stsResults.Credentials.SessionToken
});
Это самый минимум того, что необходимо для этого.
Мой вопрос касается атрибута RoleSessionName
, который является обязательным атрибутом. Мне трудно понять, что он делает и как его использовать. Вот что документация AWS должна сказать об этом:
RoleSessionName - (String) Идентификатор предполагаемого сеанса роли.
Используйте имя сеанса роли, чтобы однозначно идентифицировать сеанс, когда одна и та же роль принимается разными принципалами или по разным причинам В сценарии с несколькими учетными записями ios имя сеанса роли отображается и может быть зарегистрировано учетной записью, которой принадлежит роль. Имя сеанса роли также используется в ARN предполагаемого участника роли. Это означает, что последующие запросы API между учетными записями, которые используют временные учетные данные безопасности, будут отображать имя сеанса роли для внешней учетной записи в их AWS журналах CloudTrail.
Регулярное выражение, используемое для проверки этого параметра, представляет собой строку символы, состоящие из прописных и строчных букв алфавита c символов без пробелов. Вы также можете добавить подчеркивание или любой из следующих символов: =,. @ -
Лично я не беспокоюсь о безопасности, поскольку обе учетные записи принадлежат одной и той же компании и являются единственной причиной несколько учетных записей является логически разделить ресурсы. Я хотел бы знать, как этот атрибут влияет на производительность вызова функции assumeRole
. Должен ли я использовать один и тот же RoleSessionName
для всех моих лямбда-функций? Приведет ли это к внутреннему использованию кэша? Должен ли я создавать случайный идентификатор каждый раз, когда создаю новый сеанс?