首页 文章

通过APIGateway和Lambda实现AWS IAM细粒度访问控制

提问于
浏览
0

我是AWS的新手,并继承了现有项目 .

该项目使用Vue.js作为前端,数据存储在DynamoDB中 . 用户身份验证使用Cognito完成,并附加了IAM角色 . 通过APIGateway和Lambda从数据库中通过不同的角色检索数据 .

前端角色

可信实体:cognito-identity.amazonaws.com

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "lambda:InvokeFunction"
        ],
        "Resource": [
            "*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "execute-api:Invoke"
        ],
        "Resource": [
            "*"
        ]
    }
]
}

后端角色

可信实体:身份提供者apigateway.amazonaws.com,身份提供者lambda.amazonaws.com

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "Stmt1493183261000",
        "Effect": "Allow",
        "Action": [
            "dynamodb:BatchGetItem",
            "dynamodb:BatchWriteItem",
            "dynamodb:DeleteItem",
            "dynamodb:DescribeStream",
            "dynamodb:DescribeTable",
            "dynamodb:GetItem",
            "dynamodb:GetRecords",
            "dynamodb:GetShardIterator",
            "dynamodb:ListStreams",
            "dynamodb:ListTables",
            "dynamodb:PutItem",
            "dynamodb:Query",
            "dynamodb:Scan",
            "dynamodb:UpdateItem",
            "dynamodb:UpdateTable"
        ],
        "Resource": [
            "arn:aws:dynamodb:us-east-1:*:table/foo",
            "arn:aws:dynamodb:us-east-1:*:table/bar",
            "arn:aws:dynamodb:us-east-1:*:table/bar/index/dayKey-captureTime-index"
        ]
    }
]
}

但是,我需要为用户实施授权,以便我可以将Group分配给某些用户,这样他们就可以访问特定的项目,并限制对dynamoDB中其他项的访问权限

我读到了有关IAM细粒度访问控制的信息,但由于用户通过APIGateway与数据库通信,因此无法使用,因为APIGateway可以访问所有数据 .

我可以放弃APIGateway和Lambda,让用户直接与DynamoDB对话(这似乎是一个坏主意,因为Lambda对数据做了一些工作,这种方法会使我的应用程序与AWS紧密相连) .

或者我可以使用不同的权限创建其他API,这似乎不是正确的方法 .

有没有人有任何建议?或者知道更好的方法?

1 回答

  • 0

    API网关支持访问控制,直至方法级别 . 动态控制对DDB中特定项的访问很困难,但如果您正在讨论特定的静态项,那么您可以将表/项硬编码到API GW或Lambda层,并使用API控制对该API方法的访问网关权限 .

    使用API网关访问控制可能会迫使您稍微调整/重新设计API .

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Permission",
          "Action": [
            "execute-api:Invoke"           
          ],
          "Resource": [
            "arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/resource-path"
          ]
        }
      ]
    }
    

    http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html

相关问题