我使用此 API 来获取联合 token ,这些 token 将允许用户访问某些 AWS 资源,例如 S3 存储桶以及该存储桶内的目录 ( AWSJavaSDK Get Federated Token )。
是否可以撤销其所应用政策的某些方面?假设该用户在初始策略创建时有权访问某个目录,那么我只想撤销部分访问权限。是否可以在不重新发行另一个 token 的情况下实现此功能?以下是政策示例。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::productionapp"]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::productionapp/*"]
}
]
}
还有其他方法可以实现我的目标吗?
最佳答案
只有通过更改创建该临时凭证的 IAM 用户的权限,才能更改分配给从联合 token API 获取的临时凭证的权限。该用户不能是 root 用户,因为他们的权限无法更改。
我可能会使用Step Functions实现它:
- 确定所需政策的数量。例如,有四个用户 A、B、C 和 D 将使用临时凭证。 1小时后,B和C将无法再访问某些资源。
- 因此,我们需要两个 IAM 用户,一个用于 A 组和 B 组,一个用于 B 组和 C 组
- 为为临时凭证标识的每组用户创建 IAM 用户
- 创建 Lambda 函数
GenerateTmpCredentials
。该函数将生成 使用相应的 IAM 用户凭证为每个用户组提供临时凭证 - 创建另一个 Lambda 函数
ChangePolicy
。该函数将创建新的 需要撤销部分访问权限并将其分配给的用户组的策略 对应用户组的IAM用户 - 现在将其连接到步骤函数工作流程(状态机)
请参阅上述工作流程的步骤函数状态机模板
{
"StartAt": "GenerateTmpCredentials",
"States": {
"GenerateTmpCredentials": {
"Type": "Task",
"Resource": "<put arn of the GenerateTmpCredentials lambda>",
"Next": "WaitOneHour"
},
"WaitOneHour": {
"Type": "Wait",
"Seconds": 3600,
"Next": "ChangePolicy"
},
"ChangePolicy": {
"Type": "Task",
"Resource": "<put arn of the ChangePolicy lambda>",
"End": true
}
}
}
上述工作流程将首先调用GenerateTmpCredentials函数,然后等待1小时,然后调用ChangePolicy策略函数。
您可以根据您的要求使用 API Gateway 或任何其他 Lambda 执行状态机。
关于java - 修改 Activity 的 AWS 联合用户策略/联合 token (AWSJavaSDK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54099586/