java - 如何使用 AWS STS 为 s3 中的文件的特定资源创建只读和只写令牌
问题描述
我必须为 S3 中的文件生成只读和只写令牌。
到目前为止我已经尝试过:
- 创建一个对引用中的存储桶具有读写访问权限的 IAM 角色
- 创建 STS 客户端
- 承担由 STS 客户端在步骤 #1 中创建的 IAM 角色
- 使用 sts 客户端生成凭据
这是做什么的
- 允许用户使用令牌访问 S3 中的文件
- 但这种访问不限于只读或只写
- 此外,如果 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());
期待
- 能够生成只读和只写令牌
- 能够生成特定于路径的令牌
- 令牌仅限于引用的资源,而不是 IAM 角色中附加的所有存储桶
解决方案
我找到了解决方案。
- 创建一个 STS 客户端并担任具有所有必需存储桶权限的给定角色
- 在获取令牌之前创建一个内联策略并附加到 STS 客户端
- 使用 STS 客户端进行 getSessionToken 调用
做什么是:
- 授予对受线路策略中给出的路径限制的特定资源的访问权限
- 它还限制了内联策略中提到的读取或写入访问权限
推荐阅读
- networking - 从网络 url 迭代大型 tsv.gs
- java - Java 表达式顺序、运算符优先级和关联性之间的差异
- typescript - Typescript:如何创建一个函数来比较这两个嵌套数组?
- javascript - 反应引导导航
- c++ - C++ 尝试使用
在 CodeBlocks 中遍历目录 - java - ListView 显示正确,但仅在 onclick 时获取最后一项。ListView 上的搜索功能无法正常工作
- python - 找出每个点在哪个多边形中
- python - 本地 Jupyter 笔记本中的 SageMaker:无法使用 AWS 托管的 XGBoost 容器(“KeyError:'S3DistributionType'”和“运行失败:['docker-compose'”)
- javascript - 使用指针锁定控件 THREE.js 上下移动
- azure-devops - 如何在只知道令牌值的情况下撤销 azure DevOps 令牌?