2 votes

Passerelle API AWS : API disponible uniquement pour les utilisateurs authentifiés et invités

Je suis assez novice en matière d'AWS et j'essaie de comprendre certains concepts de base. Dans mon application Android, j'utilise :

  • Cognito User Pool et Identity Pool pour permettre à mes utilisateurs de s'inscrire et de se connecter, mais aussi d'utiliser l'application en tant que invité utilisateurs
  • API Gateway et AWS Lambda pour créer des services Web que l'application peut appeler.

Mon cas d'utilisation est très simple : Je veux que certaines des API que j'ai créées dans API Gateway soient disponibles pour mes utilisateurs authentifiés. y mes utilisateurs invités, et les autres API disponibles uniquement pour mes utilisateurs authentifiés.

Pour les APIs disponibles uniquement pour mes utilisateurs authentifiés, je pensais mettre les utilisateurs dans un groupe d'utilisateurs (merci à CognitoIdentityServiceProvider.adminAddUserToGroup() ), qui peuvent avoir un rôle commun auquel est attachée une stratégie IAM, pour leur permettre d'accéder à ces API. Je pense que c'est logique puisque je vais avoir différents types d'utilisateurs, donc j'utiliserai un groupe pour chaque type.

Mais pour les API disponibles pour mes utilisateurs authentifiés et mes utilisateurs invités, je ne suis pas tout à fait sûr de ce que je suis censé faire. Les API doivent-elles être publiques, de sorte qu'elles puissent être appelées par n'importe qui, y compris par mes utilisateurs invités, ou est-il possible de les rendre uniquement disponibles pour mes utilisateurs authentifiés et mes utilisateurs invités, mais sans être publiques ? Quelles sont les bonnes pratiques et comment puis-je les mettre en œuvre ?

Merci pour votre aide.

2voto

guzmonne Points 151

Vous devez utiliser "Autorisateurs Lambda de la passerelle API" pour ça. Vous configurez l'authorizer par méthode. Ainsi, seuls les points de terminaison réservés aux utilisateurs authentifiés doivent avoir un ensemble.

Comment fonctionnent-ils ?

Chaque fois qu'une requête atteint un point de terminaison pour lequel un Authorizer est configuré, API Gateway le déclenchera avec la commande request informations. L'auteur vérifie ensuite si le request ont les bonnes références. Si c'est le cas, une politique IAM est renvoyée. L'appel d'exécution de la méthode (une autre fonction Lambda par exemple) consommera cette politique. Sinon, l'autorisateur renvoie un code d'état d'erreur, disons un 403 Access Denied .

Dans votre cas, puisque vous utilisez Cognito, vous pouvez utiliser une Autorisateur de pool d'utilisateurs Cognito . Vous pouvez le créer en utilisant le SDK de Cognito ou AWS cli . Après l'avoir configuré, la seule chose que vous devez faire est d'ajouter le fichier id o access fourni par Cognito après l'authentification d'un utilisateur. Il est généralement servi à l'intérieur de l'objet Authorization en-tête.

J'espère que cela vous aidera.

1voto

thenaoh Points 240

Voici comment j'ai procédé, en utilisant la console :

  1. Dans API Gateway, cliquez sur la ressource, puis sur la méthode (GET, POST...)

  2. Cliquez sur Demande de méthode

  3. Para Autorisation choisissez AWS_IAM

  4. Dans Cognito, choisissez Gérer les pools d'identités

  5. Créez (ou modifiez) le pool d'identité que vous utilisez avec votre pool d'utilisateurs Cognito.

  6. Dans le Identités non authentifiées bloquer, vérifier Permettre l'accès aux identités non authentifiées

  7. Sur la même page (du moins si vous modifiez le pool d'identités), vous devriez également voir l'élément suivant Rôle authentifié y el Rôle non authentifié

  8. Allez dans IAM, et dans Rôles trouver ces deux rôles

  9. Pour chaque rôle, cliquez dessus, et dans la section Permissions cliquez sur la politique attachée à ce rôle pour la visualiser (avec la petite flèche à gauche).

  10. Cliquez sur Politique d'édition puis l'onglet JSON, puis ajoutez le bloc suivant (vous pouvez trouver l'ARN en allant dans API Gateway, cliquez sur votre API, cliquez sur votre ressource, cliquez sur votre méthode : vous trouverez l'ARN dans le champ Demande de méthode bloc) :

    { "Effect": "Allow", "Action": [ "execute-api:Invoke" ], "Resource": "<the_arn_of_your_resource_api>" }

  11. Cliquez sur Politique de révision entonces Sauvegarder les changements

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X