Tokens de acceso múltiple en CodeBuild - AWS CodeBuild

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

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.

Puedes configurar tus credenciales de origen en tres niveles diferentes:

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

  2. 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 nivel de cuenta predeterminadas.

  3. Credenciales alternativas a nivel de proyecto: puede establecer una credencial alternativa a nivel de proyecto utilizándola NO_SOURCE como tipo de fuente principal y definir un secreto o una conexión en ella. Se puede usar cuando tienes varias fuentes en un proyecto, pero quieres usar las mismas credenciales para ellas, o cuando no quieres usar las credenciales de nivel de cuenta predeterminadas para tu proyecto.

Paso 1: Crear un secreto de Secrets Manager o una CodeConnections conexión

Siga las instrucciones siguientes para crear un secreto de Secrets Manager o una CodeConnections conexión:

Paso 2: Otorga acceso al IAM rol CodeBuild del proyecto a los secretos de Secrets Manager

nota

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

Para conceder acceso a IAM un rol de CodeBuild proyecto a Secrets Manager o CodeConnections, debes añadir la siguiente IAM política.

Para conceder acceso a CodeBuild un IAM rol de proyecto
  1. Cree un IAM rol para su CodeBuild proyecto siguiendo las instrucciones CodeBuild Permiten interactuar con otros AWS servicios para su CodeBuild proyecto.

  2. Realice una de las siguientes acciones siguientes:

    • Agrega la siguiente IAM política a tu rol en el CodeBuild proyecto para permitir el acceso a tu secreto.

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

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

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "<kms-key-arn>", "Condition": { "StringEquals": { "kms:EncryptionContext:SecretARN": "<secret-arn>" } } } ] }
    • Añada la siguiente IAM política a su rol en el CodeBuild proyecto para conceder acceso a su conexión.

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

Paso 3: Configurar Secrets Manager o CodeConnections los tokens

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

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

AWS Management Console
Para configurar una conexión como credencial a nivel de cuenta en el AWS Management Console
  1. En el caso del proveedor de código fuente, selecciona Bitbucket o GitHubGitHub Enterprise.

  2. Para Credential, realice una de las siguientes acciones:

    • Elija la credencial de origen predeterminada para usar la credencial de origen predeterminada de su cuenta y aplicarla a todos los proyectos.

      1. Si no estás conectado a tu proveedor de origen, selecciona Administrar la credencial de origen predeterminada.

      2. En Tipo de credencial, elige un tipo de credencial.

      3. Si lo desea CodeConnections, elija usar una conexión existente o crear una nueva conexión.

        Si eligió un tipo de credencial diferente, en Servicio, elija el servicio que desea usar para almacenar su token y haga lo siguiente:

        • Si eliges usar Secrets Manager, puedes elegir usar una conexión secreta existente o crear un secreto nuevo y seleccionar Guardar. Para obtener más información sobre cómo crear un secreto nuevo, consulteCrea y almacena un token en un secreto de Secrets Manager.

        • Si eliges usarlo CodeBuild, introduce tu token o tu nombre de usuario y contraseña de la aplicación y selecciona Guardar.

    • Elige Credencial de origen personalizada para usar una credencial de origen personalizada para anular la configuración predeterminada de tu cuenta.

      1. En Tipo de credencial, elige un tipo de credencial.

      2. En Conexión, elija usar una conexión existente o crear una conexión nueva.

AWS CLI
Para configurar una conexión como una 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 siguiente comando 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>

    Utilice 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 le permite importar un token como credenciales de origen predeterminadas a nivel de cuenta. Cuando importes una credencial con el ImportSourceCredentialsAPI, 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 puedes usar el token en tu proyecto de compilación y ejecutarlo. Para obtener más información, consulte Cree un proyecto de construcción en AWS CodeBuild y Ejecute AWS CodeBuild compilaciones manualmente.

Configura varios tokens como credenciales a nivel de fuente

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.

AWS Management Console
Para configurar varios tokens como credenciales a nivel de fuente en el AWS Management Console
  1. En Proveedor de origen, elija GitHub.

  2. Para Credential, realice una de las siguientes acciones:

    • Elija la credencial de origen predeterminada para usar la credencial de origen predeterminada de su cuenta y aplicarla a todos los proyectos.

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

      2. En Tipo de credencial, selecciona GitHub Aplicación.

      3. En Conexión, elija usar una conexión existente o crear una conexión nueva.

    • Elija Credencial de origen personalizada para usar una credencial de origen personalizada para anular la configuración predeterminada de su cuenta.

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

      2. En Conexión, elija usar una conexión existente o crear una conexión nueva.

  3. Seleccione Añadir fuente y repita el proceso de elección del 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/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>

Establezca una alternativa de credenciales de origen a nivel de proyecto

Para configurar una copia alternativa de credenciales de origen a nivel de proyecto, utilízala como fuente principal NO_SOURCE de tu proyecto y haz 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/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>

Cuando se usaNO_SOURCE, normalmente se proporciona una especificación de compilación en el modelo fuente, ya que no está configurada directamente para usar una fuente externa para obtener la especificación de compilación. Por lo general, una NO_SOURCE fuente se encarga de clonar todos los repositorios relevantes desde la especificación de compilación. Para asegurarte de que las credenciales configuradas estén disponibles para esas operaciones, puedes habilitar la opción en la git-credential-helper 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 fuentes externo en particular.

Opciones de configuración adicionales

Puede configurar las credenciales de nivel de cuenta de Secrets Manager mediante AWS CloudFormation plantillas. Puede usar la siguiente AWS 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 AWS CloudFormation atributo DependsOnpara asegurarte de que AccountCredential se haya creado antes del proyecto.

También puede configurar varias credenciales de nivel de fuente de Secrets Manager mediante AWS CloudFormation plantillas. Puede usar la siguiente AWS 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/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