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

AWS API Gateway: API available for authenticated and guest users only

我是 AWS 的新手,我想了解一些基本概念。在我的 Android 应用程序中,我使用:

我的用例非常简单:我希望我在 API 网关中创建的一些 API 可供我的经过身份验证的用户使用 我的来宾用户,以及其他 API 仅供我的经过身份验证的用户使用。

对于仅对我的经过身份验证的用户可用的 API,我正在考虑将用户放入一组用户中(感谢 CognitoIdentityServiceProvider.adminAddUserToGroup()),这些用户可以与 IAM 具有共同的角色附加到它的策略,以允许他们访问那些 APIs。我认为这是有道理的,因为我会有不同类型的用户,所以我将为每种类型使用一个组。

但是对于我的认证用户和来宾用户可用的 APIs,我很确定我应该做什么。如果 API 是 public,那么它们可以被包括我的来宾用户在内的任何人调用,或者是否可以让它们只对我的认证用户和我的来宾用户可用,而不是 public?有哪些好的做法,我该如何实现?

感谢您的帮助。

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

它们是如何工作的?

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

在您的情况下,由于您使用的是 Cognito,因此可以使用 Cognito User Pool Authorizer。您可以使用 Cognito 的 SDK 或 AWS cli 创建它。配置完成后,您唯一需要做的就是在用户身份验证后附加 Cognito 提供的 idaccess 令牌。它通常在 Authorization header.

内供应

希望对您有所帮助。

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

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