首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基于APIGateway和Lambda的AWS IAM细粒度访问控制

基于APIGateway和Lambda的AWS IAM细粒度访问控制
EN

Stack Overflow用户
提问于 2017-10-10 14:48:29
回答 2查看 629关注 0票数 0

我是AWS的新手,并且已经继承了一个现有的项目。

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

前端角色

可信实体:cognito-entities ty.amazonaws.com

代码语言:javascript
代码运行次数:0
运行
复制
{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "lambda:InvokeFunction"
        ],
        "Resource": [
            "*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "execute-api:Invoke"
        ],
        "Resource": [
            "*"
        ]
    }
]
}

后端角色

受信任实体:身份提供者apigateway.amazonaws.com、身份提供者lambda.amazonaws.com

代码语言:javascript
代码运行次数:0
运行
复制
{
"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"
        ]
    }
]
}

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

我读到过有关IAM细粒度访问控制的文章,但它不会起作用,因为用户通过APIGateway与数据库通信,它可以访问所有数据。

我可以放弃APIGateway和Lambda,让用户直接与DynamoDB对话(这似乎是一个坏主意,因为Lambda会对数据做一些工作,而且这种方法会让我的应用程序与亚马逊网络服务联系得太紧密)。

或者我可以创建具有不同权限的附加API,这似乎不是正确的方法。

有人有什么建议吗?或者知道更好的方法?

EN

回答 2

Stack Overflow用户

发布于 2017-12-12 07:25:35

API网关支持向下到方法级别的访问控制。很难动态控制对DDB中特定项的访问,但如果您谈论的是特定的静态项,则可以将表/项硬编码到API GW或Lambda层中,并使用API Gateway权限控制对该API方法的访问。

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

代码语言:javascript
代码运行次数:0
运行
复制
{
  "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

票数 0
EN

Stack Overflow用户

发布于 2022-01-04 12:45:20

我也面临着同样的问题。

前端执行API gateWay端点。然后API端点触发lambda函数与数据库进行交互。因此,实际上,如果我们想要在IAM策略级别上进行限制,我们应该对具有元素的功能执行角色的策略进行限制。但问题是,我找不到任何方法来访问策略级别的函数的传入参数,以便在条件下使用它们。

因此,最好的方法似乎是在函数代码中添加一个条件(业务逻辑层)。

这些文档可能会帮助你..

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46660263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档