

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.

# Plusieurs jetons d'accès dans CodeBuild
<a name="multiple-access-tokens"></a>

CodeBuild permet de fournir des jetons d'accès à des fournisseurs tiers à partir de vos secrets dans AWS Secrets Manager ou via AWS CodeConnections des connexions. Vous pouvez définir votre secret ou votre connexion comme identifiant par défaut pour les interactions avec un fournisseur tiers spécifique tel que GitHub GitHub Enterprise ou Bitbucket.

Vous pouvez définir vos informations d'identification source à trois niveaux différents :

1. **Informations d'identification au niveau du compte pour tous les projets :** il s'agit des informations d'identification par défaut pour tous les projets d'un AWS compte. Ils seront utilisés dans un projet lorsqu'aucune information d'identification au niveau du projet ou de la source n'est spécifiée.

1. **Informations d'identification au niveau de la source pour un référentiel spécifique :** cela se produit lorsqu'un secret ou une CodeConnections connexion Secrets Manager est défini sur une source de projet. Ces informations d'identification ne seront utilisées que pour les opérations sur le référentiel source spécifié. Cela vous permet de configurer plusieurs jetons d'accès avec des étendues d'autorisation différentes dans le même projet, sans utiliser les informations d'identification par défaut au niveau du compte.

1. **Informations d'identification de secours au niveau du projet :** vous pouvez définir des informations d'identification de secours au niveau du projet en l'utilisant `NO_SOURCE` comme type de source principale et en y définissant un secret ou une connexion. Cela peut être utilisé lorsque vous avez plusieurs sources sur un projet, mais que vous souhaitez utiliser les mêmes informations d'identification pour celles-ci, ou lorsque vous ne souhaitez pas utiliser les informations d'identification par défaut au niveau du compte pour votre projet.

