Amazon API网关授权AWS_IAM

16

AWS_IAM在Amazon API Gateway中作为授权模型是什么意思?

输入图像说明

如果我在AWS控制台内测试Lambda函数,它能正常运行并打印出“Hello World”,但是如果我使用终端节点URL,它会在另一个浏览器选项卡内显示{"message":"Missing Authentication Token"},我该如何获取认证令牌?

3个回答

18

创建新的IAM用户

前往AWS IAM并创建一个拥有编程访问权限的新用户,用于访问您的API网关。然后将足够权限(AmazonAPIGatewayInvokeFullAccess)的策略附加到用户/组以能够访问您的API Gateway端点。完成所有步骤后,您将获得新用户的密钥/秘密。

使用Postman使用AWS签名进行API请求

现在,为了简化操作,请安装Postman,然后在请求页面中使用Authorization选项卡,选择AWS Signature

Postman-AWS-Signature

填写您的新用户的AccessKey/SecretKey、您运营的AWS Region (例如,us-west-1),然后单击Update Request按钮。 此时,Postman将填写所需头文件,您可以向API Gateway进行授权请求。


谢谢,我希望这个解决方案能够与 OpenID Connect 集成。我需要寻找另一个解决方案 :) - BAD_SEED
为此,您应该查看自定义授权者Lambda函数。然后,您的函数可以对任何第三方进行身份验证,然后在API网关中缓存结果以达到所需的时间。 - Jacek M
那么我不能使用增强(简化)工作流来完成这个任务吗?http://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flow.html - BAD_SEED
如何在靜態網頁上實現相同的功能,而不是使用 Postman? - Vikas NS
静态网站无法使用AWS机密。 您希望使用来自某些身份提供者(例如Auth0)的JWT令牌,用户通过登录/密码交换获得。 JWT令牌从用户的浏览器发送到您的网关,然后将由API网关的自定义授权程序进行验证。 这样的授权程序将是一个简单的Lambda函数,用于为您验证令牌并允许用户请求进入您的网关。 - Jacek M
这对我不起作用。我收到了错误信息:我们计算的请求签名与您提供的签名不匹配。请检查您的AWS Secret Access Key和签名方法。有关详细信息,请参阅服务文档。 - Vedsar Kushwaha

9

以下是我在论坛上的回答:

AWS_IAM认证意味着您必须使用AWS签名版本和AWS凭证对请求进行签名。有关Signature Version 4的更多详细信息,请单击此处

您可能需要查看像Postman这样的工具来生成测试所需的签名。


谢谢。这样我总是需要访问密钥和秘钥,没有办法包含OpenID Connect进行身份验证。我是对的吗?自定义授权者是否能胜任这项工作? - BAD_SEED
没错。您可以使用自定义授权程序来支持其他身份验证方法。 - Bob Kinney
@BobKinney:我该如何使用AWS_IAM身份验证获取上下文授权数据?它给了我空值。我正在API网关中使用lambda函数,但是使用AWS_IAM角色时我没有得到任何值。您能否就此给出反馈? - prakash tank
@Bob Kinney 如何在静态网页上实现相同的功能,而不是使用Postman? - Vikas NS

0
为了获取跨账户权限的身份验证令牌,我假设您有一个要承担的角色,或者您可以查看此教程以了解其工作原理和如何获取一个。
在上述教程中,您可以看到一个步骤“承担角色”,其中包含以下命令:
aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session
此命令的响应将类似于:
{
"AssumedRoleUser": {
    "AssumedRoleId": "asdfa:AWSCLI-Session", 
    "Arn": "something"
}, 
"Credentials": {
    "SecretAccessKey": "key", 
    "SessionToken": "token", 
    "AccessKeyId": "key"
}

}

如@jaccus所示,您可以使用以下值,并通过postman发送请求

  • SecretAccessKey
  • SessionToken
  • AccessKeyId

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接