View a markdown version of this page

Jetons d'accès multiples dans CodeBuild - AWS CodeBuild

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.

Jetons d'accès multiples dans CodeBuild

CodeBuild prend en charge la fourniture de 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écifié GitHub, tel que 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 sur un projet lorsqu'aucune information d'identification au niveau du projet ou de la source n'est spécifiée.

  2. Informations d'identification au niveau de la source pour un référentiel spécifique : c'est à ce moment qu'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.

  3. 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 définissant un secret ou une connexion dessus. Utilisez-le 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 au niveau du compte par défaut pour votre projet.

Étape 1 : Création d'un secret ou d'une CodeConnections connexion dans le Gestionnaire de secrets

Suivez les instructions suivantes pour créer un secret Secrets Manager ou une CodeConnections connexion :

Étape 2 : accorder au rôle IAM CodeBuild du projet l'accès aux secrets de Secrets Manager

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 ou 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 Permettre d'interagir avec d'autres AWS services à votre CodeBuild projet.

  2. 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 dans le 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 ou CodeConnections des jetons

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 CodeConnections des jetons comme informations d'identification au niveau du compte

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

Console de gestion AWS
Pour configurer une connexion en tant qu'identifiant au niveau du compte dans Console de gestion AWS
  1. Pour le fournisseur source, choisissez Bitbucket ou GitHub Enterprise. GitHub

  2. Pour les informations d'identification, effectuez l'une des opérations suivantes :

    • Choisissez Identifiant source par défaut pour utiliser le code source par défaut de votre compte et l'appliquer à tous les projets.

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

      2. Pour Type d'identification, choisissez un type d'identification.

      3. Si vous le souhaitez CodeConnections, choisissez d'utiliser une connexion existante ou de créer une nouvelle connexion.

        Si vous avez choisi un autre type d'identification, dans Service, choisissez le service que vous souhaitez utiliser pour stocker votre jeton et procédez comme suit :

        • Si vous avez choisi d'utiliser le Gestionnaire de secrets, 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, consultezCréez et stockez un jeton dans un secret de Secrets Manager.

        • 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. Pour un jeton d'API Bitbucket, entrez plutôt l'adresse e-mail et le jeton d'API de votre compte Atlassian.

    • Choisissez Identifiant source personnalisé pour utiliser un identifiant source personnalisé afin de modifier les paramètres par défaut de votre compte.

      1. Pour Type d'identification, choisissez un type d'identification.

      2. Dans Connexion, choisissez d'utiliser une connexion existante ou de créer une nouvelle connexion.

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 de Secrets Manager :

    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 source par défaut au niveau du compte. Lorsque vous importez un identifiant à l'aide de l'ImportSourceCredentialsAPI, le jeton CodeBuild sera utilisé 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, à moins qu'un ensemble d'informations d'identification plus spécifique n'ait é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 et Exécuter AWS CodeBuild les builds manuellement.

Configurer plusieurs jetons comme informations d'identification au niveau de la source

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 démarrez une génération.

Console de gestion AWS
Pour configurer plusieurs jetons comme informations d'identification au niveau de la source dans Console de gestion AWS
  1. Pour Fournisseur source, sélectionnez GitHub.

  2. Pour les informations d'identification, effectuez l'une des opérations suivantes :

    • Choisissez Identifiant source par défaut pour utiliser le code source par défaut de votre compte et l'appliquer à tous les projets.

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

      2. Pour Type d'identification, choisissez GitHub App.

      3. Dans Connexion, choisissez d'utiliser une connexion existante ou de créer une nouvelle connexion.

    • Choisissez Identifiant source personnalisé pour utiliser un identifiant source personnalisé afin de modifier les paramètres par défaut de votre compte.

      1. Pour Type d'identification, choisissez GitHub App.

      2. Dans Connexion, choisissez d'utiliser une connexion existante ou de créer une nouvelle connexion.

  3. 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éfinir une solution de rechange pour les informations d'identification de la source au niveau du projet

Pour configurer le remplacement des informations d'identification de la source au niveau du projet, utilisez-les NO_SOURCE pour la 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'utilisationNO_SOURCE, une spécification de construction est généralement fournie dans le modèle source car elle n'est pas directement configurée pour utiliser une source externe pour récupérer la spécification de construction. Créer une référence de spécification pour CodeBuild Généralement, une NO_SOURCE source gère le clonage de tous les référentiels pertinents à partir de la spécification de construction. Pour vous assurer que les informations d'identification configurées sont disponibles pour ces opérations, vous pouvez activer l'git-credential-helperoption dans le buildspec.

env: git-credential-helper: yes

Au cours de la compilation, il CodeBuild lira ensuite le AuthServer champ 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

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 des informations d'identification 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 pour vous assurer qu'AccountCredentialil 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