

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
<a name="multiple-access-tokens"></a>

CodeBuild supporta l'approvvigionamento di token di accesso a fornitori terzi dai tuoi segreti all'interno Gestione dei segreti AWS 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.

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

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

**Topics**
+ [Passaggio 1: Creare un segreto o una CodeConnections connessione di Secrets Manager](#create-secret-connection)
+ [Fase 2: concedere al ruolo IAM CodeBuild del progetto l'accesso ai segreti di Secrets Manager](#asm-role-access)
+ [Fase 3: Configurare Secrets Manager o i CodeConnections token](#asm-account-credential)
+ [Opzioni di configurazione aggiuntive](#asm-credential-cfn)

## Passaggio 1: Creare un segreto o una CodeConnections connessione di Secrets Manager
<a name="create-secret-connection"></a>

Usa le seguenti istruzioni per creare un segreto o una CodeConnections connessione di Secrets Manager:
+ [Crea e archivia un token in un segreto di Secrets Manager](asm-create-secret.md).
+ [Crea una connessione a GitHub](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-github.html)
+ [Creare una connessione a GitHub Enterprise Server](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-gheserver.html)
+ [Crea una connessione a Bitbucket](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-bitbucket.html)

## Fase 2: concedere al ruolo IAM CodeBuild del progetto l'accesso ai segreti di Secrets Manager
<a name="asm-role-access"></a>

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

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

**Per concedere l'accesso al ruolo IAM del CodeBuild progetto**

1. Crea un ruolo IAM per il tuo CodeBuild progetto seguendo le istruzioni [Consenti CodeBuild di interagire con altri servizi AWS](setting-up-service-role.md) relative al tuo CodeBuild progetto.

1. Esegui una delle seguenti operazioni:
   + Aggiungi la seguente policy IAM al tuo ruolo di CodeBuild progetto per concedere l'accesso al tuo segreto.

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

****  

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

------

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

------
#### [ 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*"
                     }
                 }
             }
         ]
     }
     ```

------
   + Aggiungi la seguente policy IAM al tuo ruolo di CodeBuild progetto per concedere l'accesso alla tua connessione.

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

****  

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

------

## Fase 3: Configurare Secrets Manager o i CodeConnections token
<a name="asm-account-credential"></a>

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
<a name="asm-account-credential"></a>

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

------
#### [ Console di gestione AWS ]

**Per configurare una connessione come credenziale a livello di account in Console di gestione AWS**

1. **Come **provider di origine**, scegli **Bitbucket o Enterprise **GitHub****. GitHub ** 

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

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

     1. 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 crearne una nuova e scegliere **Salva**. Per ulteriori informazioni su come creare un nuovo segreto, consulta[Crea e archivia un token in un segreto di Secrets Manager](asm-create-secret.md).
        + 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.

     1. 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 l'[ImportSourceCredentials](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ImportSourceCredentials.html)API, 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, consultare [Crea un progetto di compilazione in AWS CodeBuild](create-project.md) e [Esegui AWS CodeBuild le build manualmente](run-build.md).

### Configura più token come credenziali a livello di origine
<a name="asm-source-credential"></a>

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.

------
#### [ Console di gestione AWS ]

**Per configurare più token come credenziali a livello di origine in Console di gestione AWS**

1. Per **Provider di origine**, scegli. **GitHub** 

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

     1. **Per il **tipo di credenziale**, scegli GitHub App.**

     1. 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 sostituire le impostazioni predefinite del tuo account.

     1. **Per **Tipo di credenziale**, scegli App. GitHub **

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

1. 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/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>
  ```

------

### Imposta un fallback delle credenziali di origine a livello di progetto
<a name="asm-project-credential"></a>

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

[Quando si utilizza`NO_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.](build-spec-ref.md) 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
<a name="asm-credential-cfn"></a>

È possibile configurare le credenziali a livello di account di Secrets Manager utilizzando CloudFormation modelli. È possibile utilizzare il seguente 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' CloudFormation [DependsOn](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html)attributo per assicurarti che `AccountCredential` venga creato prima del progetto.

È inoltre possibile configurare credenziali multiple a livello di origine di Secrets Manager utilizzando CloudFormation modelli. È possibile utilizzare il seguente 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/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
```