Meh*_*ran 4 amazon-web-services amazon-iam aws-sts
我有一个场景,我想从 AWS 中的其他账户访问一个账户的资源(跨账户访问)。我想在作为 lambda 函数和 EC2 上长时间运行的代码实现的代码 (NodeJs) 中实现这种访问。
阅读如何在线执行此操作,我知道我需要由 生成的临时凭据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
});
Run Code Online (Sandbox Code Playgroud)
这是执行此操作所需的最低限度。
我的问题是关于RoleSessionName作为必需属性的属性。我很难理解它的作用以及我应该如何使用它。这就是AWS 文档对它的描述:
RoleSessionName —(字符串)代入角色会话的标识符。
当同一角色由不同主体或出于不同原因承担时,使用角色会话名称来唯一标识会话。在跨账户场景中,角色会话名称对拥有该角色的账户可见,并且可以被拥有该角色的账户记录。角色会话名称也用于代入角色主体的 ARN。这意味着使用临时安全凭证的后续跨账户 API 请求将在其 AWS CloudTrail 日志中向外部账户公开角色会话名称。
用于验证此参数的正则表达式是一串字符,由大写和小写字母数字字符组成,没有空格。您还可以包含下划线或以下任何字符:=,.@-
就我个人而言,我并不担心安全性,因为两个帐户都归同一家公司所有,拥有多个帐户的唯一原因是在逻辑上分离资源。我想知道的是这个属性对assumeRole函数调用性能的影响。我应该RoleSessionName对所有 lambda 函数使用相同的函数吗?这会导致在内部使用缓存吗?每次创建新会话时是否应该创建一个随机 ID?
根据您引用的文档:
当同一角色由不同主体或出于不同原因承担时,使用角色会话名称来唯一标识会话。
假设您有一个 IAM 角色并且它由程序承担。这将返回一组可用于访问 AWS 服务的临时凭证。
在审计跟踪中,角色所做的任何事情都将被跟踪为角色所做的事情(而不是承担角色的实体)。这使得很难追溯这些 API 调用的来源,因为角色可能由“不同的主体或出于不同的原因”承担。例如,多个程序可能使用该角色。
为帮助追踪此类请求的“来源”,RoleSessionName提供了 用于识别特定假设。它可以帮助您确定哪个应用程序正在使用凭据。
| 归档时间: |
|
| 查看次数: |
3402 次 |
| 最近记录: |