

# Amazon Cognito
<a name="identity-idp-cognito"></a>

Amazon Cognito peut être configuré en tant que fournisseur d'identité pour accéder à AgentCore Gateway et Runtime, ou en tant que fournisseur d'identifiants d' AgentCore identité pour l'accès aux ressources sortantes. Cela permet à vos agents d'authentifier et d'autoriser les utilisateurs de l'agent avec Cognito en tant que fournisseur d'identité et serveur d'autorisation, ou à vos agents d'obtenir des informations d'identification pour accéder aux ressources autorisées par Cognito.

## Entrant
<a name="identity-idp-cognito-inbound"></a>

Pour ajouter Cognito en tant que fournisseur d'identité et serveur d'autorisation pour accéder à AgentCore Gateway et Runtime, vous devez :
+ Configurez l'URL de découverte à partir de votre répertoire IDP. Cela permet à AgentCore Identity d'obtenir les métadonnées relatives à votre serveur d'autorisation OAuth et aux clés de vérification des jetons.
+ Entrez un jeton valide `clientId` ou `aud` réclamé. Cela permet de valider les jetons provenant de votre IDP et d'autoriser l'accès aux jetons contenant les réclamations attendues.

Utilisez la procédure suivante pour créer un groupe d'utilisateurs Cognito en tant que fournisseur d'identité entrant pour l'authentification des utilisateurs avec Runtime. AgentCore Les étapes suivantes permettront de créer un groupe d'utilisateurs Cognito, un client de groupe d'utilisateurs, d'ajouter un utilisateur et de générer un jeton porteur pour l'utilisateur. Le jeton est valide pendant 60 minutes par défaut.

 **Pour créer un groupe d'utilisateurs Cognito en tant que fournisseur d'identité entrant pour l'authentification Runtime** 

1. Créez un fichier nommé `setup_cognito.sh` avec le contenu suivant:
**Note**  
Le script suivant n'est fourni qu'à titre d'exemple. Vous devez personnaliser les paramètres du groupe d'utilisateurs et les informations d'identification des utilisateurs en fonction des besoins de votre application. N'utilisez pas ce script directement dans les environnements de production.

   ```
   #!/bin/bash
   
   # Create User Pool and capture Pool ID directly
   export POOL_ID=$(aws cognito-idp create-user-pool \
     --pool-name "MyUserPool" \
     --policies '{"PasswordPolicy":{"MinimumLength":8}}' \
     --region us-east-1 | jq -r '.UserPool.Id')
   
   # Create App Client and capture Client ID directly
   export CLIENT_ID=$(aws cognito-idp create-user-pool-client \
     --user-pool-id $POOL_ID \
     --client-name "MyClient" \
     --no-generate-secret \
     --explicit-auth-flows "ALLOW_USER_PASSWORD_AUTH" "ALLOW_REFRESH_TOKEN_AUTH" \
     --region us-east-1 | jq -r '.UserPoolClient.ClientId')
   
   # Create User
   aws cognito-idp admin-create-user \
     --user-pool-id $POOL_ID \
     --username "testuser" \
     --temporary-password "${temp-password}" \
     --region us-east-1 \
     --message-action SUPPRESS > /dev/null
   
   # Set Permanent Password
   aws cognito-idp admin-set-user-password \
     --user-pool-id $POOL_ID \
     --username "testuser" \
     --password "${permanent-user-password}" \
     --region us-east-1 \
     --permanent > /dev/null
   
   # Authenticate User and capture Access Token
   export BEARER_TOKEN=$(aws cognito-idp initiate-auth \
     --client-id "$CLIENT_ID" \
     --auth-flow USER_PASSWORD_AUTH \
     --auth-parameters USERNAME='testuser',PASSWORD='${permanent-user-password}' \
     --region us-east-1 | jq -r '.AuthenticationResult.AccessToken')
   
   # Output the required values
   echo "Pool id: $POOL_ID"
   echo "Discovery URL: https://cognito-idp.us-east-1.amazonaws.com/$POOL_ID/.well-known/openid-configuration"
   echo "Client ID: $CLIENT_ID"
   echo "Bearer Token: $BEARER_TOKEN"
   ```

