我正在尝试生成临时凭证访问密钥和私有密钥。我用过AssumeRole
.该描述说它生成访问密钥和私有密钥。但GetSessionTokenResult
也可以生成访问密钥和私有密钥。那么假设角色有什么用呢?
AWSSecurityTokenService awsSecurityTokenService =
AWSSecurityTokenServiceClientBuilder
.standard().withCredentials(new ProfileCredentialsProvider())
.withRegion(region).build();
AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest()
.withRoleArn(
"arn:aws:iam::account-id:role/p-27c229ade194_ec2")
.withRoleSessionName("RedshiftSession");
AssumeRoleResult assumeRoleResult = awsSecurityTokenService
.assumeRole(assumeRoleRequest);
GetSessionTokenRequest getSessionTokenRequest = new GetSessionTokenRequest();
getSessionTokenRequest.setDurationSeconds(1200);
GetSessionTokenResult getSessionTokenResult = awsSecurityTokenService
.getSessionToken(getSessionTokenRequest);
Credentials sessionCredentials = getSessionTokenResult.getCredentials();
final String adminAccessKeyId = sessionCredentials.getAccessKeyId();
final String adminAccessSecretKey = sessionCredentials
.getSecretAccessKey();
早些时候使用假设角色,它显示错误 =>aws:iam::user/admin is not sts:assumeRole on resource role aws:iam::role/role_id
。 通过在role_id
的信任关系中添加aws:iam::user/admin
,它起作用了。
如果我注释掉AccessRole
及其另一个称为类。我可以生成访问密钥和私有密钥。使用AssumeRole
的目的是什么?
有几种方法可以获取临时凭证,具体取决于您的要求:
- GetSessionToken 根据您自己的 IAM 用户为您提供一组临时凭证。这通常用于激活多重身份验证 (MFA),或为您想要限制访问的情况创建一些范围缩小的凭证(例如,授予对将数据上传/下载到 S3 的应用程序的访问权限,而不授予任何非 S3 访问权限)。新凭据最多具有与您相同的权限(并且永远不会再具有)。
- AssumeRole 用于获取具有一组完全不同的权限的凭据。例如,您可能无权访问 S3,但您可能有权代入"S3 访问"角色。然后,返回的凭证允许您临时访问 S3。另一个示例是提供对管理员权限的访问权限 — 与其始终使用具有管理员权限的帐户,不如临时代入管理员角色,执行管理员活动,然后恢复使用普通凭据更安全。与始终使用管理员级别访问权限相比,出错的可能性更小。
此外,AssumeRole 可用于获取跨账户访问权限。例如,账户 A 中的用户可以代入账户 B 中的角色,该角色授予对账户 B 中资源的访问权限。这无法通过 GetSessionToken 实现。
我总是发现这篇文章有助于解释差异: 了解用于安全委派对 AWS 账户的访问权限的 API 选项 |AWS 安全博客