amazon-web-services - aws lambda 函数和对应的 IAM 角色,用于在 CloudFormation 中停止和启动 EC2 实例
问题描述
我正在尝试启动一个计划实例,该实例将在每天的指定时间停止并启动(在 AWS CloudFormation 模板中)。这是我为 lambda 函数定义的 IAM 角色和策略:
RootRole:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
Resource: arn:aws:logs:*:*:*
- Effect: Allow
Action:
- ec2:Start*
- ec2:Stop*
Resource: "*"
当我创建一个堆栈时,它在控制台中返回一个错误(CREATE_FAILED),状态原因是:
已禁止字段资源(服务:AmazonIdentityManagement;状态代码:400;错误代码:MalformedPolicyDocument;请求 ID:3094b9eb-9f45-4763-8f21-9c3f2496fc52)
在此错误之后,与此角色相关的所有服务都因此错误而失败:
未能创建以下资源:[InternetGateway、SNSTopicNameCreate、LambdaInvocationsAlarm、RootRole、VPC、LambdaInvocationsAnomalyDetector]。. 用户请求回滚。
解决方案
您的策略似乎将定义信任策略的“承担角色”部分与授予 IAM 角色权限的“策略”部分混淆了。
尝试这个:
AWSTemplateFormatVersion: 2010-09-09
Resources:
LambdaRole:
Type: AWS::IAM::Role
Properties:
RoleName: Lambda-Role
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: AllowLogsAndEC2
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
Resource: arn:aws:logs:*:*:*
- Effect: Allow
Action:
- ec2:StartInstances
- ec2:StopInstances
Resource: "*"
通常,创建策略的最简单方法是复制现有策略并进行细微更改,或者使用 IAM 控制台中的策略编辑器生成您想要的大部分内容。然后,您可以调整它提供的策略。
推荐阅读
- javascript - 无法从我通过 api 调用获得的对象获取位置属性
- swiftui - 如何从 SwiftUI 中的列表中删除行分隔符?代码在 iOS 14 中不起作用
- github - 如何从我的活动资料中删除其他组织贡献按钮
- csv - 使用类似于 CSV、TSV 文件格式的数据集准备
- sql-server - SQL Server:在没有管理员用户的情况下获取客户端 tcp 端口
- python - matplotlib.pyplot.show() 窗口在运行后自动/立即终止
- ssl - 如何将 Terraform 连接到 Kubernetes 集群
- c# - 如何在.Net c#中使用泛型方法注入(注册服务)非泛型类
- swiftui - SwiftUI/Combine:订阅数组更新与元素更新
- microsoft-teams - 未捕获的类型错误:e 不是 MicrosoftTeams.min.js:1 的函数