1. Exécutez le script pour créer les ressources Cognito :

   ```
   source setup_cognito.sh
   ```

1. Enregistrez les valeurs de sortie, qui ressembleront à :

   ```
   Pool id: us-east-1_poolid
   Discovery URL: https://cognito-idp.us-east-1.amazonaws.com/us-east-1_userpoolid/.well-known/openid-configuration
   Client ID: clientid
   Bearer Token: bearertoken
   ```

   Vous aurez besoin de ces valeurs dans les prochaines étapes.

Utilisez la procédure suivante pour créer un groupe d'utilisateurs Cognito en tant que fournisseur d'identité entrant pour l'authentification de machine à machine avec Gateway. AgentCore Les étapes suivantes créeront un pool d'utilisateurs, un serveur de ressources, des informations d'identification client et une configuration d'URL de découverte. Cette configuration active les flux d'authentification M2M pour l'accès à la passerelle.

 **Pour créer un groupe d'utilisateurs Cognito en tant que fournisseur d'identité entrant pour l'authentification Gateway** 

1. Créez un groupe d'utilisateurs :

   ```
   aws cognito-idp create-user-pool \
     --region us-west-2 \
     --pool-name "gateway-user-pool"
   ```

1. Enregistrez l'ID du groupe d'utilisateurs indiqué dans la réponse ou récupérez-le à l'aide de :

   ```
   aws cognito-idp list-user-pools \
     --region us-west-2 \
     --max-results 60
   ```

1. Créez un serveur de ressources pour le groupe d'utilisateurs :

   ```
   aws cognito-idp create-resource-server \
     --region us-west-2 \
     --user-pool-id <UserPoolId> \
     --identifier "gateway-resource-server" \
     --name "GatewayResourceServer" \
     --scopes '[{"ScopeName":"read","ScopeDescription":"Read access"}, {"ScopeName":"write","ScopeDescription":"Write access"}]'
   ```

1. Créez un client pour le groupe d'utilisateurs :

   ```
   aws cognito-idp create-user-pool-client \
     --region us-west-2 \
     --user-pool-id <UserPoolId> \
     --client-name "gateway-client" \
     --generate-secret \
     --allowed-o-auth-flows client_credentials \
     --allowed-o-auth-scopes "gateway-resource-server/read" "gateway-resource-server/write" \
     --allowed-o-auth-flows-user-pool-client \
     --supported-identity-providers "COGNITO"
   ```

   Enregistrez l'ID client et le secret du client contenus dans la réponse. Vous aurez besoin de ces valeurs pour configurer le fournisseur Cognito dans AgentCore Identity.

1. Si nécessaire, créez un domaine pour votre groupe d'utilisateurs :

   ```
   aws cognito-idp create-user-pool-domain \
     --domain <UserPoolIdWithoutUnderscore> \
     --user-pool-id <UserPoolId> \
     --region us-west-2
   ```
**Note**  
Supprimez tout trait de soulignement `UserPoolId` lors de la création du domaine. Par exemple, si l'ID de votre groupe d'utilisateurs est « US-West-2\_GMsgkkgr9 », utilisez « US-West-2gmsgkkgr9 » comme domaine.

1. Créez l'URL de découverte pour votre groupe d'utilisateurs Cognito :

   ```
   https://cognito-idp.us-west-2.amazonaws.com/<UserPoolId>/.well-known/openid-configuration
   ```

1. Configurez l'authentification entrante de la passerelle avec les valeurs suivantes :

   1.  **URL de découverte** : URL créée à l'étape précédente

   1.  **Clients autorisés** : ID client obtenu lors de la création du client du pool d'utilisateurs

## Sortant
<a name="identity-idp-cognito-outbound"></a>

