aws лямбда-функция и соответствующая роль IAM для остановки и запуска экземпляра EC2 в CloudFormation - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь запустить запланированный экземпляр, который будет останавливаться и запускаться в указанное время каждый день (в AWS шаблон CloudFormation). это моя роль и политика 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; Идентификатор запроса: 3094b9eb-9f45-4763-8f21-9c3f2496fc52)

И после этой ошибки все службы, связанные с этой ролью, не работают по этой ошибке:

Не удалось создать следующие ресурсы: [InternetGateway, SNSTopicNameCreate, LambdaInvocationsAlarm, RootRole, VP C, LambdaInvocationsAnomalyDetector]. , Откат по запросу пользователя.

1 Ответ

0 голосов
/ 18 февраля 2020

Ваша политика, по-видимому, путает раздел «Предполагаемая роль», который определяет политику доверия, с разделом «Политика», который предоставляет разрешения для роли 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, чтобы сгенерировать большую часть того, что вы хотите. Затем вы можете настроить политику, которую он предоставляет.

...