在 AWS 中担任角色时 RoleSessionName 的用例是什么以及它如何影响性能

What's the use case for RoleSessionName when assuming a role in AWS and how it affects the performance

我有一个场景,我想用代码从 AWS 中的另一个账户访问一个账户内的资源(跨账户访问)。我想使用 NodeJs 实现这种访问,作为 lambda 函数实现,也作为 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 属性的,该属性是必需的。我很难理解它的作用以及我应该如何使用它。这就是 the AWS documentation 不得不说的:

RoleSessionName — (String) An identifier for the assumed role session.

Use the role session name to uniquely identify a session when the same role is assumed by different principals or for different reasons. In cross-account scenarios, the role session name is visible to, and can be logged by the account that owns the role. The role session name is also used in the ARN of the assumed role principal. This means that subsequent cross-account API requests that use the temporary security credentials will expose the role session name to the external account in their AWS CloudTrail logs.

The regex used to validate this parameter is a string of characters consisting of upper- and lower-case alphanumeric characters with no spaces. You can also include underscores or any of the following characters: =,.@-

就个人而言,我并不担心安全问题,因为这两个帐户都属于同一家公司,拥有多个帐户的唯一原因是在逻辑上分离资源。我想知道的是这个属性对 assumeRole 函数调用性能的影响。我应该对所有 lambda 函数使用相同的 RoleSessionName 吗?我是否应该在每次创建新会话时创建一个随机 ID?

根据您引用的文档:

Use the role session name to uniquely identify a session when the same role is assumed by different principals or for different reasons.

假设您有一个 IAM 角色,它由一个程序承担。这将 return 一组可用于访问 AWS 服务的临时凭证。

在审计跟踪中,角色所做的任何事情都将被跟踪为由角色完成(而不是由承担角色的实体完成)。这使得很难追溯这些 API 调用的来源,因为该角色可能由 "different principals or for different reasons" 承担。例如,多个程序可能使用该角色。

为了协助追踪此类请求的 'origin',提供了 RoleSessionName 以识别特定假设。它可以帮助您确定哪个应用程序正在使用凭据。