登录
首页 >  Golang >  Go问答

具有默认 LambdaRole 的 Dynamo UpdateItem AccessDeniedException

来源:stackoverflow

时间:2024-04-21 13:30:39 190浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《具有默认 LambdaRole 的 Dynamo UpdateItem AccessDeniedException》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我很难找到正确的角色来在我的 golang lambda 处理程序中执行 dynamo updateitem。

我已使用无服务器框架和以下配置部署了该函数:

provider:
  name: aws
  runtime: go1.x
  stage: ${opt:stage, 'dev'}
  environment: ${file(./env/config.${self:provider.stage}.yml)}
  iamrolestatements: # todo: create special roles and restrict access per lambda
    - effect: allow
      action:
        - dynamodb:describetable
        - dynamodb:query
        - dynamodb:scan
        - dynamodb:getitem
        - dynamodb:putitem
        - dynamodb:updateitem
        - dynamodb:deleteitem
      resource:
        - "fn::getatt": [ mytable, arn ]

resources:
  resources:
    mytable:
      type: 'aws::dynamodb::table'
      properties:
        tablename: mytable-${opt:stage, 'dev'}
        attributedefinitions:
          - attributename: userid
            attributetype: s
        keyschema:
          - attributename: userid
            keytype: hash
        provisionedthroughput:
          readcapacityunits: 1
          writecapacityunits: 1

functions:
  myfunc:
    handler: bin/myfunc
    events:
      - http:
          path: myfunc
          method: post
          authorizer: app-auth
          cors: true

处理程序使用 golang aws-sdk 创建会话并在表上调用 updateitem:

sess, err := session.NewSession()
    svc := dynamodb.New(sess)
    input := &dynamodb.UpdateItemInput{
        ...
    }
    _, err = svc.UpdateItem(input)

这会引发异常:

accessdeniedexception:用户:arn:aws:sts::{acct}:assumed-role/myservice-stage-us-east-1-lambdarole/myservice-stage-myfunc

user: arn:aws:sts::{acct}:assumed-role/myservice-stage-us-east-1-lambdarole 是具有正确权限的角色:

我不确定用户的 /myservice-stage-myfunc 部分属于例外情况,因为 iam 控制台中不存在此类内容。

我是否缺少某种配置步骤。据我所知,serverless.yaml 中的 iam 权限设置应适用于所有功能。但是,使用 go-aws-sdk 时假定的角色似乎是错误的。


解决方案


dynamodb 具有经常需要访问的子资源。为了确保您也解决这些子项目,我建议在资源末尾添加通配符 *。为此,我更喜欢使用 serverless-pseudo-parameters 插件(您可以使用 serverless plugin install --name serverless-pseudo-parameters 快速安装它),然后使用它来更清晰地描述资源,例如:

Resource:
        - arn:aws:dynamodb:#{AWS::Region}:#{AWS::AccountId}:table/myTable-${opt:stage, 'dev'}*

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《具有默认 LambdaRole 的 Dynamo UpdateItem AccessDeniedException》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>