Ограничить вход в систему корпоративным доменом Google для федеративного пула удостоверений AWS - PullRequest
0 голосов
/ 28 июня 2018

Я использую пулы удостоверений федерации с aws-ampify (https://aws.github.io/aws-amplify/media/authentication_guide#enabling-federated-identities)) и хочу ограничить область действия доменов только моей организацией доменов Google (например, johndoe@foobar.com).

Кажется, что нет способа заблокировать его ни в консоли API Google, ни в настройках AWS Cognito Identity Pool, просто намек на то, что параметр hd можно добавить к запросу Google, чтобы ограничить его доменом ( который по-прежнему требует изменения основного пакета aws-ampify), и он по-прежнему не будет безопасным, поскольку любой может сделать тот же запрос без hd и получить доступ к cognito.

У меня такой вопрос: есть ли способ ограничить использование oauth-ключа Google только разрешением адресов электронной почты @ foobar.com или применить такое же ограничение с помощью aws cognito?

1 Ответ

0 голосов
/ 17 сентября 2018

Я считаю, что нашел решение (из нескольких быстрых тестов, похоже, оно работает нормально)

Не пытайтесь контролировать размещенную часть домена через доверительные отношения в роли.

  • Перейти к: Cognito / Редактировать пул удостоверений / Поставщики аутентификации

  • Выберите Google +

  • В разделе «Выбор ролей с проверкой подлинности» выберите «Выбрать роль с правилами»

  • Теперь требуется, чтобы требование "hd" было равно "1020 *

  • установить "Разрешение роли" на "DENY"

Источник: https://forums.aws.amazon.com/thread.jspa?messageID=527303

Вот стек облачной информации, позволяющий установить все (пул удостоверений, роли и т. Д.) За один раз. ВАМ НУЖНО СДЕЛАТЬ НЕОБХОДИМЫЕ РЕГУЛИРОВКИ во всех местах, отмеченных EDIT HERE: комментарием.

AWSTemplateFormatVersion : 2010-09-09
Description : "An Identity Pool stack which uses Google for sign-in"


Resources:
  IdentityPool:
    Type: AWS::Cognito::IdentityPool
    Properties:
      IdentityPoolName: identity_pool_a
      AllowUnauthenticatedIdentities: false
      SupportedLoginProviders: 
        # EDIT HERE:
        "accounts.google.com": "11111111111-22222222222222222222222222222222.apps.googleusercontent.com"

  IdentityForbiddenRole:
    Type: AWS::IAM::Role
    Properties:
      MaxSessionDuration: 3600
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow 
            Principal:
              Federated: "cognito-identity.amazonaws.com"
            Action:
              - "sts:AssumeRoleWithWebIdentity"
            Condition:
              StringEquals: 
                "cognito-identity.amazonaws.com:aud": !Ref IdentityPool
              ForAnyValue:StringLike:
                "cognito-identity.amazonaws.com:amr": unauthenticated
      Policies:
        - PolicyName: None
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Deny
                Action: "*"
                Resource: "*"

  IdentityAllowedRole:
    Type: AWS::IAM::Role
    Properties:
      MaxSessionDuration: 3600
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Federated: "cognito-identity.amazonaws.com"
            Action:
              - "sts:AssumeRoleWithWebIdentity"
            Condition:
              StringEquals: 
                "cognito-identity.amazonaws.com:aud": !Ref IdentityPool
              ForAnyValue:StringLike:
                "cognito-identity.amazonaws.com:amr": authenticated
      Policies:
        - PolicyName: UserPermissions
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                # EDIT HERE:
                Action: "s3:GetObject"
                # EDIT HERE:
                Resource: "arn:aws:s3:::my-bucket/*"

  RoleAttachment:
    Type: AWS::Cognito::IdentityPoolRoleAttachment
    Properties:
      IdentityPoolId: !Ref IdentityPool
      Roles: 
        unauthenticated: !GetAtt IdentityForbiddenRole.Arn
        authenticated: !GetAtt IdentityForbiddenRole.Arn
      RoleMappings: 
        accounts.google.com:
          AmbiguousRoleResolution: Deny
          Type: Rules
          RulesConfiguration:
            Rules:
              - Claim: hd
                MatchType: Equals
                # EDIT HERE:
                Value: mydomain.com
                RoleARN: !GetAtt IdentityAllowedRole.Arn
...