Token di accesso multiplo in CodeBuild - AWS CodeBuild

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Token di accesso multiplo in CodeBuild

CodeBuild supporta l'approvvigionamento di token di accesso a fornitori terzi dai tuoi segreti all'interno AWS Secrets Manager o tramite connessioni. AWS CodeConnections Puoi impostare il tuo segreto o la tua connessione come credenziale predefinita per le interazioni con un provider di terze parti specificato come GitHub Enterprise o GitHub Bitbucket.

Puoi impostare le tue credenziali di origine su tre diversi livelli:

  1. Credenziali a livello di account per tutti i progetti: si tratta di credenziali predefinite per tutti i progetti di un account. AWS Verranno utilizzate su un progetto quando non vengono specificate credenziali a livello di progetto o di origine.

  2. Credenziali a livello di origine per un repository specifico: si tratta di quando viene definito un segreto o una CodeConnections connessione di Secrets Manager su un'origine del progetto. Queste credenziali verranno utilizzate solo per le operazioni sull'archivio di origine specificato. Ciò consente di configurare più token di accesso con diversi ambiti di autorizzazione nello stesso progetto e di non utilizzare le credenziali predefinite a livello di account.

  3. Credenziali di fallback a livello di progetto: è possibile impostare una credenziale di fallback a livello di progetto utilizzandola NO_SOURCE come tipo di fonte principale e definire un segreto o una connessione su di essa. È possibile utilizzarla quando si dispone di più fonti su un progetto, ma si desidera utilizzare le stesse credenziali per esse o quando non si desidera utilizzare le credenziali predefinite a livello di account per il progetto.

Passaggio 1: Creare un segreto o una CodeConnections connessione di Secrets Manager

Usa le seguenti istruzioni per creare un segreto o una CodeConnections connessione di Secrets Manager:

Fase 2: concedere l'accesso ai segreti di Secrets Manager per i IAM ruoli del CodeBuild progetto

Nota

Prima di continuare, devi avere accesso al token creato in Secrets Manager o CodeConnections.

Per concedere l'accesso al IAM ruolo di CodeBuild progetto a Secrets Manager or CodeConnections, è necessario aggiungere la seguente IAM politica.

Per concedere l'accesso ai IAM ruoli CodeBuild del progetto
  1. Crea un IAM ruolo per il tuo CodeBuild progetto seguendo le istruzioni Consentono CodeBuild di interagire con altri AWS servizi per il tuo CodeBuild progetto.

  2. Esegui una di queste operazioni:

    • Aggiungi la seguente IAM politica al tuo ruolo di CodeBuild progetto per concedere l'accesso al tuo segreto.

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

      (Facoltativo) Se utilizzi chiavi gestite AWS KMS dal cliente per crittografare un segreto di Secrets Manager, puoi aggiungere la seguente dichiarazione di policy per concedere l'accesso.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "<kms-key-arn>", "Condition": { "StringEquals": { "kms:EncryptionContext:SecretARN": "<secret-arn>" } } } ] }
    • Aggiungi la seguente IAM politica al tuo ruolo di CodeBuild progetto per concedere l'accesso alla tua connessione.

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

Fase 3: Configurare Secrets Manager o i CodeConnections token

Puoi impostare le tue credenziali di origine su tre diversi livelli con Secrets Manager o CodeConnections token.

Configura Secrets Manager o i CodeConnections token come credenziali a livello di account

È possibile configurare un segreto o una CodeConnections connessione di Secrets Manager come credenziale a livello di account e utilizzarla in un progetto.

AWS Management Console
Per configurare una connessione come credenziale a livello di account in AWS Management Console
  1. Come provider di origine, scegli Bitbucket o Enterprise GitHub. GitHub

  2. Per Credential, esegui una delle seguenti operazioni:

    • Scegli Credenziale di origine predefinita per utilizzare la credenziale di origine predefinita del tuo account da applicare a tutti i progetti.

      1. Se non sei connesso al tuo provider di origine, scegli Gestisci credenziali di origine predefinite.

      2. Per Tipo di credenziale, scegli un tipo di credenziale.

      3. Se lo desideri CodeConnections, scegli di utilizzare una connessione esistente o crearne una nuova.

        Se hai scelto un tipo di credenziale diverso, per Servizio scegli il servizio che desideri utilizzare per archiviare il token e procedi come segue:

        • Se hai scelto di utilizzare Secrets Manager, puoi scegliere di utilizzare una connessione segreta esistente o creare una nuova segreta e scegliere Salva. Per ulteriori informazioni su come creare un nuovo segreto, consultaCrea e archivia un token in un segreto di Secrets Manager.

        • Se hai scelto di utilizzarlo CodeBuild, inserisci il token o il nome utente e la password dell'app e scegli Salva.

    • Scegli Credenziale di origine personalizzata per utilizzare una credenziale di origine personalizzata per sovrascrivere le impostazioni predefinite del tuo account.

      1. Per Tipo di credenziale, scegli un tipo di credenziale.

      2. In Connessione, scegli di utilizzare una connessione esistente o crearne una nuova.

