

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Commencer à utiliser la fédération des identités sortantes
<a name="id_roles_providers_outbound_getting_started"></a>

Ce guide explique comment activer la fédération d'identité sortante pour votre AWS compte et obtenir votre premier jeton Web JSON (JWT) (à l'aide de l'[GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html)API). Vous allez activer la fonctionnalité, établir une relation de confiance avec un service externe, configurer les autorisations IAM et demander un jeton à l'aide de la AWS CLI ou du AWS SDK pour Python (Boto3).

## Conditions préalables
<a name="outbound-federation-prerequisites"></a>

Avant de commencer, assurez-vous de disposer des éléments suivants :
+ Dernière version de la AWS CLI ou Python 3.8 (ou version ultérieure) et Boto3 installés (pour les exemples de AWS SDK)
+ Un compte de service externe dans lequel vous pouvez configurer des relations de confiance (comme un fournisseur de cloud externe, un fournisseur SaaS ou une application de test)

**Note**  
L'`GetWebIdentityToken`API n'est pas disponible sur le terminal STS Global.
Les jetons Web JSON (JWT) générés par l'`GetWebIdentityToken`API ne peuvent pas être utilisés pour la fédération OpenID Connect (OIDC) vers AWS (via l'API). [ AssumeRoleWithWebIdentity ](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)

## Activez la fédération des identités sortantes pour votre compte
<a name="enable-outbound-federation"></a>

Vous devez activer la fédération des identités sortantes avant de pouvoir demander des jetons. Vous pouvez activer la fonctionnalité à l'aide de la console AWS de gestion ou par programmation à l'aide de l'[EnableOutboundWebIdentityFederation](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableOutboundWebIdentityFederation.html)API.

### Utilisation de AWS INTERFACE DE LIGNE DE COMMANDE (CLI)
<a name="enable-using-cli"></a>

```
aws iam enable-outbound-web-identity-federation
```

### Utilisation AWS SDK pour Python
<a name="enable-using-sdk"></a>

```
import boto3

# Create IAM client
iam_client = boto3.client('iam')

# Enable outbound identity federation
response = iam_client.enable_outbound_web_identity_federation()
print(f"Feature enabled. Issuer URL: {response['IssuerUrl']}")
print(f"Status: {response['Status']}")
```

### Utilisation de AWS Console
<a name="enable-using-console"></a>

Accédez à IAM et sélectionnez Paramètres du ** compte ** dans la ** section Gestion des ** accès du menu de navigation de gauche