**Note**  
AgentCore Identity émet une URL de rappel OAuth2 unique pour chaque fournisseur d'informations d'identification que vous créez. L'URL de rappel unique permet la liaison de session, ce qui protège l'échange de code d'autorisation OAuth2 contre les rediffusions et les CSRF-style attaques entre fournisseurs en garantissant qu'une réponse d'autorisation ne peut être échangée que contre le fournisseur d'informations d'identification spécifique qui l'a initiée. Comme l'URL est unique par fournisseur, vous ne le saurez qu'**après avoir** appelé`CreateOauth2CredentialProvider`. Créez d'abord le client de l'application Cognito User Pool, puis retournez sur la console Amazon Cognito pour enregistrer l'URL de rappel AgentCore une fois qu'Identity l'a émise.

 **Étape 1 : Création du client de l'application Cognito User Pool** 

Utilisez la procédure suivante pour configurer un client d'application de groupe d'utilisateurs Cognito pour la fédération OAuth2 sortante. Vous enregistrerez l'URI de redirection à l'étape 3, une fois qu' AgentCore Identity aura émis l'URL de rappel unique.

 **Pour configurer un client d'application de groupe d'utilisateurs Cognito** 

1. Dans la console Amazon Cognito, ouvrez ou créez le groupe d'utilisateurs que vous souhaitez utiliser en tant que fournisseur de ressources sortantes.

1. Configurez un domaine de groupe d'utilisateurs afin que l'interface utilisateur hébergée puisse émettre des codes d'autorisation.

1. Créez un client d'application pour le groupe d'utilisateurs, générez un secret client et activez le flux OAuth2 d'**octroi du code d'autorisation**.

1. Sélectionnez les étendues OAuth2 requises par votre application.

1. Laissez le champ **URL de rappel autorisées** vide pour le moment. Vous ajouterez l'URL de rappel unique à l'étape 3.

1. Enregistrez l'**ID client** et **le secret du client**. Vous aurez besoin de ces valeurs pour configurer le fournisseur Cognito dans AgentCore Identity.

1. Notez le préfixe de domaine et l'ID du groupe d'utilisateurs de votre groupe d'utilisateurs. Vous les utiliserez pour créer les points de terminaison d'autorisation, de jeton et d'émetteur à l'étape 2.

Pour plus de détails, consultez la section [Configurer un client d'application](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-idp-settings.html) dans le manuel Amazon Cognito Developer Guide.

 **Étape 2 : créer le fournisseur AgentCore d'identifiants d'identité** 

Pour configurer les groupes d'utilisateurs de Cognito en tant que fournisseur de ressources sortantes, utilisez la configuration suivante :

```
{
  "name": "Cognito",
  "credentialProviderVendor": "CognitoOauth2",
  "oauth2ProviderConfigInput" : {
    "includedOauth2ProviderConfig": {
      "clientId": "your-client-id",
      "clientSecret": "your-client-secret",
      "authorizationEndpoint": "https://{your-cognito-domain}.auth.us-east-1.amazoncognito.com/oauth2/authorize",
      "tokenEndpoint": "https://{your-cognito-domain}.auth.us-east-1.amazoncognito.com/oauth2/token",
      "issuer": "https://cognito-idp.us-east-1.amazonaws.com/{your-user-pool-id}"
    }
  }
}
```

La [CreateOauth2CredentialProvider](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_CreateOauth2CredentialProvider.html)réponse inclut un `callbackUrl` champ. Cette URL est propre à ce fournisseur d'informations d'identification et ressemble à :`https://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX`. Enregistrez cette valeur pour l'étape suivante.

 **Étape 3 : Enregistrez l'URL de rappel unique avec Cognito** 

Retournez à la console Amazon Cognito et ajoutez l'URL de rappel unique aux rappels autorisés de votre client d'application.

1. Dans la console Amazon Cognito, ouvrez le client d'application du groupe d'utilisateurs que vous avez créé à l'étape 1.

1. Dans la configuration de l'interface utilisateur hébergée du client de l'application, ajoutez la `callbackUrl` valeur renvoyée par `CreateOauth2CredentialProvider` aux **URL de rappel autorisées**.

1. Enregistrez vos modifications.