Рубрики
Uncategorized

Делегирование IAM доступ с границей разрешения

Это первый репост последовательно, который охватывает различные детали миграционных услуг из традиционных … Теги от AWS, Security, Devops.

Из центра обработки данных до AWS (2 части серии)

Это первый репост последовательно, который охватывает различные детали миграционных услуг из традиционного центра обработки данных до AWS. Вы можете найти этот и другой пост из моего личного блога https://carriagreturn.nl/

Краткая история общих аккаунтов AWS

Вернувшись в дни, при создании учетной записи AWS было много накладных расходов, общий шаблон должен был иметь несколько команд, разделяющих единую учетную запись. Это создало требование изолировать команды друг от друга, присвоение им политику IAM, которая предоставит доступ только к своей части аккаунта. Хотя возможно, было возможно (теоретически) создать сложные политики IAM для контейнерных ресурсов по заявлению или команде, одна фундаментальная проблема осталась. Как только вы получили право создавать политику или роль IAM, вы эффективно предоставили доступе к уровню администратора ко всему на счет. IAM имеет очень гранульные элементы управления для действий, он не может ограничить то, какую политику вы прикрепляете к роли или содержанию политических документов.

Чтобы решить эту проблему, AWS представил в июле 2018 года, называется IAM разрешений границы Отказ Если это осталось незамеченным, не чувствуй себя о себе. Если вы работаете в современной среде, это была лучшая практика для использования учетной записи AWS как граница и создание учетных записей, предназначенных для одной команды, приложения или окружающей среды.

Ямская граница разрешений

Есть 3 типа политики IAM, которые контролируют ваш доступ к AWS APIS. Сначала и наиболее распространенным является обычная политика на основе идентичности, которые прикреплены к ролям и пользователям. Второй тип — политики управления службой организации (SCP), которые прикреплены к учетным записям AWS или OAS. Они могут ограничить то, что могут сделать местные администраторы на счете, и, поскольку они не являются частью учетной записи, они не могут быть изменены местными администратами. Типичный использование для SCPS будет ограничивать регионы или услуги, которые вам разрешено использовать в данной учетной записи.

Третий тип является разрешенной границей политики. Он похож на регулярные политики IAM внутри учетной записи, но использование — дело аналогично СКП, ограничивая то, что может быть предоставлено в нормальной политике.

Логика оценки политики работает так, что вам разрешено только для действий, если все три типов политиков позволяют. Вы можете вспомнить, что одиночный Отрицать всегда будет перезаписать любое количество Разрешить заявления, но еще одна вещь отметить, что все типы политиков также должны иметь Разрешить Ваши действия, то есть. Эффективные разрешения являются пересечением всех применяемых политик. Вот почему вы обычно хотите иметь Разрешить - все -ставка в разрешении границы или политики SCP, а затем отрицает части, которые вы не хотите получить с помощью нормальных политик IAM.

Установка границ для команды

Цель состоит в том, чтобы позволить пользователям управлять политиками IAM, ролями, пользователями, группами и профилями экземпляра, чтобы они могли работать в IDE. Но в то же время защитите свои ресурсы от других, делящихся тем же учетной записью AWS. Владение ресурсом заявлено, используя тег с уникальным значением для пользователя, команды или роли. Т.е. то, что было невозможно до границы разрешений Отказ

Рассекать пограничную политику

Как демонстрация того, как работает границы разрешения IAM, я написал Делоформационный шаблон Это создает пользователь IAM с АдминистраторCCess и разрешение границы прилагается. Я рассекал операторы пограничной политики ниже.

Сначала есть нормальные материалы заголовка политики IAM. Только интересная часть здесь Менеджерполиционерное значение Отказ Это будет ограничено в следующих утверждениях.

  IAMBoundary:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName: !Sub "${AWS::StackName}-boundary"
      Description: IAM permission boundary to force boundary inheritance
      PolicyDocument:
        Version: "2012-10-17"
        Statement:

RutueNessownedbysomeoneelse.

Это утверждение позволит всем действиям, на всех ресурсах, если нет владелец -Таг, который имеет разное значение, чем роль IAM или пользователь владелец -Таг имеет. Т.е. Если какой-то ресурс отсутствует владелец -Таг, они считаются общей собственностью. Это то, что вы должны принять, так как невозможно пометить все ресурсы при создании, но создание и метка — 2 отдельных вызовы API. Также предполагается, что когда создается роль или пользователь, она будет помечена командой или конкретным владельцем приложений -TAG, как Stringequalsifexists не будет применяться, когда AWS: ГлавнаяТаг/Владелец нет.

          - Sid: 'AllowUnlessOwnedBySomeoneElse'
            Effect: Allow 
            Action: '*'
            Resource: '*'
            Condition:
              StringEqualsIfExists:
                'aws:RequestTag/owner': ${aws:PrincipalTag/owner}
                'aws:ResourceTag/owner': ${aws:PrincipalTag/owner}