![Élément de menu des paramètres du compte mis en évidence dans la navigation de gauche sous la section Gestion des accès.](http://docs.aws.amazon.com/fr_fr/IAM/latest/UserGuide/images/outbound-screen-1.png)


Une fois la fonctionnalité activée, notez l'URL de l'émetteur spécifique à votre compte. Vous utiliserez cette URL lors de la configuration des relations de confiance dans les services externes. Vous pouvez également récupérer l'URL de cet émetteur si nécessaire à l'aide de l'[GetOutboundWebIdentityFederationInfo](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetOutboundWebIdentityFederationInfo.html)API.

![Interface Outbound Identity Federation affichant l'état Activé avec le bouton Désactiver et l'URL de l'émetteur du jeton.](http://docs.aws.amazon.com/fr_fr/IAM/latest/UserGuide/images/outbound-screen-2.png)


## Etablir une relation de confiance dans le service externe
<a name="establish-trust-relationship"></a>

Configurez le service externe pour qu'il approuve et accepte les jetons émis par votre AWS compte. Les étapes spécifiques varient selon le service, mais impliquent généralement :
+ Enregistrement de l'URL de l'émetteur de votre AWS compte en tant que fournisseur d'identité de confiance
+ Configuration des allégations à valider (public, modèles de sujets)
+ Associer les revendications de jetons aux autorisations du service externe

Reportez-vous à la documentation du service externe pour obtenir des instructions de configuration détaillées.

## Configuration des autorisations IAM
<a name="configure-iam-permissions"></a>

Créez une politique IAM qui autorise l'appel à l'[GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html)API et associez la politique à un rôle IAM qui doit générer des jetons.

Cet exemple de politique accorde l'accès à la génération de jetons avec des restrictions spécifiques. Il permet de demander des jetons uniquement pour « https://api.example.com » en tant qu'audience et impose une durée de vie maximale des jetons de 5 minutes (300 secondes). Consultez la [IAM et AWS STS clés de contexte de condition](reference_policies_iam-condition-keys.md) liste des clés de condition que vous pouvez utiliser pour appliquer les propriétés des jetons.

### Exemple de politique IAM
<a name="example-iam-policy"></a>

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:GetWebIdentityToken",
            "Resource": "*",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "sts:IdentityTokenAudience": "https://api.example.com"
                },
                "NumericLessThanEquals": {
                    "sts:DurationSeconds": 300
                }
            }
        }
    ]
}
```

## Demandez votre premier jeton Web JSON (JWT)
<a name="request-first-jwt"></a>

Vous pouvez demander un jeton Web JSON à l'aide de l'[GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html)API. Vous pouvez spécifier les paramètres suivants lorsque vous appelez l'API :
+ **Public (obligatoire) : ** destinataire prévu du jeton. Cette valeur renseigne la valeur « aud » dans le JWT. Les services externes valident cette affirmation pour s'assurer que le jeton leur était destiné.
+ **SigningAlgorithm (obligatoire) : ** algorithme cryptographique utilisé pour signer le jeton. Les valeurs valides sont ES384 et RS256. Utilisez l'ES384 pour une sécurité et des performances optimales, ou le RS256 pour une compatibilité accrue avec les systèmes qui ne prennent pas en charge l'ECDSA.
+ **DurationSeconds (facultatif) : durée ** de vie du jeton en secondes. Les valeurs valides sont comprises entre 60 et 3 600. La valeur par défaut est 300 (5 minutes). Nous recommandons de raccourcir la durée de vie des jetons pour une sécurité accrue.
+ **Tags (facultatif) : liste ** de paires clé-valeur à inclure en tant que revendications personnalisées dans le jeton. Les services externes peuvent utiliser ces allégations pour affiner l'autorisation.

L'API renvoie les champs suivants :
+ **IdentityToken: ** Le JWT signé sous forme de chaîne codée en base64url. Incluez ce jeton dans les demandes adressées à des services externes.
+ **Expiration : ** horodatage UTC de l'expiration du jeton.

### Utilisation de AWS INTERFACE DE LIGNE DE COMMANDE (CLI)
<a name="using-aws-cli"></a>

```
aws sts get-web-identity-token \
    --audience "https://api.example.com" \
    --signing-algorithm ES384 \
    --duration-seconds 300 \
    --tags Key=team,Value=data-engineering \
           Key=environment,Value=production \
           Key=cost-center,Value=analytics
```

### Utilisation AWS SDK pour Python
<a name="using-aws-sdk-python"></a>

```
import boto3

sts_client = boto3.client('sts')

response = sts_client.get_web_identity_token(
    Audience=['https://api.example.com'],
    DurationSeconds=300,
    SigningAlgorithm='RS256',
    Tags=[
        {'Key': 'team', 'Value': 'data-engineering'},
        {'Key': 'environment', 'Value': 'production'},
        {'Key': 'cost-center', 'Value': 'analytics'}
    ]
)

