【问题标题】:Set policy and role in AWS to connect API Gateway and DynamoDB在 AWS 中设置策略和角色以连接 API Gateway 和 DynamoDB
【发布时间】:2018-09-02 22:06:03
【问题描述】:

我正在尝试将数据从 AWS API Gateway 流式传输到 AWS 中的 DynamoDB(直接,没有类似 lambda 的东西)。我已经寻找了几个教程,例如 [1] 和 [2],它们准确地描述了这种情况。所有这些都假设正确的政策和角色已经到位。通常情况下,我会玩和破解,直到我得到一个工作的概念证明,然后我重建一个合适的模型,但是我想确保我理解我在做什么。对于 [2],我还在 [3] 处发现了一个堆栈溢出问题,该问题来自与解决相同问题的人,但不确定如何解决。我还查看了 [4],用 Lambda 描述 API 网关。

这是我的猜测:

  • 创建允许从 API 网关调用的策略。
    “AmazonAPIGatewayInvokeFullAccess”符合名称,但可能不符合 是必要的 + 过多的访问权限过大
  • 创建允许访问 dynamoDB 的策略。
    在这里,“AmazonDynamoDBFullAccess”可能是合适的,甚至 虽然它可能是矫枉过正(太多的访问),并且可能只工作 从管理控制台
  • 创建一个附加了这两个策略的角色。
    在这里,我遇到了当我单击创建角色时的问题,并且 选择 AWS 服务,我找不到正确的“将使用的服务” 这个角色”,它背后有我上面描述的策略。对于 例如,当单击 dynamoDB 时,我得到以下“用例”,它们似乎都与 dynamoDB 完全访问策略无关:
    • Amazon DynamoDB 加速器 (DAX) - DynamoDB 访问
    • DynamoDB - 全局表
    • DynamoDB 加速器 (DAX) - 集群管理

我的主要问题是:如何设置正确的最小角色和策略集以将 AWS API Gateway 连接到 DynamoDB(读取和写入),如 [1] 中所述?

[1]https://sanderknape.com/2017/10/creating-a-serverless-api-using-aws-api-gateway-and-dynamodb/
[2]https://aws.amazon.com/blogs/compute/using-amazon-api-gateway-as-a-proxy-for-dynamodb/
[3]API Gateway does not have permission to assume the provided role DynamoDB
[4]https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html

【问题讨论】:

    标签: amazon-dynamodb aws-api-gateway


    【解决方案1】:

    您需要做的是创建一个允许 API Gateway 代入该角色的 IAM 服务角色。您可以通过 UI 轻松完成此操作。创建新角色时,默认选择“服务角色”,在“选择将使用此角色的服务”标题下方,您可以选择 API Gateway。

    角色是可以由某个实体(在我们的例子中为 API Gateway API 资源)承担的权限容器。您的角色需要“权限”才能使用该角色。您可以通过向您的角色添加策略来添加此权限。此处对此进行了更深入的解释:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html

    请务必阅读 AWS 服务角色部分。您说您需要“创建允许从 API 网关调用的策略”,但这是不正确的:您需要创建一个 role 可以由 API 网关假定 .

    在您的情况下,您需要为您的角色提供特定的 DynamoDB 权限。按照您提到的最小权限原则,您应该只为特定的 DynamoDB 表添加特定的操作。可以在此处找到可能的权限列表:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/api-permissions-reference.html

    假设您只希望 API Gateway 从特定表中获取项目。您的政策可能看起来像这样:

    {
        "Effect": "Allow",
        "Action": "dynamodb:GetItem",
        "Resource": "arn:aws:dynamodb:eu-west-1:[aws_account_id]:table/[table_name]"
    }
    

    希望这会有所帮助!

    【讨论】:

    • 这主要解决了我的答案。我仍然有一个问题,即我的保单在创建过程中不会显示在正确的类别中。首先创建一个空角色,然后在创建解决它后为角色分配策略,因为这暴露了不同的 UI。谢谢!
    【解决方案2】:

    最近由 ankana likhita sri priya 编写的新教程包括详细介绍 IAM(策略、角色等)的屏幕截图:https://medium.com/@likhita507/using-api-gateway-to-get-data-from-dynamo-db-using-without-using-aws-lambda-e51434a4f5a0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-12
      • 2020-09-17
      • 2020-08-21
      • 2018-11-19
      • 2021-08-24
      • 1970-01-01
      • 2018-04-07
      • 2018-08-08
      相关资源
      最近更新 更多