Plusieurs jetons d'accès 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.

Plusieurs jetons d'accès dans CodeBuild

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.

  2. 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.

  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 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.

É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 ou une CodeConnections connexion dans le Gestionnaire de Secrets :

Étape 2 : Accorder aux IAM rôles de CodeBuild 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 IAM rôle de CodeBuild projet à Secrets Manager ou à Secrets Manager CodeConnections, vous devez ajouter la IAM politique suivante.

Pour accorder l'accès aux IAM rôles CodeBuild du projet
  1. Créez un IAM rôle pour votre CodeBuild projet en suivant les instructions correspondant CodeBuild Autoriser l'interaction avec d'autres AWS services à votre CodeBuild projet.

  2. Effectuez l’une des actions suivantes :

    • Ajoutez la IAM politique suivante à votre rôle dans le CodeBuild projet pour autoriser l'accès à votre secret.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "<secret-arn>" ] } ] }

      (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.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "<kms-key-arn>", "Condition": { "StringEquals": { "kms:EncryptionContext:SecretARN": "<secret-arn>" } } } ] }
    • Ajoutez la IAM politique suivante à votre rôle dans le CodeBuild projet pour autoriser l'accès à votre connexion.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codeconnections:GetConnectionToken", "codeconnections:GetConnection" ], "Resource": [ <connection-arn> ] } ] }

Étape 3 : Configuration du Gestionnaire de Secrets Manager 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 les CodeConnections 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.

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

  2. 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.

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

      3. 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, consultezCréez et stockez un jeton dans un secret du Gestionnaire de Secrets.

        • 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.

      2. 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 du ImportSourceCredentialsAPI, 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 de 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 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 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.

  2. 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.

      2. Pour le type d'identifiant, choisissez GitHub App.

      3. 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.

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

  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/amazonlinux2-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

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/amazonlinux2-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 il n'est pas directement configuré pour utiliser une source externe pour récupérer la spécification de construction. 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-helperoption dans le buildspec.

env: git-credential-helper: yes

Pendant 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

Vous pouvez configurer les informations d'identification au niveau du compte Secrets Manager à l'aide AWS CloudFormation de modèles. Vous pouvez utiliser le AWS 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' AWS CloudFormation attribut DependsOnpour 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 AWS CloudFormation de modèles. Vous pouvez utiliser le AWS 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/amazonlinux2-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