

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Mehrere Zugriffstoken in CodeBuild
<a name="multiple-access-tokens"></a>

CodeBuild unterstützt die Beschaffung von Zugriffstoken an Drittanbieter aus Ihren Geheimnissen in AWS Secrets Manager oder über AWS CodeConnections Verbindungen. Du kannst dein Geheimnis oder deine Verbindung als Standardanmeldedaten für Interaktionen mit einem bestimmten Drittanbieter wie GitHub GitHub Enterprise oder Bitbucket festlegen.

Du kannst deine Quellanmeldedaten auf drei verschiedenen Ebenen festlegen:

1. **Anmeldeinformationen auf Kontoebene für alle Projekte:** Dies sind Standardanmeldedaten für alle Projekte in einem AWS Konto. Sie werden für ein Projekt verwendet, wenn keine Anmeldeinformationen auf Projekt- oder Quellenebene angegeben sind.

1. **Anmeldeinformationen auf Quellenebene für ein bestimmtes Repository:** In diesem Fall wird ein Secrets Manager-Geheimnis oder eine Secrets CodeConnections Manager-Verbindung für eine Projektquelle definiert. Diese Anmeldeinformationen werden nur für Operationen mit dem angegebenen Quell-Repository verwendet. Auf diese Weise können Sie mehrere Zugriffstoken mit unterschiedlichen Berechtigungsbereichen im selben Projekt einrichten und müssen nicht die Standardanmeldedaten auf Kontoebene verwenden.

1. Ausweichdaten **auf Projektebene: Sie können Fallback-Anmeldeinformationen** auf Projektebene einrichten, indem Sie sie `NO_SOURCE` als primären Quelltyp verwenden und für diesen ein Geheimnis oder eine Verbindung definieren. Dies kann verwendet werden, wenn Sie mehrere Quellen in einem Projekt haben, aber dieselben Anmeldeinformationen für diese verwenden möchten, oder wenn Sie nicht die Standardanmeldedaten auf Kontoebene für Ihr Projekt verwenden möchten.

