Каков вариант использования RoleSessionName при назначении роли в AWS и как это влияет на производительность - PullRequest
0 голосов
/ 22 марта 2020

У меня есть сценарий, в котором я хочу получить доступ к ресурсам одной учетной записи из другой учетной записи в 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 для всех моих лямбда-функций? Приведет ли это к внутреннему использованию кэша? Должен ли я создавать случайный идентификатор каждый раз, когда создаю новый сеанс?

1 Ответ

2 голосов
/ 23 марта 2020

Согласно документации, которую вы цитировали:

Используйте имя сеанса роли, чтобы однозначно идентифицировать сеанс, когда одна и та же роль назначается разными принципалами или по разным причинам.

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

В журнале аудита все, что выполнено ролью, будет отслеживаться как выполненное ролью (а не объектом). что взял на себя роль). Это затрудняет отслеживание источника этих вызовов API, поскольку роль могут быть приняты «разными принципалами или по разным причинам». Например, несколько программ могут использовать роль.

Чтобы помочь отследить «происхождение» таких запросов, RoleSessionName предоставляется для идентификации конкретного предположения. Он поможет вам определить, какое приложение использует учетные данные.

...