1

Я установил свой Federated Cognito с помощью Facebook для получения учетных данных Cognito. Я ищу, чтобы защитить свои ресурсы API Gateway с помощью сгенерированного SDK для Интернета, IOS и Android, чтобы я мог развернуть свой бэкэнд через мой сгенерированный SDK.Назначение IAM для шлюза API для sdk с использованием аутентификации с использованием cognito

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

В SDK Readme, он говорит: «AWS IAM # Используя для авторизации Для инициализации SDK с АМС полномочий использовать код ниже Обратите внимание, если вы используете учетные данные все запросы к API будут подписаны Это означает, что.. вам нужно будет установить соответствующие CORS accept- * заголовки для каждого запроса ».

Однако, если я использую SDK, то почему я должен устанавливать любые заголовки запросов, так как это все запекается в SDK? Что мне не хватает с этим?

Кроме того, если я установил учетные данные Cognito при инициализации sdk, и я установил параметр авторизации в шлюзе API на «IAM», то как мне установить политику для этого ресурса, так что только мой авторизованный пользователи моего федеративного cognito будут иметь право доступа к моему API.

Это, по-видимому, довольно простой случай использования, и я ощущаю огромный пробег, пытаясь понять, как настроить эти основные ресурсы, чтобы гарантировать, что ТОЛЬКО моя уполномоченная роль cognito может получить доступ к SDK.

Как и другие ресурсы AWS, где вы привязываете политику IAM непосредственно к ресурсу, например S3 или Lambda, я ожидал, что это также будет иметь место с политикой IAM для Api Gateway. Вместо этого я должен написать политику в другом месте .... и какая политика проверяется API Gateway resoruce, если я установил авторизацию этого метода ресурсов API для IAM ...

ответ

0

Итак, я наконец-то понял выполните действия, чтобы проверить подлинность вашего SDK для использования в браузере, и я до сих пор предполагаю, что это будет применяться и при использовании SDK в IOS или Android. Я отправлю сообщение, если это не так.

ОК. SO - первая часть, которая неясно объясняется при настройке ваших учетных записей Cognito Federated, заключается в том, что в политике IAM для роли, не прошедшей проверку подлинности, значение «Доверительные отношения» по умолчанию (к этому можно получить доступ со страницы «Роль» или «Не проверенная подлинность роль» в IAM), не разрешает доступ к аутентификации Facebook, как это выражается в разных статьях о настройке Facebook (или других аутентификаторов) с вашим Federated Cognito.

Итак, вам необходимо изменить политику «доверительные отношения» для аутентифицировать роли: вы должны заменить то, что в настоящее время существует в следующем разделе, но оставить остальные политики на месте:

"ForAnyValue:StringLike": { 
      "cognito-identity.amazonaws.com:amr": "graph.facebook.com" 
     } 

Ваше доверие отношения теперь должны выглядеть следующим образом:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "Federated": "cognito-identity.amazonaws.com" 
     }, 
     "Action": "sts:AssumeRoleWithWebIdentity", 
     "Condition": { 
     "StringEquals": { 
      "cognito-identity.amazonaws.com:aud": "YOUR-AUD" 
     }, 
     "ForAnyValue:StringLike": { 
      "cognito-identity.amazonaws.com:amr": "graph.facebook.com" 
     } 
     } 
    } 
    ] 
} 

Внутри шлюза API, убедитесь, чтобы установить все ресурсы, которые вы хотите получить доступ по ролям, чтобы я Проверка подлинности политики AM: вы делаете это, выбирая окно запроса метода для вашего желаемого метода. В настройках авторизации вы устанавливаете авторизацию на AWS_IAM и сохраняете ее.

Поскольку у вас есть авторизация IAM, установленная в вашем методе, вы также должны убедиться, что CORS настроен для этого ресурса.Выберите раскрывающееся меню «Действия» и выберите вариант включения CORS. В этом окне просто выберите метод, к которому применяется CORS (на основе того, какие методы у вас установлены для авторизации IAM).

После того, как все будет готово, вы можете развернуть свой API и выбрать нужный SDK. Теперь вы должны установить правильные учетные данные для своего метода, чтобы ваш объект SDK мог подписать ваши запросы с правильными учетными данными.

пример:

var apigClient = apigClientFactory.newClient({ 
        accessKey: AWS.config.credentials.accessKeyId, 
        secretKey: AWS.config.credentials.secretAccessKey, 
        sessionToken: AWS.config.credentials.sessionToken, 
        region: 'YOUR-REGION' 
       }); 

Доступ к этим учетные данные из вашего метода авторизации для Facebook (или любой другой OAuth провайдера, который Вы установили для федеративного счета):

AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
       IdentityPoolId: 'your-pool-id', 
       Logins: { 
        'graph.facebook.com': response.authResponse.accessToken 
       } 
      }); 

В моем случае я использовал этот метод аутентификации FB для доступа к токену Facebook:

FB.getLoginStatus(function (response) { 
}); 

Наконец, вы должны дать вашей роли Cognito идентифицированной правильный IAM политики, чтобы иметь возможность ссылаться на свой API с помощью SDK: Вы можете настроить следующую политику, как вы хотите, чтобы ограничить глубину доступа вашего Authenicated Федеративного Роль имеет свои шлюзовые API ресурсов/методы:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "execute-api:Invoke" 
     ], 
     "Resource": "arn:aws:execute-api:*:*:*" 
    } 
    ] 
} 

когда вы приложите эту политику, ваш SDK сможет успешно сделать запросы к вашему API. Если вы удалите политику, у вас не будет доступа.
Кроме того, если вы удалите изменения в политике доверия (как показано выше), вы также не сможете получить учетные данные идентификации Cognito, и объект для этих учетных данных останется неопределенным.

ОК, мой первый столбец для столбцов. Надеюсь, что это спасет кого-то еще хороший кусок работы в документации AWS.


Теперь, если вы хотите иметь мелкозернистый контроль над тем, кто получает доступ к ресурсу (например, функции Lambda вы используете для доступа к серверному ресурсу) и хотят, чтобы убедиться, что вы имеете право Cognito ID info, чтобы контролировать, как ваша лямбда реагирует на того, кто вызывает эту функцию, вы можете передать учетные данные cognito, необходимые для выполнения метода Api Gateway.
Способ, которым вы это делаете, прост, однако один улов - вы должны убедиться, что ваша роль аутентификации для вашего Cognito дает разрешение на функцию Lambda.

  1. перейдите к «Запросу интеграции» для вашего метода. Установите флажок «Вызовите с учетными данными».

  2. Убедитесь, что установлены CORS и повторно разверните API и SDK. Теперь вы можете перейти к своей роли IAM для пользователя, прошедшего проверку подлинности cognito, и добавить политику, которая позволяет этой роли выполнять функцию Lambda.