

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tokens de acceso múltiple en CodeBuild
<a name="multiple-access-tokens"></a>

CodeBuild admite el suministro de tokens de acceso a proveedores externos a partir de sus datos secretos en AWS CodeConnections las conexiones AWS Secrets Manager o a través de ellas. Puedes configurar tu secreto o conexión como la credencial predeterminada para las interacciones con un proveedor externo específico GitHub, como GitHub Enterprise o Bitbucket.

Puede establecer las credenciales de origen en tres niveles distintos:

1. **Credenciales de cuenta para todos los proyectos:** son las credenciales predeterminadas para todos los proyectos de una cuenta de AWS . Se usarán en un proyecto cuando no se especifique ninguna credencial de origen o proyecto.

1. **Credenciales a nivel de fuente para un repositorio específico:** es cuando se define un secreto o una CodeConnections conexión de Secrets Manager en una fuente de proyecto. Estas credenciales solo se utilizarán para las operaciones en el repositorio de origen especificado. Esto le permite configurar varios tokens de acceso con distintos ámbitos de permiso en el mismo proyecto y no utilizar las credenciales de cuenta predeterminadas.

1. **Credenciales alternativas de proyecto:** puede establecer una credencial alternativa de proyecto si usa `NO_SOURCE` como tipo de origen principal y define un secreto o una conexión en este. Se puede usar cuando tiene varios orígenes en un proyecto pero quiere utilizar las mismas credenciales para todos, o bien cuando no quiere usar las credenciales de cuenta predeterminadas para su proyecto.