AWS CLI
Per configurare una connessione come credenziale a livello di account in AWS CLI
  • Apri un terminale (Linux, macOS o Unix) o prompt dei comandi (Windows). Utilizzare il AWS CLI per eseguire il import-source-credentials comando.

    Usa il seguente comando per configurare un segreto di Secrets Manager:

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

    Utilizzate il seguente comando per configurare una CodeConnections connessione:

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

    Questo comando consente di importare un token come credenziali di origine predefinite a livello di account. Quando importi una credenziale utilizzando il ImportSourceCredentialsAPI, CodeBuild utilizzerà il token per tutte le interazioni con il provider di origine, come webhook, build status reporting e operazioni git clone, a meno che nel progetto non sia stato configurato un set di credenziali più specifico.

Ora puoi usare il token nel tuo progetto di build ed eseguirlo. Per ulteriori informazioni, consulta Crea un progetto di compilazione in AWS CodeBuild e Esegui AWS CodeBuild le build manualmente.

Configura più token come credenziali a livello di origine

Per utilizzare i segreti o CodeConnections le connessioni di Secrets Manager come credenziali a livello di origine, fai riferimento direttamente al token nel CodeBuild progetto e avvia una build.

AWS Management Console
Per configurare più token come credenziali a livello di origine in AWS Management Console
  1. Per Provider di origine, scegli. GitHub

  2. Per Credential, effettuate una delle seguenti operazioni:

    • Scegli Credenziale di origine predefinita per utilizzare la credenziale di origine predefinita del tuo account da applicare a tutti i progetti.

      1. Se non sei connesso a GitHub, scegli Gestisci credenziali di origine predefinite.

      2. Per il tipo di credenziale, scegli GitHub App.

      3. In Connessione, scegli di utilizzare una connessione esistente o crearne una nuova.

    • Scegli Credenziale di origine personalizzata per utilizzare una credenziale di origine personalizzata per sovrascrivere le impostazioni predefinite del tuo account.

      1. Per Tipo di credenziale, scegli App. GitHub

      2. In Connessione, scegli di utilizzare una connessione esistente o crearne una nuova.

  3. Scegli Aggiungi fonte e ripeti la procedura di scelta del provider di origine e delle credenziali.

AWS CLI
Per configurare più token come credenziali a livello di origine in AWS CLI
  • Apri un terminale (Linux, macOS o Unix) o prompt dei comandi (Windows). Utilizzare il AWS CLI per eseguire il comando. create-project

    Utilizza il seguente comando:

    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>

Imposta un fallback delle credenziali di origine a livello di progetto

Per impostare il fallback delle credenziali di origine a livello di progetto, utilizzalo NO_SOURCE come fonte principale del progetto e fai riferimento al token.

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>

Quando si utilizzaNO_SOURCE, una buildspec viene in genere fornita all'interno del modello sorgente in quanto non è configurata direttamente per utilizzare una fonte esterna per recuperare la buildspec. Comunemente, una NO_SOURCE fonte gestirà la clonazione di tutti i repository pertinenti dall'interno di buildspec. Per garantire che le credenziali configurate siano disponibili per tali operazioni, puoi abilitare l'opzione nel buildspec. git-credential-helper

env: git-credential-helper: yes

Durante la compilazione, CodeBuild leggerà quindi il AuthServer campo dal token configurato e utilizzerà le credenziali del token per tutte le richieste git a quel particolare fornitore di sorgenti terzo.

Opzioni di configurazione aggiuntive

È possibile configurare le credenziali a livello di account di Secrets Manager utilizzando AWS CloudFormation modelli. È possibile utilizzare il seguente AWS CloudFormation modello per impostare una credenziale a livello di account:

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
Nota

Se stai anche creando un progetto nello stesso stack, usa l' AWS CloudFormation DependsOnattributo per assicurarti che AccountCredential venga creato prima del progetto.

È inoltre possibile configurare credenziali multiple a livello di origine di Secrets Manager utilizzando AWS CloudFormation modelli. È possibile utilizzare il seguente AWS CloudFormation modello per utilizzare più token per accedere a più fonti:

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