**Topics**
+ [

## Étape 1 : Création d'un secret ou d'une CodeConnections connexion dans le Gestionnaire de Secrets
](#create-secret-connection)
+ [

## Étape 2 : Accorder au rôle IAM CodeBuild du projet l'accès aux secrets de Secrets Manager
](#asm-role-access)
+ [

## Étape 3 : Configuration du Gestionnaire de Secrets Manager ou CodeConnections des jetons
](#asm-account-credential)
+ [

## Options de configuration supplémentaires
](#asm-credential-cfn)

## Étape 1 : Création d'un secret ou d'une CodeConnections connexion dans le Gestionnaire de Secrets
<a name="create-secret-connection"></a>

Suivez les instructions suivantes pour créer un secret ou une CodeConnections connexion dans le Gestionnaire de Secrets :
+ [Créez et stockez un jeton dans un secret du Gestionnaire de Secrets](asm-create-secret.md).
+ [Créez une connexion avec GitHub](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-github.html)
+ [Création d'une connexion à GitHub Enterprise Server](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-gheserver.html)
+ [Création d'une connexion à Bitbucket](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-bitbucket.html)

## Étape 2 : Accorder au rôle IAM CodeBuild du projet l'accès aux secrets de Secrets Manager
<a name="asm-role-access"></a>

**Note**  
Avant de continuer, vous devez avoir accès au jeton créé dans Secrets Manager ou CodeConnections.

Pour accorder l'accès au rôle IAM du CodeBuild projet à Secrets Manager CodeConnections, vous devez ajouter la politique IAM suivante.

**Pour accorder l'accès CodeBuild au rôle IAM du projet**

1. Créez un rôle IAM pour votre CodeBuild projet en suivant les instructions correspondant [CodeBuild Autoriser l'interaction avec d'autres AWS services](setting-up-service-role.md) à votre CodeBuild projet.

1. Effectuez l’une des actions suivantes :
   + Ajoutez la politique IAM suivante à votre rôle dans le CodeBuild projet pour autoriser l'accès à votre secret.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "secretsmanager:GetSecretValue"
                 ],
                 "Resource": [
                     "arn:aws:iam::*:role/Service*"
                 ]
             }
         ]
     }
     ```

------

     (Facultatif) Si vous utilisez des clés gérées par le AWS KMS client pour chiffrer un secret de Secrets Manager, vous pouvez ajouter la déclaration de politique suivante pour autoriser l'accès.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "kms:Decrypt"
                 ],
                 "Resource": "arn:aws:iam::*:role/Service*",
                 "Condition": {
                     "StringEquals": {
                         "kms:EncryptionContext:SecretARN": "arn:aws:iam::*:role/Service*"
                     }
                 }
             }
         ]
     }
     ```

------
   + Ajoutez la politique IAM suivante à votre rôle de CodeBuild projet pour autoriser l'accès à votre connexion.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "codeconnections:GetConnectionToken",
                     "codeconnections:GetConnection"
                 ],
                 "Resource": [
                     "arn:aws:iam::*:role/Service*"
                 ]
             }
         ]
     }
     ```

------

## Étape 3 : Configuration du Gestionnaire de Secrets Manager ou CodeConnections des jetons
<a name="asm-account-credential"></a>

Vous pouvez définir vos informations d'identification source à trois niveaux différents à l'aide de Secrets Manager ou de CodeConnections jetons.

### Configurer Secrets Manager ou les CodeConnections jetons comme informations d'identification au niveau du compte
<a name="asm-account-credential"></a>

Vous pouvez configurer un secret ou une CodeConnections connexion Secrets Manager comme identifiant au niveau du compte et l'utiliser dans un projet.

------
#### [ AWS Management Console ]

**Pour configurer une connexion en tant qu'identifiant au niveau du compte dans AWS Management Console**

1. Dans le **champ Source provider**, choisissez **Bitbucket** ou **GitHub Enterprise**. **GitHub** 

1. Pour **Credential**, effectuez l'une des opérations suivantes :
   + Choisissez **Informations d'identification source par défaut** pour utiliser les informations d'identification source par défaut de votre compte pour les appliquer à tous les projets.

     1. Si vous n'êtes pas connecté à votre fournisseur de source, choisissez **Gérer les informations d'identification de source par défaut**.

     1. Pour le **type d'identification**, choisissez un type d'identification.

     1. Si vous le souhaitez **CodeConnections**, choisissez d'utiliser une connexion existante ou d'en créer une nouvelle.

        Si vous avez choisi un autre type d'identifiant, dans **Service**, choisissez le service que vous souhaitez utiliser pour stocker votre jeton et procédez comme suit :
        + Si vous avez choisi d'utiliser **Secrets Manager**, vous pouvez choisir d'utiliser une connexion secrète existante ou de créer un nouveau secret et choisir **Enregistrer**. Pour plus d'informations sur la création d'un nouveau secret, consultez[Créez et stockez un jeton dans un secret du Gestionnaire de Secrets](asm-create-secret.md).
        + Si vous avez choisi de l'utiliser **CodeBuild**, entrez votre jeton ou votre nom d'utilisateur et le mot de passe de l'application, puis choisissez **Enregistrer**.
   + Choisissez **Identifiant source personnalisé pour utiliser un identifiant** source personnalisé afin de remplacer les paramètres par défaut de votre compte.

     1. Pour le **type d'identification**, choisissez un type d'identification.

     1. Dans **Connexion**, choisissez d'utiliser une connexion existante ou d'en créer une nouvelle.

------
#### [ AWS CLI ]

**Pour configurer une connexion en tant qu'identifiant au niveau du compte dans AWS CLI**
+ Ouvrez une invite de terminal (Linux, macOS ou Unix) ou de commande (Windows). Utilisez le AWS CLI pour exécuter la **import-source-credentials** commande.

  Utilisez la commande suivante pour configurer un secret du Gestionnaire de Secrets :

  ```
  aws codebuild import-source-credentials \
      --token "<secret-arn>" \
      --server-type <source-provider> \
      --auth-type SECRETS_MANAGER \
      --region <aws-region>
  ```

  Utilisez la commande suivante pour configurer une CodeConnections connexion :

  ```
  aws codebuild import-source-credentials \
      --token "<connection-arn>" \
      --server-type <source-provider> \
      --auth-type CODECONNECTIONS \
      --region <aws-region>
  ```

  Cette commande vous permet d'importer un jeton comme identifiant de source par défaut au niveau du compte. Lorsque vous importez un identifiant à l'aide de l'[ImportSourceCredentials](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ImportSourceCredentials.html)API, vous CodeBuild utiliserez le jeton pour toutes les interactions avec le fournisseur source, telles que les webhooks, les rapports sur l'état des builds et les opérations de clonage git, sauf si un ensemble d'informations d'identification plus spécifique a été configuré dans le projet.

------

Vous pouvez désormais utiliser le jeton dans votre projet de build et l'exécuter. Pour plus d’informations, consultez [Créez un projet de construction dans AWS CodeBuild](create-project.md) et [Exécuter AWS CodeBuild les builds manuellement](run-build.md).

### Configurer plusieurs jetons comme informations d'identification au niveau de la source
<a name="asm-source-credential"></a>

Pour utiliser les secrets ou les CodeConnections connexions de Secrets Manager comme informations d'identification au niveau de la source, référencez directement le jeton dans le CodeBuild projet et lancez une compilation.

------
#### [ AWS Management Console ]

**Pour configurer plusieurs jetons comme informations d'identification au niveau de la source dans AWS Management Console**

1. Dans le **champ Source provider**, sélectionnez **GitHub**. 

1. Pour **Credential**, effectuez l'une des opérations suivantes :
   + Choisissez **Informations d'identification source par défaut** pour utiliser les informations d'identification source par défaut de votre compte pour les appliquer à tous les projets.

     1. Si vous n'êtes pas connecté à GitHub, choisissez **Gérer les informations d'identification de source par défaut**.

     1. Pour le **type d'identifiant**, choisissez **GitHub App**.

     1. Dans **Connexion**, choisissez d'utiliser une connexion existante ou d'en créer une nouvelle.
   + Choisissez **Identifiant source personnalisé pour utiliser un identifiant** source personnalisé afin de remplacer les paramètres par défaut de votre compte.

     1. Pour le **type d'identifiant**, choisissez **GitHub App**.

     1. Dans **Connexion**, choisissez d'utiliser une connexion existante ou d'en créer une nouvelle.

1. Choisissez **Ajouter une source** et répétez le processus de sélection de votre fournisseur source et de vos informations d'identification.

------
#### [ AWS CLI ]

**Pour configurer plusieurs jetons comme informations d'identification au niveau de la source dans AWS CLI**
+ Ouvrez une invite de terminal (Linux, macOS ou Unix) ou de commande (Windows). Utilisez le AWS CLI pour exécuter la **create-project** commande.

  Utilisez la commande suivante :

  ```
  aws codebuild create-project --region <aws-region> \
      --name <project-name> \
      --artifacts type=NO_ARTIFACTS \
      --environment "type=LINUX_CONTAINER,
                     computeType=BUILD_GENERAL1_SMALL,
                     image=aws/codebuild/amazonlinux-x86_64-standard:5.0" \
      --service-role <service-role-name> \
      --source "type=GITHUB,
                location=<github-repository-1>,
                auth={type=SECRETS_MANAGER,resource=<secret-or-connection-arn-1>}" \
      --secondary-sources "type=GITHUB,
                location=<github-repository-2>,
                auth={type=SECRETS_MANAGER,resource=<secret-or-connection-arn-2>},
                sourceIdentifier=secondary"
  
  aws codebuild start-build --region <aws-region> --project-name <project-name>
  ```

------

### Définissez une solution de secours pour les informations d'identification source au niveau du projet
<a name="asm-project-credential"></a>

Pour configurer le remplacement des informations d'identification de source au niveau du projet, utilisez-le `NO_SOURCE` comme source principale de votre projet et référencez le jeton.

```
aws codebuild create-project \
    --name <project-name> \
    --service-role <service-role-name> \
    --artifacts type=NO_ARTIFACTS \
    --environment "type=LINUX_CONTAINER,
                   computeType=BUILD_GENERAL1_SMALL,
                   image=aws/codebuild/amazonlinux-x86_64-standard:5.0" \
    --service-role <service-role-name> \
    --source "type=NO_SOURCE,
              auth={type=SECRETS_MANAGER,resource=<secret-or-connection-arn>},
              buildspec=<buildspec>"
    --secondary-sources "type=GITHUB,
                         location=<github-repository>,
                         sourceIdentifier=secondary"