**Topics**
+ [Schritt 1: Erstellen Sie ein Secrets Manager Manager-Geheimnis oder eine CodeConnections Verbindung](#create-secret-connection)
+ [Schritt 2: Gewähren Sie der CodeBuild Projekt-IAM-Rolle Zugriff auf Secrets Manager Manager-Geheimnisse](#asm-role-access)
+ [Schritt 3: Secrets Manager oder CodeConnections Tokens konfigurieren](#asm-account-credential)
+ [Zusätzliche Einrichtungsoptionen](#asm-credential-cfn)

## Schritt 1: Erstellen Sie ein Secrets Manager Manager-Geheimnis oder eine CodeConnections Verbindung
<a name="create-secret-connection"></a>

Gehen Sie wie folgt vor, um ein Secrets Manager Manager-Geheimnis oder eine CodeConnections Verbindung zu erstellen:
+ [Erstellen und speichern Sie ein Token in einem Secrets Manager Manager-Secret](asm-create-secret.md).
+ [Stellen Sie eine Verbindung her zu GitHub](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-github.html)
+ [Stellen Sie eine Verbindung zu GitHub Enterprise Server her](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-gheserver.html)
+ [Stelle eine Verbindung zu Bitbucket her](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-bitbucket.html)

## Schritt 2: Gewähren Sie der CodeBuild Projekt-IAM-Rolle Zugriff auf Secrets Manager Manager-Geheimnisse
<a name="asm-role-access"></a>

**Anmerkung**  
Bevor Sie fortfahren, müssen Sie Zugriff auf das in Secrets Manager oder erstellte Token haben CodeConnections.

Um Secrets Manager oder Zugriff auf die CodeBuild Projekt-IAM-Rolle zu gewähren CodeConnections, müssen Sie die folgende IAM-Richtlinie hinzufügen.

**Um Zugriff auf die CodeBuild Projekt-IAM-Rolle zu gewähren**

1. Erstellen Sie eine IAM-Rolle für Ihr CodeBuild Projekt, indem Sie den Anweisungen [Erlauben CodeBuild Sie die Interaktion mit anderen Diensten AWS](setting-up-service-role.md) für Ihr CodeBuild Projekt folgen.

1. Führen Sie eine der folgenden Aktionen aus:
   + Fügen Sie Ihrer CodeBuild Projektrolle die folgende IAM-Richtlinie hinzu, um Zugriff auf Ihr Geheimnis zu gewähren.

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

****  

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

------

     (Optional) Wenn Sie vom AWS KMS Kunden verwaltete Schlüssel verwenden, um ein Secrets Manager Manager-Geheimnis zu verschlüsseln, können Sie die folgende Richtlinienerklärung hinzufügen, um Zugriff zu gewähren.

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

------
   + Fügen Sie Ihrer CodeBuild Projektrolle die folgende IAM-Richtlinie hinzu, um Zugriff auf Ihre Verbindung zu gewähren.

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

****  

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

------

## Schritt 3: Secrets Manager oder CodeConnections Tokens konfigurieren
<a name="asm-account-credential"></a>

Sie können Ihre Quellanmeldedaten entweder mit Secrets Manager oder CodeConnections Tokens auf drei verschiedenen Ebenen festlegen.

### Secrets Manager oder CodeConnections Tokens als Anmeldeinformationen auf Kontoebene konfigurieren
<a name="asm-account-credential"></a>

Sie können ein Secrets Manager Manager-Geheimnis oder eine Secrets CodeConnections Manager-Verbindung als Anmeldeinformationen auf Kontoebene konfigurieren und in einem Projekt verwenden.

------
#### [ AWS-Managementkonsole ]

**Um eine Verbindung als Anmeldedaten auf Kontoebene zu konfigurieren, finden Sie im AWS-Managementkonsole**

1. **Wählen Sie als **Quellanbieter** **Bitbucket **GitHub****, oder GitHub Enterprise aus.** 

1. Führe für **Credential** einen der folgenden Schritte aus:
   + Wählen Sie **Standard-Quellanmeldedaten**, um die Standard-Quellanmeldedaten Ihres Kontos für alle Projekte zu verwenden.

     1. Wenn Sie nicht mit Ihrem Quellanbieter verbunden sind, wählen Sie **Standardzugangsdaten verwalten** aus.

     1. Wählen Sie als **Anmeldeinformationstyp** einen Anmeldeinformationstyp aus.

     1. Wenn Sie möchten **CodeConnections**, wählen Sie, ob Sie eine bestehende Verbindung verwenden oder eine neue Verbindung erstellen möchten.

        Wenn Sie einen anderen Anmeldeinformationstyp gewählt haben, wählen Sie für **Service** aus, welchen Dienst Sie zum Speichern Ihres Tokens verwenden möchten, und gehen Sie wie folgt vor:
        + Wenn Sie **Secrets Manager** verwenden möchten, können Sie wählen, ob Sie eine bestehende geheime Verbindung verwenden oder ein neues Geheimnis erstellen und **Speichern** wählen möchten. Weitere Informationen zum Erstellen eines neuen Geheimnisses finden Sie unter[Erstellen und speichern Sie ein Token in einem Secrets Manager Manager-Secret](asm-create-secret.md).
        + Wenn Sie sich für die Verwendung entschieden haben **CodeBuild**, geben Sie Ihr Token oder Ihren Benutzernamen und Ihr App-Passwort ein und wählen Sie **Speichern**.
   + Wählen Sie **Benutzerdefinierte Quellanmeldedaten**, um benutzerdefinierte Quellanmeldedaten zu verwenden, um die Standardeinstellungen Ihres Kontos zu überschreiben.

     1. Wählen Sie als **Anmeldeinformationstyp** einen Anmeldeinformationstyp aus.

     1. Wählen Sie unter **Verbindung** aus, ob Sie eine bestehende Verbindung verwenden oder eine neue Verbindung erstellen möchten.

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

**Um eine Verbindung als Anmeldedaten auf Kontoebene zu konfigurieren, klicken Sie auf AWS CLI**
+ Öffnen Sie die Eingabeaufforderung (Windows) oder das Terminal (Linux, macOS oder Unix). Verwenden Sie den AWS CLI , um den **import-source-credentials** Befehl auszuführen.

  Verwenden Sie den folgenden Befehl, um ein Secrets Manager Manager-Geheimnis zu konfigurieren:

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

  Verwenden Sie den folgenden Befehl, um eine CodeConnections Verbindung zu konfigurieren:

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

  Mit diesem Befehl können Sie ein Token als Standard-Quellanmeldedaten auf Kontoebene importieren. Wenn Sie Anmeldeinformationen mithilfe der [ImportSourceCredentials](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ImportSourceCredentials.html)API importieren, CodeBuild wird das Token für alle Interaktionen mit dem Quellanbieter verwendet, z. B. für Webhooks, Build-Statusberichte und Git-Clone-Operationen, sofern im Projekt kein spezifischerer Satz von Anmeldeinformationen konfiguriert wurde.

------

Sie können das Token jetzt in Ihrem Build-Projekt verwenden und ausführen. Weitere Informationen erhalten Sie unter [Erstellen Sie ein Build-Projekt in AWS CodeBuild](create-project.md) und [Manuelles Ausführen von AWS CodeBuild Builds](run-build.md).

### Konfigurieren Sie mehrere Token als Anmeldeinformationen auf Quellenebene
<a name="asm-source-credential"></a>

Um Secrets Manager Manager-Geheimnisse oder CodeConnections Verbindungen als Anmeldeinformationen auf Quellenebene zu verwenden, verweisen Sie direkt auf das Token im CodeBuild Projekt und starten Sie einen Build.

------
#### [ AWS-Managementkonsole ]

**Um mehrere Token als Anmeldeinformationen auf Quellenebene zu konfigurieren, finden Sie im AWS-Managementkonsole**

1. Wählen Sie als **Quellanbieter** die Option **GitHub**. 

1. Führen Sie für **Credential** einen der folgenden Schritte aus:
   + Wählen Sie **Standard-Quellanmeldedaten**, um die Standard-Quellanmeldedaten Ihres Kontos für alle Projekte zu verwenden.

     1. Wenn Sie nicht verbunden sind GitHub, wählen Sie **Standard-Quellanmeldedaten verwalten** aus.

     1. **Wählen Sie als **Anmeldeinformationstyp** die Option App ausGitHub .**

     1. Wählen Sie unter **Verbindung** aus, ob Sie eine bestehende Verbindung verwenden oder eine neue Verbindung erstellen möchten.
   + Wählen Sie **Benutzerdefinierte Quellanmeldedaten**, um benutzerdefinierte Quellanmeldedaten zu verwenden, um die Standardeinstellungen Ihres Kontos zu überschreiben.

     1. **Wählen Sie als **Anmeldeinformationstyp** die Option App aus. GitHub **

     1. Wählen Sie unter **Verbindung** aus, ob Sie eine bestehende Verbindung verwenden oder eine neue Verbindung erstellen möchten.

1. Wählen Sie **Quelle hinzufügen** und wiederholen Sie den Vorgang der Auswahl Ihres Quellanbieters und Ihrer Anmeldeinformationen.

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

**Um mehrere Token als Anmeldeinformationen auf Quellebene zu konfigurieren, finden Sie im AWS CLI**
+ Öffnen Sie die Eingabeaufforderung (Windows) oder das Terminal (Linux, macOS oder Unix). Verwenden Sie den AWS CLI , um den **create-project** Befehl auszuführen.

  Verwenden Sie den folgenden Befehl:

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

------

### Richten Sie einen Fallback für Quellanmeldedaten auf Projektebene ein
<a name="asm-project-credential"></a>

Um ein Fallback für Quellanmeldedaten auf Projektebene einzurichten, verwenden Sie `NO_SOURCE` für Ihr Projekt die primäre Quelle und verweisen Sie auf das 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>
```

[Bei der Verwendung `NO_SOURCE` wird eine Buildspec normalerweise innerhalb des Quellmodells bereitgestellt, da es nicht direkt für die Verwendung einer externen Quelle zum Abrufen der Buildspec konfiguriert ist.](build-spec-ref.md) In der Regel übernimmt eine `NO_SOURCE` Quelle das Klonen aller relevanten Repositorys innerhalb der Buildspec. Um sicherzustellen, dass die konfigurierten Anmeldeinformationen für diese Operationen verfügbar sind, können Sie die Option in der `git-credential-helper` Buildspec aktivieren.

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

Während des Builds liest CodeBuild dann das `AuthServer` Feld aus dem konfigurierten Token und verwendet die Token-Anmeldeinformationen für alle Git-Anfragen an diesen bestimmten externen Quellanbieter.

## Zusätzliche Einrichtungsoptionen
<a name="asm-credential-cfn"></a>

Sie können Secrets Manager Manager-Anmeldeinformationen auf Kontoebene mithilfe von CloudFormation Vorlagen konfigurieren. Sie können die folgende CloudFormation Vorlage verwenden, um Anmeldeinformationen auf Kontoebene festzulegen:

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

**Anmerkung**  
Wenn Sie auch ein Projekt im selben Stapel erstellen, verwenden Sie das CloudFormation Attribut, [DependsOn](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html)um sicherzustellen, dass das vor dem Projekt erstellt `AccountCredential` wird.

Sie können Secrets Manager auch mithilfe von CloudFormation Vorlagen für mehrere Anmeldeinformationen auf Quellenebene konfigurieren. Sie können die folgende CloudFormation Vorlage verwenden, um mehrere Token zum Abrufen mehrerer Quellen zu verwenden:

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