token = response['WebIdentityToken']
```

Vous pouvez également décoder le JWT pour inspecter son contenu à l'aide de bibliothèques JWT standard telles que PyJWT, Python-jose pour Python, Nimbus JOSE\+JWT pour Java ou de débogueurs tels que jwt.io. Reportez-vous à [Comprendre les revendications relatives aux jetons](id_roles_providers_outbound_token_claims.md) pour plus d'informations sur les réclamations incluses dans le jeton.

## Utiliser le jeton avec un service externe
<a name="use-token-with-external-service"></a>

Après avoir reçu le jeton, incluez-le dans les demandes adressées au service externe. La méthode varie selon les services, mais la plupart des services acceptent les jetons dans l'en-tête Authorization. Le service externe doit implémenter une logique de validation des jetons qui extrait les clés JWKS depuis le point de terminaison bien connu de votre émetteur, vérifie la signature du jeton et valide les revendications essentielles avant d'accorder l'accès à vos charges de travail. AWS 

## Récupérez les clés de vérification et les métadonnées depuis les points de terminaison OpenID Connect (OIDC)
<a name="fetch-verification-keys"></a>

L'URL d'émetteur unique de votre AWS compte héberge les points de terminaison de découverte OpenID Connect (OIDC) qui contiennent les clés de vérification et les métadonnées nécessaires à la vérification des jetons.

L'URL du point de terminaison de découverte OIDC contient des métadonnées que certains fournisseurs utilisent pour vérifier les jetons. Il est disponible à l'adresse suivante :

```
{issuer_url}/.well-known/openid-configuration
```

Le point de terminaison JWKS (JSON Web Key Set) contient des clés utilisées pour vérifier les signatures de jetons. Il est disponible à l'adresse suivante :

```
{issuer_url}/.well-known/jwks.json
```

### Récupérez JWKS à l'aide de curl
<a name="fetch-jwks-curl"></a>

```
curl https://{issuer_url}/.well-known/jwks.json
```

Réponse :

```
{
  "keys": [
    {
      "kty": "EC",
      "use": "sig",
      "kid": "key-id-1",
      "alg": "ES384",
      "crv": "P-384",
      "x": "base64-encoded-x-coordinate",
      "y": "base64-encoded-y-coordinate"
    },
    {
      "kty": "RSA",
      "use": "sig",
      "kid": "key-id-2",
      "n": "base64-encoded-modulus",
      "e": "AQAB"
    }
  ]
}
```

### Utilisation AWS SDK pour Python
<a name="fetch-using-sdk"></a>

```
import requests

# Fetch Openid Configuration
open_id_config_response = requests.get("https://{issuer_url}/.well-known/openid-configuration")
open_id_config = open_id_config_response.json()

# Fetch JWKS
jwks_response = requests.get("https://{issuer_url}/.well-known/jwks.json")
jwks = jwks_response.json()
```

Nous vous recommandons de mettre ces clés en cache pour éviter de les récupérer à chaque vérification de jeton.

### Validations essentielles des allégations
<a name="essential-claim-validations"></a>
+ **Objet (sous) : ** vérifiez que l'objet de la réclamation contient le modèle d'ARN principal IAM attendu.
+ **Expiration (exp) : ** assurez-vous que le jeton n'a pas expiré. Les bibliothèques JWT gèrent généralement cela automatiquement.
+ **Audience (aud) : ** vérifiez que l'audience correspond à la valeur attendue. Cela empêche l'utilisation de jetons destinés à d'autres services avec le vôtre.
+ **Émetteur (iss) : ** vérifiez que l'émetteur correspond au ou aux AWS comptes auxquels vous faites confiance. Tenez à jour une liste d'URL d'émetteurs fiables.

Dans la mesure du possible, vous devez valider des déclarations AWS spécifiques supplémentaires afin de mettre en œuvre un contrôle d'accès précis dans votre service externe. Par exemple, validez la revendication org\_id pour restreindre l'accès aux principaux IAM de votre AWS organisation, cochez principal\_tags pour appliquer le contrôle d'accès basé sur les attributs (par exemple, autoriser uniquement les environnements de production ou des équipes spécifiques), ou vérifiez les revendications de contexte de session telles que lambda\_source\_function\_arn ou ec2\_instance\_source\_vpc pour restreindre l'accès en fonction de la ressource de calcul. Reportez-vous à [ la section Comprendre ](id_roles_providers_outbound_token_claims.md) les revendications relatives aux jetons pour obtenir la liste complète des revendications incluses dans le jeton.