aws codebuild start-build --region <aws-region> --project-name <project_name>
```

[Lors de l'utilisation`NO_SOURCE`, une spécification de construction est généralement fournie dans le modèle source car il n'est pas directement configuré pour utiliser une source externe pour récupérer la spécification de construction.](build-spec-ref.md) Généralement, une `NO_SOURCE` source gère le clonage de tous les référentiels pertinents depuis le buildspec. Pour vous assurer que les informations d'identification configurées sont disponibles pour ces opérations, vous pouvez activer l'`git-credential-helper`option dans le buildspec.

```
env:
  git-credential-helper: yes
```

Au cours de la construction, il CodeBuild lira ensuite le `AuthServer` champ à partir du jeton configuré et utilisera les informations d'identification du jeton pour toutes les requêtes git adressées à ce fournisseur de source tiers en particulier.

## Options de configuration supplémentaires
<a name="asm-credential-cfn"></a>

Vous pouvez configurer les informations d'identification au niveau du compte Secrets Manager à l'aide CloudFormation de modèles. Vous pouvez utiliser le CloudFormation modèle suivant pour définir un identifiant au niveau du compte :

```
Parameters:
  GitHubToken:
    Type: String
    NoEcho: true
    Default: placeholder
Resources:
  CodeBuildAuthTokenSecret:
    Type: AWS::SecretsManager::Secret
    Properties:
      Description: CodeBuild auth token
      Name: codebuild-auth-token
      SecretString:
        !Join
          - ''
          - - '{"ServerType":"GITHUB","AuthType":"PERSONAL_ACCESS_TOKEN","Token":"'
            - !Ref GitHubToken
            - '"}'
      Tags:
        - Key: codebuild:source:provider
          Value: github
        - Key: codebuild:source:type
          Value: personal_access_token
  CodeBuildSecretsManagerAccountCredential:
    Type: AWS::CodeBuild::SourceCredential
    Properties:
      ServerType: GITHUB
      AuthType: SECRETS_MANAGER
      Token: !Ref CodeBuildAuthTokenSecret
