Ограничение AWS Identity Pool для доступа только к одной лямбде - PullRequest
1 голос
/ 22 марта 2020

У меня есть веб-интерфейс, которому предоставляется неаутентифицированный доступ к AWS Перевести через AWS Javascript SDK и AWS Identity Pool (на данный момент это всего лишь прототип, я скоро добавлю аутентификацию) .

Облачная информация для пула удостоверений выглядит следующим образом -

---
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  AppName:
    Type: String
Outputs:
  IdentityPoolId:
    Value: !Ref IdentityPool  # returns id
Resources:
  IdentityPool:
    Type: AWS::Cognito::IdentityPool
    Properties:
      AllowUnauthenticatedIdentities: true
      IdentityPoolName: !Sub ${AppName}-identity
  UnauthRole:
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action:
              - sts:AssumeRoleWithWebIdentity
            Condition:
              "ForAnyValue:StringLike":
                "cognito-identity.amazonaws.com:amr": unauthenticated
              StringEquals:
                "cognito-identity.amazonaws.com:aud": !Ref IdentityPool
            Effect: Allow
            Principal:
              Federated: cognito-identity.amazonaws.com
        Version: 2012-10-17
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/TranslateFullAccess
      Path: /
    Type: AWS::IAM::Role
  RoleMapping:
    Properties:
      IdentityPoolId: !Ref IdentityPool
      Roles:
        unauthenticated: !GetAtt UnauthRole.Arn
    Type: AWS::Cognito::IdentityPoolRoleAttachment

и все работает нормально.

Теперь, однако, я хочу вставить некоторые логики c между веб-страница и перевод. Поэтому я установил лямбду, которая перехватывает запрос, вызывает Translate через boto3, добавляет мой новый logi c и возвращает расширенный перевод.

Я также изменил управляемую политику в приведенном выше: TranslateFullAccess до AWSLambdaReadOnlyAccess.

Теперь я вижу, что в Javascript SDK есть метод для вызова лямбда-функции с учетом ARN -

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html#invoke -property

но я немного обеспокоен, что это может быть использовано кем-то, кто знает мой идентификатор пула удостоверений и, следовательно, теоретически может назвать любой моих лямбд, если они знают ARN.

Итак, есть ли способ в коде облачной информации Identity Pool ограничить доступ только к одной лямбде? Если кто-то предоставляет неавторизованный доступ к Lambdas через пул удостоверений, как должен быть ограничен объем этого доступа? Или я здесь излишне параноидален (как кто-нибудь узнает мои ARN?)

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

TBH Я отказался от этого. Смущен тем, что представляет собой пользователь IAM в ситуации, когда вы используете только роль без аутентификации в пуле удостоверений Cognito, а не в пуле пользователей Cognito. Вместо этого я вернулся к использованию API-шлюза, который работал нормально.

0 голосов
/ 22 марта 2020

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

Способ, которым вы делаете это, - создание IAM роль для этого пула идентичности. В этой роли IAM с помощью действия 'execute-api:Invoke' вы можете указать соответствующий ресурс, который будет являться путем доступа шлюза API к вашей лямбде.

Имейте в виду, что при этом все пользователи в пользовательские пулы, связанные с этим пулом удостоверений, смогут использовать эту лямбду.

Пример (источник: Примеры политики IAM для разрешений на выполнение API ):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:*:a123456789/test/POST/mydemoresource/*"
      ]
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...