首页 > 解决方案 > 修改有效的 AWS 联合用户策略/联合令牌 (AWSJavaSDK)

问题描述

我正在使用此 API 来获取联合令牌,这将允许用户访问某些 AWS 资源,例如 S3 存储桶和该存储桶内的目录(AWSJavaSDK 获取联合令牌)。

是否有可能撤销其应用政策的某些方面?假设该用户在初始策略创建时可以访问某个目录,那么我只想撤销部分访问权限。是否可以在不重新发行另一个令牌的情况下实现此功能?下面是一个示例策略。

{
  "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/*"]
    }
  ]
}

有没有其他方法可以实现我在这里的目标?

标签: javaamazon-web-servicesamazon-s3

解决方案


只有通过更改创建它的 IAM 用户的权限,才能更改分配给从联合令牌 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 执行状态机。


推荐阅读