AWS API Gateway:API仅适用于经过身份验证的用户和来宾用户

时间:2019-07-31 11:09:36

标签: amazon-web-services amazon-cognito amazon-iam api-gateway

我对AWS还是很陌生,我尝试了解一些基本概念。在我的Android应用中,我使用:

  • 通过“认知用户池”和“身份池”,我的用户可以注册和登录,还可以作为 guest 用户使用该应用
  • API网关和AWS Lambda创建应用程序可以调用的Web服务

我的用例非常简单:我希望在API Gateway中创建的一些API对我的身份验证用户用户可用,而其他API仅对我的身份验证用户可用

对于仅适用于经过身份验证的用户的API,我正在考虑将用户归为一组用户(感谢CognitoIdentityServiceProvider.adminAddUserToGroup()),该用户组可以具有与IAM策略相连的通用角色,以允许他们访问这些API。我认为这是有道理的,因为我将拥有不同类型的用户,因此我将为每种类型使用一个组。

但是对于我的身份验证用户和来宾用户可用的API,我注意到我应该做什么。这些API应该是公开的,以便包括我的来宾用户在内的任何人都可以调用它们吗?或者可以使它们仅对我的身份验证用户和我的来宾用户可用,而不是公开的?有哪些好的做法,我该如何实现?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

为此,您应该使用"API Gateway Lambda Authorizers"。您可以按方法配置授权者。因此,只有为经过身份验证的用户保留的端点才应该有一组。

它们如何工作?

每次请求命中配置了授权方的端点时,API网关都会使用request信息触发该请求。然后,授权者检查request是否具有正确的凭据。如果是这样,则返回一个IAM策略。方法执行调用(例如另一个Lambda函数)将使用此策略。否则,授权者将返回错误状态代码,例如403 Access Denied

在这种情况下,由于您正在使用Cognito,因此可以使用Cognito User Pool Authorizer。您可以使用Cognito的SDK或AWS cli创建它。配置它之后,您唯一要做的就是在用户进行身份验证之后附加Cognito提供的idaccess令牌。通常在Authorization标头中提供。

希望对您有帮助。

答案 1 :(得分:0)

这是我使用控制台的方法:

  1. 在API网关中,单击资源,然后单击方法(GET,POST ...)
  2. 点击方法请求
  3. 对于授权,选择AWS_IAM
  4. 在Cognito中,选择“ 管理身份池”
  5. 创建(或编辑)与Cognito用户池一起使用的身份池
  6. 未经身份验证的身份块中,选中启用对未经身份验证的身份的访问权限
  7. 在同一页面上(至少如果您编辑身份池),还应该看到经过身份验证的角色未经身份验证的角色
  8. 转到IAM,然后在 Roles 中找到这两个角色
  9. 对于每个角色,单击它,然后在 Permissions 选项卡中,单击附加到该角色的策略以对其进行查看(带有小箭头的左侧)
  10. 单击编辑策略,然后单击“ JSON”选项卡,然后添加以下代码块(您可以通过转到API网关找到ARN,单击您的API,单击您的资源,再单击您的方法:您可以在方法请求块中找到ARN):
{
    "Effect": "Allow",
    "Action": [
        "execute-api:Invoke"
    ],
    "Resource": "<the_arn_of_your_resource_api>"
}
  1. 点击审核政策,然后保存更改