```

**Note**  
Si vous créez également un projet dans la même pile, utilisez l' CloudFormation attribut [DependsOn](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html)pour vous assurer qu'`AccountCredential`il est créé avant le projet.

Vous pouvez également configurer plusieurs informations d'identification au niveau de la source de Secrets Manager à l'aide CloudFormation de modèles. Vous pouvez utiliser le CloudFormation modèle suivant pour utiliser plusieurs jetons afin d'extraire plusieurs sources :

```
Parameters:
  GitHubTokenOne:
    Type: String
    NoEcho: true
    Default: placeholder
  GitHubTokenTwo:
    Type: String
    NoEcho: true
    Default: placeholder

Resources:
  CodeBuildSecretsManagerProject:
    Type: AWS::CodeBuild::Project
    Properties:
      Name: codebuild-multitoken-example
      ServiceRole: <service-role>
      Environment:
        Type: LINUX_CONTAINER
        ComputeType: BUILD_GENERAL1_SMALL
        Image: aws/codebuild/amazonlinux-x86_64-standard:5.0
      Source:
        Type: GITHUB
        Location: <github-repository-one>
        Auth:
          Type: SECRETS_MANAGER
          Resource: !Ref CodeBuildAuthTokenSecretOne
      SecondarySources:
        - Type: GITHUB
          Location: <github-repository-two>
          Auth:
            Type: SECRETS_MANAGER
            Resource: !Ref CodeBuildAuthTokenSecretTwo
          SourceIdentifier: secondary
      Artifacts:
        Type: NO_ARTIFACTS
      LogsConfig:
        CloudWatchLogs:
          Status: ENABLED
  CodeBuildProjectIAMRoleSecretAccess:
    Type: AWS::IAM::RolePolicy
    Properties:
      RoleName: <role-name>
      PolicyName: CodeBuildProjectIAMRoleSecretAccessPolicy
      PolicyDocument:
        Version: '2012-10-17		 	 	 '
        Statement:
          - Effect: Allow
            Action:
              - secretsmanager:GetSecretValue
            Resource:
              - !Ref CodeBuildAuthTokenSecretOne
              - !Ref CodeBuildAuthTokenSecretTwo
  CodeBuildAuthTokenSecretOne:
    Type: AWS::SecretsManager::Secret
    Properties:
      Description: CodeBuild auth token one
      Name: codebuild-auth-token-one
      SecretString:
        !Join
          - ''
          - - '{"ServerType":"GITHUB","AuthType":"PERSONAL_ACCESS_TOKEN","Token":"'
            - !Ref GitHubTokenOne
            - '"}'
      Tags:
        - Key: codebuild:source:provider
          Value: github
        - Key: codebuild:source:type
          Value: personal_access_token
  CodeBuildAuthTokenSecretTwo:
    Type: AWS::SecretsManager::Secret
    Properties:
      Description: CodeBuild auth token two
      Name: codebuild-auth-token-two
      SecretString:
        !Join
          - ''
          - - '{"ServerType":"GITHUB","AuthType":"PERSONAL_ACCESS_TOKEN","Token":"'
            - !Ref GitHubTokenTwo
            - '"}'
      Tags:
        - Key: codebuild:source:provider
          Value: github
        - Key: codebuild:source:type
          Value: personal_access_token
```