У лямбды нет разрешения на добавление тегов к управляемым экземплярам в системном менеджере - PullRequest
0 голосов
/ 30 марта 2019

У меня есть структура с несколькими учетными записями в AWS, где у меня есть основная и дочерняя учетные записи. Я следую этому руководству , чтобы распространять теги из дочерних экземпляров в основную учетную запись после их активации, и я могу управлять экземплярами в основной учетной записи (администратор систем).

Пока все это работает до такой степени, что лямбда в основной учетной записи имеет все необходимые теги. Однако он не может добавить теги к управляемым экземплярам в системном менеджере. Не уверен, почему роль все еще не может получить доступ к тегам, учитывая разрешения ...

Это ошибка, которую я получаю:

[ERROR] 2019-03-29T09:14:02.419Z a00a68ba-9904-4199-bcae-cad75f6f5232 An error occurred (ValidationException) when calling the AddTagsToResource operation: Caller is an end user and not allowed to mutate system tags instanceId: mi-0d3bfce27d073c0f2

Это лямбда-функция с прикрепленной ролью:

AWSTemplateFormatVersion: '2010-09-09'
Description: Management function that copies tags
Resources:
  rSSMTagManagerRole:
    Type: "AWS::IAM::Role"
    Properties:
      RoleName: Automation-SSMTagManagerRole
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: "Allow"
            Principal:
              Service:
                - "lambda.amazonaws.com"
            Action:
              - "sts:AssumeRole"
      Path: "/aws/"
      Policies:
        - PolicyName: "CopyInstanceTagsToSSMPolicy"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: "Allow"
                Action:
                - ssm:AddTagsToResource
                - logs:CreateLogGroup
                - logs:CreateLogStream
                - logs:PutLogEvents
                - tag:*
                Resource: "*"

  fnSSMTagManager:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: Automation-SSM-Tag-Manager
      Handler: index.lambda_handler
      Role: !GetAtt [rSSMTagManagerRole, Arn]
      Description: >
        Copies tags from the list of instances in the event
        context to the specified managed instances.
      Code:
        ZipFile: |+

          import boto3
          import json
          import logging

          #setup simple logging for INFO
          logger = logging.getLogger()
          logger.setLevel( logging.WARN )

          client = boto3.client( 'ssm' )

          def lambda_handler( event, context ):
              """Copies tags from the list of instances in the event
              context to the specified managed instances.
              """
              for instance in event[ "instances" ]:
                 addTags( instance[ "instanceId" ], instance[ "tags" ] )

          def addTags( resourceid, tags ):
              logger.info( "Configuring " + resourceid + " with " + str(tags) )
              try:
                  response = client.add_tags_to_resource(
                      ResourceType='ManagedInstance',
                      ResourceId=resourceid,
                      Tags=tags
                  )
                  logger.info( response )
                  return response
              except Exception as e:
                  errorMessage = str(e) + "instanceId: " + resourceid
                  logger.error( errorMessage )
                  return errorMessage

      Runtime: python3.6
      Timeout: '90'

1 Ответ

1 голос
/ 17 мая 2019

Использование того же руководства. Столкнулся с точно такой же ошибкой. Оказалось, что экземпляры в учетной записи агентства имели слишком много (более 10) тегов, из-за чего диспетчер тегов выдавал эту ошибку. Изменена лямбда-функция «Сборщик тегов» для распространения только определенных тегов вместо всех тегов. Это очистило ошибку.

...