[AWS] Solve Error: User is not authorized to access this resource

When use AWS API gateway with lambda authorizer, you may get 403 Forbidden error code with the error message User is not authorized to access this resource.

The IAM policy is like below:

{
  "principalId": "<yourprincipalid>", // The principal user identification associated with the token sent by the client.

  "policyDocument": {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow",
        "Resource": "arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]"
      }
    ]
  },
}
</yourprincipalid>

One of the solution is to make the Resource to be * directly, but this might not be very safe, because we don’t want to allow every resource.

The better solution is to allow everything after the {apiId}, like below:

{
  "principalId": "<yourprincipalid>", // The principal user identification associated with the token sent by the client.

  "policyDocument": {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow",
        "Resource": "arn:aws:execute-api:{regionId}:{accountId}:{apiId}/*/*"
      }
    ]
  },
}
</yourprincipalid>

So you can just add a few line codes in your custom lambda authorizer function like below:

Construct a wildcard "Resource" variable
tmp = event["methodArn"].split(':')
apiGatewayArnTmp = tmp[5].split('/')
resource = tmp[0] + ":" + tmp[1] + ":" + tmp[2] + ":" + tmp[3] + ":" + tmp[4] + ":" + apiGatewayArnTmp[0] + '/*/*'

References:

Original: https://www.cnblogs.com/grandyang/p/16392058.html
Author: Grandyang
Title: [AWS] Solve Error: User is not authorized to access this resource

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/545359/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java XML标记语言

    可扩展标记语言( Extensive Markup Language),标签中的元素名是可以自己随意写,可拓展是相对于html来说 标记语言:由一对尖括号括起来 用来当做配置文件 …

    技术杂谈 2023年6月21日
    0100
  • MySQL — 数据控制语言

    DCL 全称 Data Control Language。数据控制语言,用来创建数据库用户、控制数据库的访问权限。 1、用户管理 select * from user; 只能在指定…

    技术杂谈 2023年7月11日
    094
  • 技术管理进阶——什么是公司文化

    原创不易,求分享、求一键三连 Hi,各位亲爱的小伙伴,小钗公号遵循日复盘->周复盘->月复盘->季度复盘->年总结策略,所以某类型文章到后期才会成体系。 今…

    技术杂谈 2023年6月1日
    0110
  • 小米pad4 刷官方rom 9.6.6 打电话功能

    下载后解压tgz包,成为文件夹备用 步骤2:小米官方下载手机刷机解锁工具: https://www.miui.com/unlock/index.html 并解锁(是否需要执行此步骤…

    技术杂谈 2023年5月31日
    0162
  • ArcGIS Pro二次开发一键生成生成地球三维,建筑物拉伸三维,Dem三维,洪水淹没效果和实心三维

    Original: https://www.cnblogs.com/gisoracle/p/16272461.htmlAuthor: gisoracleTitle: ArcGIS …

    技术杂谈 2023年5月30日
    0112
  • 我的个人网站

    ; ; 阿戴Blog,记录Java开发心得体验的Blog posted @2020-09-24 11:07 秋山水色 阅读(58 ) 评论() 编辑 Original: https…

    技术杂谈 2023年7月25日
    077
  • 期末求加分

    信2005-3班 20203910 陈振辉 和王建民老师度过了一个愉快的学期,期末希望成绩能加分,申请理由如下: 1.在第一次课上动手又动脑中,第一阶段班级达到前15名提交要求。 …

    技术杂谈 2023年6月21日
    053
  • Rust:axum学习笔记(4) 上传文件

    接上一篇继续,上传文件是 web开发中的常用功能,本文将演示axum如何实现图片上传(注:其它类型的文件原理相同),一般来说要考虑以下几个因素: 文件上传的大小限制 文件上传的类型…

    技术杂谈 2023年5月31日
    095
  • [学习笔记]Java枚举

    在Java中,枚举是一种特殊的类,一般用于表示一组常量; 定义枚举时使用 enum关键字,各个常量使用逗号分隔; 也可以在类的内部定义枚举: 每个枚举都以内部类的形式实现,且所有的…

    技术杂谈 2023年7月24日
    062
  • 《睡在天堂的爱》作者:如意

    一天,父亲开口跟我要钱了。最初的借口是身体不太好,要去医院做个全身检查,我便给他寄了钱。 没想到时间不长,他又来了电话,说想买个电动三轮车。我犹豫了一下,他好像听出我的迟疑,说:&…

    技术杂谈 2023年6月1日
    095
  • 通过apicloud实现的混合开发App的Demo

    Demo属于入门实例,未做深入研究,关于Apiclou中的api未做详细介绍。主要是通过HTML+CSS+JS所实现的App。主要实现的功能有底部导航+路由的封装+首页不同状态的布…

    技术杂谈 2023年5月31日
    0103
  • [学习笔记]日期和时间

    日期(Date)和时间(Time)是计算机可以处理的重要数据; 日期代表日历中的某一天,由年/月/日组成,被看作是离散的数据; 时间代表某个时间点,由时/分/秒组成; 本地时间 我…

    技术杂谈 2023年7月24日
    066
  • MySQL中的事务和MVCC

    本篇博客参考掘金小册——MySQL 是怎样运行的:从根儿上理解 MySQL 以及极客时间——MySQL实战45讲。 虽然我们不是DBA,可能对数据库没那么了解,但是对于数据库中的索…

    技术杂谈 2023年7月25日
    089
  • 甄领科技携手“燕千云”,助力企业管理员工健康

    导语: 3月份以来,一些地方的感染病例快速增长,已经波及多个省份,形势复杂严峻。当前,从全世界范围来看,新冠疫情仍处于高位,防控形势依然十分严峻。 在这场没有硝烟的战”…

    技术杂谈 2023年7月23日
    0129
  • 国产化之x64平台安装银河麒麟操作系统

    背景 某个项目需要实现基础软件全部国产化,其中操作系统指定银河麒麟v4,CPU使用飞腾处理器。飞腾处理器是ARMv8架构的,在之前的文章中介绍了使用QEMU模拟ARMv8架构安装银…

    技术杂谈 2023年7月11日
    0132
  • C/C++宏定义讲解

    宏 define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. 使用宏时是简单的代码段替换. #define的…

    技术杂谈 2023年7月24日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球