我对AWS还是很陌生,我尝试了解一些基本概念。在我的Android应用中,我使用:
我的用例非常简单:我希望在API Gateway中创建的一些API对我的身份验证用户和用户可用,而其他API仅对我的身份验证用户可用
对于仅适用于经过身份验证的用户的API,我正在考虑将用户归为一组用户(感谢CognitoIdentityServiceProvider.adminAddUserToGroup()
),该用户组可以具有与IAM策略相连的通用角色,以允许他们访问这些API。我认为这是有道理的,因为我将拥有不同类型的用户,因此我将为每种类型使用一个组。
但是对于我的身份验证用户和来宾用户可用的API,我注意到我应该做什么。这些API应该是公开的,以便包括我的来宾用户在内的任何人都可以调用它们吗?或者可以使它们仅对我的身份验证用户和我的来宾用户可用,而不是公开的?有哪些好的做法,我该如何实现?
感谢您的帮助。
答案 0 :(得分:1)
为此,您应该使用"API Gateway Lambda Authorizers"。您可以按方法配置授权者。因此,只有为经过身份验证的用户保留的端点才应该有一组。
它们如何工作?
每次请求命中配置了授权方的端点时,API网关都会使用request
信息触发该请求。然后,授权者检查request
是否具有正确的凭据。如果是这样,则返回一个IAM策略。方法执行调用(例如另一个Lambda函数)将使用此策略。否则,授权者将返回错误状态代码,例如403 Access Denied
。
在这种情况下,由于您正在使用Cognito,因此可以使用Cognito User Pool Authorizer。您可以使用Cognito的SDK或AWS cli
创建它。配置它之后,您唯一要做的就是在用户进行身份验证之后附加Cognito提供的id
或access
令牌。通常在Authorization
标头中提供。
希望对您有帮助。
答案 1 :(得分:0)
这是我使用控制台的方法:
AWS_IAM
{
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": "<the_arn_of_your_resource_api>"
}