

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Vários tokens de acesso em CodeBuild
<a name="multiple-access-tokens"></a>

CodeBuild suporta o fornecimento de tokens de acesso a provedores terceirizados a partir de seus segredos em AWS Secrets Manager ou por meio de Conexões de código da AWS conexões. Você pode definir seu segredo ou conexão como a credencial padrão para interações com um provedor terceirizado específico GitHub, como GitHub Enterprise ou Bitbucket.

Você pode definir suas credenciais de origem em três níveis diferentes:

1. **Credenciais no nível da conta para todos os projetos:** essas são as credenciais padrão para todos os projetos em uma conta da AWS . Elas serão usadas em um projeto quando nenhuma credencial de projeto ou de nível de origem for especificada.

1. **Credenciais no nível da fonte para um repositório específico:** é quando um segredo ou CodeConnections conexão do Secrets Manager é definido em uma fonte do projeto. Essas credenciais serão usadas somente para operações no repositório de origem especificado. Isso permite que você configure vários tokens de acesso com diferentes escopos de permissão no mesmo projeto e não use as credenciais padrão no nível da conta.

1. **Credenciais de fallback no nível do projeto:** você pode definir uma credencial de fallback no nível do projeto usando `NO_SOURCE` como tipo de fonte primária e definir um segredo ou uma conexão nela. Isso pode ser usado quando você tem várias fontes em um projeto, mas deseja usar as mesmas credenciais ou quando não deseja usar as credenciais padrão no nível da conta para o projeto.

