【问题标题】:AWS STS Tem credentials with dynamic policy具有动态策略的 AWS STS Tem 凭证
【发布时间】:2018-08-30 15:09:52
【问题描述】:

我正在尝试在 lambda 函数中运行一些代码,该函数将发出一个签名 URL,该 URL 使用一组具有自定义策略的临时凭据进行签名。

基本思想是签名允许用户连接到 AWS IOT,但只能使用特定的客户端 ID,并且对订阅主题和接收的消息有限制。

如果我使用本机分配给 Lambda 函数的凭证执行签名(即,在 Lambda 函数假定它们之前,代码有效)。但是,在 Lambda 函数内部运行它会生成一个假定角色并生成一组临时凭证,但生成的签名不会与 AWS IOT 端点建立连接。

基本代码是:

    AWSSecurityTokenService tokenService = 
    AWSSecurityTokenServiceClientBuilder.standard()
            .withCredentials(new EnvironmentVariableCredentialsProvider())
            .build();

    AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest();
    assumeRoleRequest.setRoleSessionName(UidGenerator.generateId(16));
    assumeRoleRequest.setRoleArn("arn:aws:iam::xxxxxxxxxxx:role/websocket_signer");
    assumeRoleRequest.setDurationSeconds(60 * 60);
    assumeRoleRequest.setPolicy(policy);

    AssumeRoleResult assumeRoleResult = tokenService.assumeRole(assumeRoleRequest);

    // Create signed url
    WebSocketUrlSigner signer = new WebSocketUrlSigner(
            this.request.getStage(),
            assumeRoleResult.getCredentials().getAccessKeyId(),
            assumeRoleResult.getCredentials().getSecretAccessKey());

我尝试担任的角色 websocket_signer 本身没有分配给它的策略,但与 arn:aws:sts::xxxxxxxxx:assumed-role/lambda_role/lambda_function_name 有信任关系。

分配给 Lambda 函数的角色(在其假定之前)具有以下信任关系:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "lambda.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

为了消除策略的任何潜在问题,我将以下策略动态传递给假定的角色(应该与现有的角色策略合并,这没什么):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect",
                "iot:Subscribe",
                "iot:Receive"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

我最终应该得到一个签名的 URL,它可以使用任何客户端 ID 连接到任何主题并接收任何消息。函数中没有异常,AWS 正确返回所有内容,所以我一定是错误配置了一些东西。

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-iot aws-sts


    【解决方案1】:

    角色的权限和传递的策略相交,没有合并: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html

    如果起始角色没有任何权限,那么假设的角色也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多