**Topics**
+ [

## Paso 1: Crear un secreto de Secrets Manager o una CodeConnections conexión
](#create-secret-connection)
+ [

## Paso 2: Otorgar acceso al rol de IAM CodeBuild del proyecto a los secretos de Secrets Manager
](#asm-role-access)
+ [

## Paso 3: Configurar Secrets Manager o CodeConnections los tokens
](#asm-account-credential)
+ [

## Opciones de configuración adicionales
](#asm-credential-cfn)

## Paso 1: Crear un secreto de Secrets Manager o una CodeConnections conexión
<a name="create-secret-connection"></a>

Siga las instrucciones siguientes para crear un secreto de Secrets Manager o una CodeConnections conexión:
+ [Creación y almacenamiento de un token en un secreto de Secrets Manager](asm-create-secret.md).
+ [Cree una conexión a GitHub](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-github.html)
+ [Cree una conexión a GitHub Enterprise Server](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-gheserver.html)
+ [Creación de una conexión a Bitbucket](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-bitbucket.html)

## Paso 2: Otorgar acceso al rol de IAM CodeBuild del proyecto a los secretos de Secrets Manager
<a name="asm-role-access"></a>

**nota**  
Antes de continuar, debes tener acceso al token creado en Secrets Manager o CodeConnections.

Para conceder acceso a la función de IAM del CodeBuild proyecto a Secrets Manager o CodeConnections, debes añadir la siguiente política de IAM.

**Para conceder el acceso a la función de CodeBuild IAM del proyecto**

1. Cree un rol de IAM para su CodeBuild proyecto siguiendo las instrucciones [CodeBuild Permiten interactuar con otros servicios AWS](setting-up-service-role.md) para su CodeBuild proyecto.

1. Realice una de las siguientes acciones:
   + Añada la siguiente política de IAM a su función de CodeBuild proyecto para conceder acceso a su secreto.

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

****  

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

------

     (Opcional) Si utilizas claves gestionadas por el AWS KMS cliente para cifrar un secreto de Secrets Manager, puedes añadir la siguiente declaración de política para conceder el acceso.

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

------
   + Añada la siguiente política de IAM a su función de CodeBuild proyecto para conceder acceso a su conexión.

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

****  

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

------

## Paso 3: Configurar Secrets Manager o CodeConnections los tokens
<a name="asm-account-credential"></a>

Puedes configurar tus credenciales de origen en tres niveles diferentes con Secrets Manager o con CodeConnections tokens.

### Configure Secrets Manager o CodeConnections los tokens como credenciales a nivel de cuenta
<a name="asm-account-credential"></a>

Puede configurar un secreto o una CodeConnections conexión de Secrets Manager como una credencial a nivel de cuenta y utilizarla en un proyecto.

------
#### [ Consola de administración de AWS ]

**Para configurar una conexión como credencial a nivel de cuenta en el Consola de administración de AWS**

1. **En el **caso del proveedor de código fuente**, selecciona **Bitbucket** o **GitHub**GitHub Enterprise.** 

1. En **Credencial**, realice una de las siguientes acciones:
   + Elija **Credencial de origen predeterminada** para aplicar la credencial de origen predeterminada de su cuenta a todos los proyectos.

     1. Si no está conectado a su proveedor de origen, elija **Administrar la credencial de origen predeterminada**.

     1. En **Tipo de credencial**, elija un tipo de credencial.

     1. Si lo deseas **CodeConnections**, elige usar una conexión existente o crear una nueva conexión.

        Si ha elegido un tipo de credencial distinto, elija en **Servicio** el servicio que quiere usar para almacenar el token y haga lo siguiente:
        + Si ha elegido usar **Secrets Manager**, puede elegir entre usar una conexión de secreto existente o crear un secreto nuevo y elegir **Guardar**. Para obtener más información sobre cómo crear un secreto nuevo, consulte [Creación y almacenamiento de un token en un secreto de Secrets Manager](asm-create-secret.md).
        + Si eliges usarla **CodeBuild**, introduce tu token o tu nombre de usuario y contraseña de la aplicación, y selecciona **Guardar**.
   + Elija **Credencial de origen personalizada** a fin de usar una credencial de este tipo para anular la configuración predeterminada de su cuenta.

     1. En **Tipo de credencial**, elija un tipo de credencial.

     1. En **Conexión**, elija usar una conexión existente o cree una nueva.

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

**Para configurar una conexión como credencial a nivel de cuenta en el AWS CLI**
+ Abra un terminal (Linux, macOS o Unix) o un símbolo del sistema (Windows). Utilice el AWS CLI para ejecutar el **import-source-credentials** comando.

  Utilice el comando siguiente para configurar un secreto de Secrets Manager:

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

  Use el siguiente comando para configurar una CodeConnections conexión:

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

  Este comando permite importar un token como credenciales de origen predeterminadas de cuenta. Al importar una credencial mediante la [ImportSourceCredentials](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ImportSourceCredentials.html)API, CodeBuild usará el token para todas las interacciones con el proveedor de origen, como los webhooks, los informes de estado de compilación y las operaciones de clonación de git, a menos que se haya configurado un conjunto de credenciales más específico en el proyecto.

------

Ahora puede usar el token en el proyecto de compilación y ejecutarlo. Para obtener más información, consulte [Creación de un proyecto de compilación en AWS CodeBuild](create-project.md) y [Ejecute AWS CodeBuild compilaciones manualmente](run-build.md).

### Configuración de varios tokens como credenciales de origen
<a name="asm-source-credential"></a>

Para usar los secretos o CodeConnections las conexiones de Secrets Manager como credenciales de nivel fuente, haz referencia directamente al token en el CodeBuild proyecto e inicia una compilación.

------
#### [ Consola de administración de AWS ]

**Para configurar varios tokens como credenciales a nivel de fuente en el Consola de administración de AWS**

1. En **Proveedor de origen**, elija **GitHub**. 

1. En **Credencial**, realice una de las siguientes acciones:
   + Elija **Credencial de origen predeterminada** para aplicar la credencial de origen predeterminada de su cuenta a todos los proyectos.

     1. Si no está conectado a GitHub, elija **Administrar la credencial de origen predeterminada**.

     1. **En **Tipo de credencial**, selecciona GitHub Aplicación.**

     1. En **Conexión**, elija usar una conexión existente o cree una nueva.
   + Elija **Credencial de origen personalizada** a fin de usar una credencial de este tipo para anular la configuración predeterminada de su cuenta.

     1. **En **Tipo de credencial**, elija GitHub Aplicación.**

     1. En **Conexión**, elija usar una conexión existente o cree una nueva.

1. Elija **Agregar el origen** y repita el proceso de elegir el proveedor de origen y las credenciales.

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

**Para configurar varios tokens como credenciales de nivel de origen en el AWS CLI**
+ Abra un terminal (Linux, macOS o Unix) o un símbolo del sistema (Windows). Utilice el AWS CLI para ejecutar el **create-project** comando.

  Utilice el siguiente 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>
  ```

------

### Establecimiento de una alternativa para las credenciales de origen de proyecto
<a name="asm-project-credential"></a>

Para configurar una alternativa a las credenciales de origen de proyecto, use `NO_SOURCE` como origen principal del proyecto y haga referencia 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>
```

Cuando se usa `NO_SOURCE`, suele proporcionarse una especificación de compilación en el modelo de origen, ya que no está configurado directamente para usar un origen externo para obtener la [especificación de compilación](build-spec-ref.md). Por lo general, un origen `NO_SOURCE` se encarga de clonar todos los repositorios pertinentes desde la especificación de compilación. Para asegurarse de que las credenciales configuradas estén disponibles para esas operaciones, puede habilitar la opción `git-credential-helper` en la especificación de compilación.

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

Durante la compilación, CodeBuild leerá el `AuthServer` campo del token configurado y usará las credenciales del token para todas las solicitudes de git a ese proveedor de código externo en particular.

## Opciones de configuración adicionales
<a name="asm-credential-cfn"></a>

Puede configurar las credenciales de nivel de cuenta de Secrets Manager mediante CloudFormation plantillas. Puede usar la siguiente CloudFormation plantilla para configurar una credencial a nivel de cuenta:

```
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**  
Si también vas a crear un proyecto en la misma pila, usa el CloudFormation atributo [DependsOn](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html)para asegurarte de que `AccountCredential` se haya creado antes del proyecto.

También puede configurar varias credenciales de nivel de fuente de Secrets Manager mediante CloudFormation plantillas. Puede usar la siguiente CloudFormation plantilla para usar varios tokens y acceder a varias fuentes:

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