Как разрешить пользователям IAM устанавливать имя и другие настраиваемые теги, когда они ограничены разрешениями на уровне ресурсов в EC2 - PullRequest
0 голосов
/ 26 апреля 2018

Я играл с настройкой прав доступа к ресурсам на основе тегов в EC2, используя подход, подобный тому, который описан в ответе на следующий вопрос: Могу ли я ограничить группу пользователей в доступе / запуске / прекратить только определенные AMI или экземпляры EC2?

Я использовал это в сочетании с лямбда-функцией для автоматической пометки экземпляров EC2, устанавливая Owner и PrincipalId на основе пользователя IAM, который вызвал соответствующее действие ec2:RunInstances. Подход, который я использовал для этого, описан в следующем сообщении в блоге AWS: Как автоматически помечать ресурсы Amazon EC2 в ответ на события API

Сочетание этих двух подходов привело к тому, что мои ограниченные пользовательские разрешения для EC2 выглядели так в моем шаблоне CloudFormation:

LimitedEC2Policy:
Type: "AWS::IAM::Policy"
Properties:
  PolicyName: UserLimitedEC2
  PolicyDocument:
    Version: 2012-10-17
    Statement:
      - Effect: Allow
        Action: ec2:RunInstances
        Resource:
          - !Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:subnet/${PrivateSubnetA}'
          - !Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:subnet/${PrivateSubnetB}'
          - !Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:subnet/${PrivateSubnetC}'
          - !Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:security-group/${BasicSSHAccessSecurityGroup.GroupId}'
          - !Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:key-pair/${AuthorizedKeyPair}'
          - !Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:network-interface/*'
          - !Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:instance/*'
          - !Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:volume/*'
          - !Sub 'arn:aws:ec2:${AWS::Region}::image/ami-*'
        Condition:
          StringLikeIfExists:
            ec2:Vpc: !Ref Vpc
          StringLikeIfExists:
            ec2:InstanceType: !Ref EC2AllowedInstanceTypes
      - Effect: Allow
        Action:
          - ec2:TerminateInstances
          - ec2:StopInstances
          - ec2:StartInstances
        Resource:
          - !Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:instance/*'
        Condition:
          StringEquals:
            ec2:ResourceTag/Owner: !Ref UserName
  Users:
    - !Ref IAMUser

Эти разрешения IAM ограничивают пользователей для запуска экземпляров EC2 в пределах ограниченного набора подсетей, в пределах одного VPC и группы безопасности. Тогда пользователи могут только запускать / останавливать / завершать экземпляры, которые были помечены их пользователем IAM в теге Owner.

Я хотел бы, чтобы пользователи могли также создавать и удалять любые дополнительные теги в своих ресурсах EC2, например устанавливать тег Name. Что я не могу понять, так это то, как я могу сделать это, не позволяя им также изменять теги Owner и PrincipalId на ресурсах, которые они не «владеют».

Можно ли ограничить действия ec2:createTags и ec2:deleteTags, чтобы пользователи не могли устанавливать определенные теги?

1 Ответ

0 голосов
/ 26 апреля 2018

После долгого анализа документации AWS EC2 я обнаружил следующее: Разрешения на уровне ресурсов для тегов

Это дает пример:

Используйте с модификатором ForAllValues для принудительного применения определенных ключей тега, если они предоставляются в запросе (если теги указаны в запрос, разрешены только определенные ключи тэга; других тегов нет позволил). Например, среда ключей тегов или центр затрат допускается:

"ForAllValues:StringEquals": { "aws:TagKeys": ["environment","cost-center"] }

Поскольку то, что я хочу достичь, по сути противоположно этому (позволяет пользователям указывать все теги, за исключением определенных ключей тегов), я смог запретить пользователям создавать / удалять теги Owner и PrincipalId, добавляя следующий PolicyDocument оператор моей политики пользователя в моем шаблоне CloudFormation:

- Effect: Allow
    Action:
      - ec2:CreateTags
      - ec2:DeleteTags
    Resource:
      - !Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:*/*'
    Condition:
      "ForAllValues:StringNotEquals":
        aws:TagKeys:
          - "Owner"
          - "PrincipalId"

Это позволяет пользователям создавать / удалять любые теги, которые они хотят, если они не являются Owner или PrincipalId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...