当使用现有的S3 bucket来触发Lambda函数时,如何避免给予`iam:CreateRole`权限?

问题描述 投票:1回答:1

我正试图部署一个AWS Lambda函数,当一个AVRO文件被写入现有的S3 bucket时,该函数会被触发。

我的 serverless.yml 配置如下。

service: braze-lambdas

provider:
  name: aws
  runtime: python3.7
  region: us-west-1
  role: arn:aws:iam::<account_id>:role/<role_name>
  stage: dev
  deploymentBucket:
    name: serverless-framework-dev-us-west-1
    serverSideEncryption: AES256

functions:
  hello:
    handler: handler.hello
    events:
      - s3:
          bucket: <company>-dev-ec2-us-west-2
          existing: true
          events: s3:ObjectCreated:*
          rules:
            - prefix: gaurav/lambdas/123/
            - suffix: .avro

当我运行 serverless deploy我得到以下错误信息。

ServerlessError: An error occurred: IamRoleCustomResourcesLambdaExecution - API: iam:CreateRole User: arn:aws:sts::<account_id>:assumed-role/serverless-framework-dev/jenkins_braze_lambdas_deploy is not authorized to perform: iam:CreateRole on resource: arn:aws:iam::<account_id>:role/braze-lambdas-dev-IamRoleCustomResourcesLambdaExec-1M5QQI6P2ZYUH. 

我看到有些人提到Serverless需要... ... iam:CreateRole 因为CloudFormation的工作方式,但有谁能确认,如果我想使用云计算,这是否是唯一的解决方案?existing: true? 除了使用旧的Serverless插件外,还有没有其他的方法来解决这个问题,在框架添加支持之前,使用的是旧的Serverless插件。existing: true 配置?

另外,什么是 1M5QQI6P2ZYUHarn:aws:iam::<account_id>:role/braze-lambdas-dev-IamRoleCustomResourcesLambdaExec-1M5QQI6P2ZYUH? 是一个随机的标识符吗?这是否意味着每次我尝试部署Lambda函数时,Serverless会尝试创建一个新的IAM角色?

amazon-iam serverless-framework aws-serverless serverless-plugins
1个回答
0
投票

对于运行 sls deploy,我建议你使用具有管理员权限的角色用户政策。

如果你因为你的InfoSec团队或类似的原因而受到限制,那么我建议你让你的InfoSec团队看看 "AWS IAM Permission Requirements for Serverless Framework Deploy "的文档。这里有一个讨论它的好链接。https:/github.comserverlessserverlessissues1439。. 至少,他们应该增加 iam:CreateRole 就可以让你今天解封了。

现在我将解决你的个别问题。

有谁能确认,如果这是唯一的解决方案 如果我想使用。existing: true

苹果和橘子。你的S3配置与你的错误信息无关。iam:CreateRole 必须添加到策略中,不管是谁在做什么。sls deploy.

还有,什么是 1M5QQI6P2ZYUHarn:aws:iam::<account_id>:role/braze-lambdas-dev-IamRoleCustomResourcesLambdaExec-1M5QQI6P2ZYUH? 是一个随机的标识符吗?这是否意味着每次我尝试部署函数时,serverless会尝试创建一个新的角色?

  1. 是的,它是一个随机标识符
  2. 不知道 sls 不会每次都创建一个新角色。这个唯一的ID会被缓存,并在更新现有的堆栈时重复使用。
  3. 如果一个堆栈被销毁再创建,它将分配一个生成一个新的唯一ID。
© www.soinside.com 2019 - 2024. All rights reserved.