**Topics**
+ [Etapa 1: Criar um segredo ou uma CodeConnections conexão do Secrets Manager](#create-secret-connection)
+ [Etapa 2: conceder acesso à função IAM do CodeBuild projeto aos segredos do Secrets Manager](#asm-role-access)
+ [Etapa 3: Configurar o Secrets Manager ou CodeConnections tokens](#asm-account-credential)
+ [Opções de configuração adicionais](#asm-credential-cfn)

## Etapa 1: Criar um segredo ou uma CodeConnections conexão do Secrets Manager
<a name="create-secret-connection"></a>

Use as instruções a seguir para criar um segredo ou uma CodeConnections conexão do Secrets Manager:
+ [Criar e armazenar um token em um segredo do Secrets Manager](asm-create-secret.md).
+ [Crie uma conexão com GitHub](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-github.html)
+ [Crie uma conexão com o GitHub Enterprise Server](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-gheserver.html)
+ [Criar uma conexão com o Bitbucket](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-bitbucket.html)

## Etapa 2: conceder acesso à função IAM do CodeBuild projeto aos segredos do Secrets Manager
<a name="asm-role-access"></a>

**nota**  
Antes de continuar, você deve ter acesso ao token criado no Secrets Manager ou CodeConnections.

Para conceder acesso ao papel do IAM do CodeBuild projeto ao Secrets Manager ou CodeConnections, você deve adicionar a seguinte política do IAM.

**Para conceder acesso à função IAM do CodeBuild projeto**

1. Crie uma função do IAM para seu CodeBuild projeto seguindo as instruções [CodeBuild Permitir interagir com outros AWS serviços](setting-up-service-role.md) para seu CodeBuild projeto.

1. Execute um destes procedimentos:
   + Adicione a seguinte política do IAM ao papel CodeBuild do seu projeto para conceder acesso ao seu segredo.

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

****  

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

------

     (Opcional) Se você estiver usando chaves gerenciadas pelo AWS KMS cliente para criptografar um segredo do Secrets Manager, poderá adicionar a seguinte declaração de política para conceder acesso.

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

------
   + Adicione a seguinte política do IAM ao papel CodeBuild do seu projeto para conceder acesso à sua conexão.

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

****  

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

------

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

Você pode definir suas credenciais de origem em três níveis diferentes com o Secrets Manager ou CodeConnections tokens.

### Configure o Secrets Manager ou CodeConnections tokens como credenciais no nível da conta
<a name="asm-account-credential"></a>

Você pode configurar um segredo ou uma CodeConnections conexão do Secrets Manager como uma credencial no nível da conta e usá-la em um projeto.

------
#### [ Console de gerenciamento da AWS ]

**Para configurar uma conexão como uma credencial de nível de conta no Console de gerenciamento da AWS**

1. Em **Provedor de origem**, escolha **Bitbucket** ou **GitHub Enterprise**. **GitHub** 

1. Em **Credencial**, siga um destes procedimentos:
   + Escolha **Credencial de origem padrão** para usar a credencial de origem padrão da conta e aplicá-la a todos os projetos.

     1. Se você ainda não tiver feito login no provedor de origem, escolha **Gerenciar credencial de origem padrão**.

     1. Em **Tipo de credencial**, escolha um tipo de credencial.

     1. Se você escolher **CodeConnections**, escolha usar uma conexão existente ou criar uma nova conexão.

        Se você escolheu outro tipo de credencial, em **Serviço**, escolha qual serviço você gostaria de usar para armazenar seu token e faça o seguinte:
        + Se você optar por usar o **Secrets Manager**, poderá usar uma conexão secreta existente ou criar um segredo e escolher **Salvar**. Para obter mais informações sobre como criar um segredo, consulte [Criar e armazenar um token em um segredo do Secrets Manager](asm-create-secret.md).
        + Se você optar por usar **CodeBuild**, insira seu token ou seu nome de usuário e senha do aplicativo e escolha **Salvar**.
   + Escolha **Credencial de origem personalizada** para usar uma credencial de origem personalizada para substituir as configurações padrão da conta.

     1. Em **Tipo de credencial**, escolha um tipo de credencial.

     1. Em **Conexão**, escolha usar uma conexão existente ou crie uma.

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

**Para configurar uma conexão como uma credencial de nível de conta no AWS CLI**
+ Abra um terminal (Linux, macOS ou Unix) ou um prompt de comando (Windows). Use o AWS CLI para executar o **import-source-credentials** comando.

  Use o seguinte comando para configurar um segredo do Secrets Manager:

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

  Use o comando a seguir para configurar uma CodeConnections conexão:

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

  Esse comando permite importar um token como credenciais de origem padrão no nível da conta. Ao importar uma credencial usando a [ImportSourceCredentials](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ImportSourceCredentials.html)API, CodeBuild usará o token para todas as interações com o provedor de origem, como webhooks, relatórios de status de compilação e operações de clonagem do git, a menos que um conjunto mais específico de credenciais tenha sido configurado no projeto.

------

Agora você pode usar o token no projeto de compilação e executá-lo. Para obter mais informações, consulte [Criar um projeto de compilação no AWS CodeBuild](create-project.md) e [Execute AWS CodeBuild compilações manualmente](run-build.md).

### Configurar vários tokens como credenciais no nível de origem
<a name="asm-source-credential"></a>

Para usar segredos ou CodeConnections conexões do Secrets Manager como credenciais no nível da fonte, faça referência direta ao token no CodeBuild projeto e inicie uma compilação.

------
#### [ Console de gerenciamento da AWS ]

**Para configurar vários tokens como credenciais de nível de origem no Console de gerenciamento da AWS**

1. Em **Source provider**, escolha **GitHub**. 

1. Em **Credencial**, siga um destes procedimentos:
   + Escolha **Credencial de origem padrão** para usar a credencial de origem padrão da conta e aplicá-la a todos os projetos.

     1. Se você não estiver conectado GitHub, escolha **Gerenciar credencial de origem padrão**.

     1. Em **Tipo de credencial**, escolha **GitHub Aplicativo**.

     1. Em **Conexão**, escolha usar uma conexão existente ou crie uma.
   + Escolha **Credencial de origem personalizada** para usar uma credencial de origem personalizada para substituir as configurações padrão da conta.

     1. Em **Tipo de credencial**, escolha **GitHub Aplicativo**.

     1. Em **Conexão**, escolha usar uma conexão existente ou crie uma.

1. Escolha **Adicionar origem** e repita o processo de escolha do provedor de origem e das credenciais.

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

**Para configurar vários tokens como credenciais de nível de origem no AWS CLI**
+ Abra um terminal (Linux, macOS ou Unix) ou um prompt de comando (Windows). Use o AWS CLI para executar o **create-project** comando.

  Use o seguinte 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>
  ```

------

### Defina um fallback de credencial de origem no nível do projeto
<a name="asm-project-credential"></a>

Para configurar o fallback da credencial de origem no nível do projeto, use `NO_SOURCE` como fonte primária do seu projeto e faça referência ao 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>
```

Ao usar `NO_SOURCE`, um buildspec normalmente é fornecido dentro do modelo de origem, pois não está diretamente configurado para usar uma fonte externa para buscar [buildspec](build-spec-ref.md). Normalmente, uma origem `NO_SOURCE` lidará com a clonagem de todos os repositórios relevantes de dentro do buildspec. Para garantir que as credenciais configuradas estejam disponíveis para essas operações, você pode ativar a opção `git-credential-helper` no buildspec.

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

Durante a compilação, CodeBuild lerá o `AuthServer` campo do token configurado e usará as credenciais do token para todas as solicitações do git para esse provedor de origem terceirizado específico.

## Opções de configuração adicionais
<a name="asm-credential-cfn"></a>

Você pode configurar as credenciais em nível de conta do Secrets Manager usando CloudFormation modelos. Você pode usar o CloudFormation modelo a seguir para definir uma credencial no nível da conta:

```
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 você também estiver criando um projeto na mesma pilha, use o CloudFormation atributo [DependsOn](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html)para garantir que ele `AccountCredential` seja criado antes do projeto.

Você também pode configurar as credenciais de vários níveis de origem do Secrets Manager usando CloudFormation modelos. Você pode usar o CloudFormation modelo a seguir para usar vários tokens para extrair várias fontes:

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