Денибундаримодификация

Следующая вещь — отрицать модификацию этой краевой политики. Правило отрицания применяется только эта единая политика. Вы все еще можете предоставить доступ ко всем другим политикам IAM.

          - Sid: 'DenyBoundaryModification'
            Effect: Deny
            Action:
              - iam:CreatePolicyVersion
              - iam:DeletePolicy
              - iam:DeletePolicyVersion
              - iam:SetDefaultPolicyVersion
            Resource: !Sub "arn:aws:iam::${AWS::AccountId}:policy/${AWS::StackName}-boundary"

ForceBoundyNeritance.

Это говядина границы разрешений. Вам разрешено создавать роль или пользователь только в том случае, если у вас есть одинаковая граница разрешений, прилагаемая для вас.

          - Sid: 'ForceBoundaryInheritance'
            Effect: Deny 
            Action:
              - iam:CreateUser
              - iam:CreateRole
              - iam:PutUserPermissionsBoundary
              - iam:PutRolePermissionsBoundary
            Resource: '*'
            Condition:
              StringNotEquals:
                'iam:PermissionsBoundary': !Sub "arn:aws:iam::${AWS::AccountId}:policy/${AWS::StackName}-boundary"

ДенибундарьРемвальство

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

          - Sid: 'DenyBoundaryRemoval'
            Effect: Deny
            Action:
              - iam:DeleteUserPermissionsBoundary
              - iam:DeleteRolePermissionsBoundary
            Resource: '*'
            Condition:
              StringEquals:
                'iam:PermissionsBoundary': !Sub "arn:aws:iam::${AWS::AccountId}:policy/${AWS::StackName}-boundary"

Denyiamchangeswithoutprefix.

Окончательное заявление о пограничной политике, ограничивает ресурсы IAM; Пользователи, группы, роли, политики и профили экземпляра, чтобы получить префикс вашего IAM Havances владелец -Таг ценность. Это гарантирует, что вы не сможете изменять или прикрепить к вашим собственным ресурсам IAM.

          - Sid: 'DenyIAMChangesWithoutPrefix'
            Effect: Deny
            Action:
              - iam:Add*
              - iam:Attach*
              - iam:Create*
              - iam:Delete*
              - iam:Detach*
              - iam:Pass*
            NotResource:
              - !Sub "arn:*:iam::${AWS::AccountId}:group/${!aws:PrincipalTag/owner}-*"
              - !Sub "arn:*:iam::${AWS::AccountId}:policy/${!aws:PrincipalTag/owner}-*"
              - !Sub "arn:*:iam::${AWS::AccountId}:role/${!aws:PrincipalTag/owner}-*"
              - !Sub "arn:*:iam::${AWS::AccountId}:user/${!aws:PrincipalTag/owner}-*"
              - !Sub "arn:*:iam::${AWS::AccountId}:instance-profile/${!aws:PrincipalTag/owner}-*"

Вот и все! Теперь вы имеете изолированные несколько команд в одной учетной записи, используя границу разрешения IAM. Вы можете пометить сейчас пользователь IAM с владелец -Таг и некоторая ценность. Затем используя другой пользователь, создавайте ресурсы, некоторые помечены с тем же значением, что и созданный IAM, некоторые с разными значениями, и посмотрите, как доступ только к ресурсам, соответствующим вашему тегу.

ЗАМЕТКА: Нет необходимости создавать специальную пограничную политику в команде, но та же политика может быть прикреплена ко всем ролям и пользователям, которые должны быть изолированы. Это благодаря IAM Политика Переменная AWS: Главная тег Отказ

Слишком маленький, слишком поздно?

Но это слишком мало, слишком поздно », как сейчас также легко создавать новые учетные записи с использованием организаций?

Если есть возможность иметь выделенную учетную запись AWS, это будет окончательная граница. Но есть также много больших миграций из центра обработки данных до AWS, где это невозможно создать собственную учетную запись для каждой рабочей нагрузки. Именно здесь общие счета с границами разрешений могут стать полезными. И не стоит забывать те поделиться «наследие» с учетом того, что многие из нас создали в прошлом, и еще не совсем разделены на одну модель аренды 😉

Таким образом, на самом деле может быть больше для границ IAM, чем когда-либо!

Слияние Я хотел бы услышать, если вы нашли дыры в границе, которую я пропустил.

P.P.S. Лямбда применяет автоматическую границу разрешений к приложению IAM роли это создает. Вы можете использовать автоматическую созданную пограничную политику или определить свои собственные в Sam Template Глобал -раздел.

Из центра обработки данных до AWS (2 части серии)

Оригинал: «https://dev.to/kallu/delegating-iam-access-with-permission-boundary-1ehe»