Gau*_*ani 5 amazon-iam serverless-framework serverless-plugins aws-serverless
我正在尝试部署一个 AWS Lambda 函数,当 AVRO 文件写入现有 S3 存储桶时,该函数会被触发。
我的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
Run Code Online (Sandbox Code Playgroud)
当我运行时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.
Run Code Online (Sandbox Code Playgroud)
由于 CloudFormation 的工作原理,我看到一些提到需要无服务器,iam:CreateRole但如果我想使用,谁能确认这是否是唯一的解决方案existing: true?除了使用框架添加对配置的支持之前使用的旧无服务器插件之外,还有其他方法吗existing: true?
另外,1M5QQI6P2ZYUH里面是什么arn:aws:iam::<account_id>:role/braze-lambdas-dev-IamRoleCustomResourcesLambdaExec-1M5QQI6P2ZYUH?它是一个随机标识符吗?这是否意味着每次我尝试部署 Lambda 函数时,Serverless 都会尝试创建新的 IAM 角色?
小智 6
我刚刚遇到过这个,并且克服了它。
我还有一个 lambda,我想将它的 s3 事件附加到已经存在的存储桶。
我的工作场所最近通过使用权限边界加强了 AWS 账户安全性。
所以我在部署过程中遇到了非常相似的错误
Serverless Error ---------------------------------------
An error occurred: IamRoleCustomResourcesLambdaExecution - API: iam:CreateRole User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/xx-crossaccount-xx/aws-sdk-js-1600789080576 is not authorized to perform: iam:CreateRole on resource: arn:aws:iam::XXXXXXXXXXXX:role/my-existing-bucket-IamRoleCustomResourcesLambdaExec-LS075CH394GN.
Run Code Online (Sandbox Code Playgroud)
如果您阅读在无服务器站点上使用现有存储桶,它会说
注意:使用现有配置将向您的堆栈添加额外的 Lambda 函数和 IAM 角色。Lambda 函数备份用于支持现有 S3 存储桶的自定义 S3 资源。
就我而言,我需要进一步自定义无服务器创建的这个额外角色,以便还为其分配我的雇主定义的所有角色上都应存在的权限边界。这发生在该resources:部分。
如果您的雇主正在使用权限边界,您显然需要知道要使用的正确 ARN
resources:
Resources:
IamRoleCustomResourcesLambdaExecution:
Type: AWS::IAM::Role
Properties:
PermissionsBoundary: arn:aws:iam::XXXXXXXXXXXX:policy/xxxxxxxxxxxx-global-boundary
Run Code Online (Sandbox Code Playgroud)
有关无服务器资源配置的一些信息
看看你自己的serverless.yaml,你可能已经在该部分定义了权限边界provider。如果是这样,你会在下面找到它rolePermissionsBoundary,我认为这是在无服务器版本 1.64 中添加的
provider:
rolePermissionsBoundary: arn:aws:iam::XXXXXXXXXXXX:policy/xxxxxxxxxxxx-global-boundary
Run Code Online (Sandbox Code Playgroud)
如果是这样,您应该能够在resources:我在此处发布的示例中使用该 ARN。
Sea*_*ine -1
对于运行sls deploy,我建议您使用具有管理员权限的角色/用户/策略。
如果您由于 InfoSec 团队等原因受到限制,那么我建议您让 InfoSec 团队查看“无服务器框架部署的 AWS IAM 权限要求”文档。这是一个讨论它的好链接: https: //github.com/serverless/serverless/issues/1439。至少,他们应该添加iam:CreateRole,这可以让你今天畅通无阻。
现在我将解答您的个人问题:
如果我想使用,谁能确认这是否是唯一的解决方案
existing: true
苹果和橙子。您的 S3 配置与您的错误消息无关。iam:CreateRole必须添加到无论/无论谁在做什么的政策中sls deploy。
另外,
1M5QQI6P2ZYUH里面是什么arn:aws:iam::<account_id>:role/braze-lambdas-dev-IamRoleCustomResourcesLambdaExec-1M5QQI6P2ZYUH?它是一个随机标识符吗?这是否意味着每次我尝试部署该功能时,无服务器都会尝试创建一个新角色?
sls不会每次都创建新角色。该唯一 ID 会被缓存并重新用于现有堆栈的更新。| 归档时间: |
|
| 查看次数: |
3963 次 |
| 最近记录: |