AWS IAM:AssumeRole与GetSessionToken

问题描述 投票:1回答:1

我正在尝试生成临时凭证访问密钥和密钥。我用过assumeRole。描述说它生成访问密钥和密钥。但GetSessionTokenResult也可以生成访问密钥和密钥。然后是什么使用assumeRole?

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();

之前使用assumeRole它显示错误=> aws:iam :: user / admin不是sts:assumeRole on resource role aws:iam :: role / role_id通过在role_id的信任关系中添加aws:iam :: user / admin它起作用。

如果我将注释掉AccessRole及其他被调用的类。我可以生成访问密钥和密钥。什么是使用assumeRole的目的?

amazon-web-services amazon-iam aws-iam
1个回答
4
投票

根据您的要求,有several methods to obtain temporary credentials

  • GetSessionToken根据您自己的IAM用户为您提供一组临时凭证。这通常用于激活多重身份验证(MFA),或者为要限制访问的情况创建一些范围限制凭据(例如,允许访问将数据上载/下载到S3的应用程序,而不提供任何非-S3访问)。新凭据最多具有与您相同的权限(并且永远不会更多)。
  • AssumeRole用于获取具有完全不同权限集的凭据。例如,您可能没有访问S3的权限,但您可能有权承担“S3访问”角色。返回的凭据允许您临时访问S3。另一个示例是提供对管理员权限的访问 - 而不是始终使用具有管理员权限的帐户,临时承担管理员角色,执行管理活动,然后返回使用普通凭据更安全。与使用管理员级访问权限相比,可能出现的问题更少。

此外,AssumeRole可用于获取跨帐户访问权限。例如,帐户A中的用户可以在帐户B中担任角色,该帐户B授予对帐户B中资源的访问权限。这不可能通过GetSessionToken实现。

我总是觉得这篇文章对解释这些差异很有用:Understanding the API Options for Securely Delegating Access to Your AWS Account | AWS Security Blog

© www.soinside.com 2019 - 2024. All rights reserved.