首页 > 解决方案 > 如何使用 AWS STS 为 s3 中的文件的特定资源创建只读和只写令牌

问题描述

我必须为 S3 中的文件生成只读和只写令牌。

到目前为止我已经尝试过:

  1. 创建一个对引用中的存储桶具有读写访问权限的 IAM 角色
  2. 创建 STS 客户端
  3. 承担由 STS 客户端在步骤 #1 中创建的 IAM 角色
  4. 使用 sts 客户端生成凭据

这是做什么的

  1. 允许用户使用令牌访问 S3 中的文件
  2. 但这种访问不限于只读或只写
  3. 此外,如果 IAM 角色有权访问更多存储桶,则令牌将访问所有存储桶

创建 STS 客户端

AWSSecurityTokenServiceClient sts_client = (AWSSecurityTokenServiceClient) AWSSecurityTokenServiceClientBuilder.standard()
                .withRegion(Regions.DEFAULT_REGION).build();

创建代入角色请求

AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest()
                .withRoleArn("arn:aws:iam::123456789123:role/iam-role-name")
                .withDurationSeconds(7200)
                .withRoleSessionName("session-role-"+System.currentTimeMillis());

生成令牌请求

GetSessionTokenRequest session_token_request = new GetSessionTokenRequest();

生成令牌

GetSessionTokenResult session_token_result = sts_client.getSessionToken(session_token_request);

创建凭据

Credentials session_creds = session_token_result.getCredentials();

创建基本凭据

BasicSessionCredentials sessionCredentials = new BasicSessionCredentials(
            session_creds.getAccessKeyId(),
            session_creds.getSecretAccessKey(),
            session_creds.getSessionToken());

期待

  1. 能够生成只读和只写令牌
  2. 能够生成特定于路径的令牌
  3. 令牌仅限于引用的资源,而不是 IAM 角色中附加的所有存储桶

标签: javaamazon-web-servicessts-securitytokenserviceaws-sts

解决方案


我找到了解决方案。

  1. 创建一个 STS 客户端并担任具有所有必需存储桶权限的给定角色
  2. 在获取令牌之前创建一个内联策略并附加到 STS 客户端
  3. 使用 STS 客户端进行 getSessionToken 调用

做什么是:

  1. 授予对受线路策略中给出的路径限制的特定资源的访问权限
  2. 它还限制了内联策略中提到的读取或写入访问权限

推荐阅读