在AWS中设置策略和角色以连接API网关和DynamoDB

时间:2018-03-24 09:13:37

标签: amazon-dynamodb aws-api-gateway

我正在尝试将AWS API网关中的数据流传输到AWS中的DynamoDB(直接,没有像lambda这样的东西)。我已经找了几个教程,比如[1]和[2],他们正好描述了这个场景。所有这些都假设正确的政策和角色到位。通常情况下,我一直玩游戏,直到我得到一个工作的概念证明,之后我重建了一个合适的模型,但有了访问权限,我想确保我理解我在做什么。对于[2],我还在[3]处发现了一个堆栈溢出问题,其中有一个问题已解决,但不确定究竟是怎么回事。我还查看了[4],用Lambda描述了API网关。

这是我的猜测:

  • 创建允许从API网关进行调用的策略。
    " AmazonAPIGatewayInvokeFullAccess"符合名称,但可能不符合 是必要的+过度访问
  • 创建允许访问dynamoDB的策略。
    在这里," AmazonDynamoDBFullAccess"甚至可能是合适的 虽然它可能是过度杀伤(访问太多),并且可能只会起作用 来自管理控制台
  • 创建附加了这两个策略的角色。
    在这里,当我点击创建角色时,我遇到了麻烦 选择AWS服务,我找不到将使用的正确"服务 这个角色"我有上面描述的政策。对于 例如,当单击dynamoDB时,我得到以下"用例",其中没有一个似乎与dynamoDB完全访问策略有关:
    • Amazon DynamoDB加速器(DAX) - DynamoDB访问
    • DynamoDB - 全局表
    • DynamoDB加速器(DAX) - 群集管理

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

[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

2 个答案:

答案 0 :(得分:1)

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

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

请务必阅读AWS服务角色部分。您说您需要“创建允许从API网关进行调用的策略”,但这是不正确的:您需要创建一个角色,可以通过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]"
}

希望这有帮助!

答案 1 :(得分:0)

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