

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.

# Eine Projektrichtlinie (SDK) anhängen
<a name="md-attach-project-policy"></a>

Sie fügen einem Amazon Rekognition Custom Labels-Projekt eine Projektrichtlinie hinzu, indem Sie den [PutProjectpolicy](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_PutProjectPolicy)Vorgang aufrufen. 

Hängen Sie mehrere Projektrichtlinien an ein Projekt an, indem Sie `PutProjectPolicy` für jede Projektrichtlinie aufrufen, die Sie hinzufügen möchten. Sie können einem Projekt bis zu fünf Projektrichtlinien hinzufügen. Wenn Sie mehr Projektrichtlinien hinzufügen müssen, können Sie eine Erhöhung des [Limits](limits.md) beantragen.

Wenn Sie einem Projekt zum ersten Mal eine eindeutige Projektrichtlinie zuordnen, geben Sie im `PolicyRevisionId`-Eingabeparameter keine Revisions-ID an. Die Antwort von `PutProjectPolicy` ist eine Revisions-ID für die Projektrichtlinie, die Amazon Rekognition Custom Labels für Sie erstellt. Sie können die Revisions-ID verwenden, um die neueste Version einer Projektrichtlinie zu aktualisieren oder zu löschen. Amazon Rekognition Custom Labels speichert nur die neueste Version einer Projektrichtlinie. Wenn Sie versuchen, eine frühere Version einer Projektrichtlinie zu aktualisieren oder zu löschen, wird ein `InvalidPolicyRevisionIdException`-Fehler angezeigt.

Um eine bestehende Projektrichtlinie zu aktualisieren, geben Sie die Revisions-ID der Projektrichtlinie im `PolicyRevisionId`-Eingabeparameter an. Die Revision der IDs Projektrichtlinien in einem Projekt erhalten Sie telefonisch. [ListProjectPolicies](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ListProjectPolicies)

Nachdem Sie einem Quellprojekt eine Projektrichtlinie angehängt haben, können Sie das Modell aus dem Quellprojekt in das Zielprojekt kopieren. Weitere Informationen finden Sie unter [Kopieren eines Modells (SDK)](md-copy-model-sdk.md). 

Rufen Sie an, um eine Projektrichtlinie aus einem Projekt zu entfernen [DeleteProjectPolicy](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DeleteProjectPolicy). Rufen Sie an, um eine Liste der mit einem Projekt verknüpften Projektrichtlinien zu erhalten [ListProjectPolicies](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ListProjectPolicies). 

**So hängen Sie eine Projektrichtlinie an ein Projekt an (SDK)**

1. Falls Sie dies noch nicht getan haben, installieren und konfigurieren Sie den AWS CLI und den AWS SDKs. Weitere Informationen finden Sie unter [Schritt 4: Richten Sie das und ein AWS CLI AWS SDKs](su-awscli-sdk.md).

1. [Erstellen Sie ein Dokument mit Projektrichtlinien](md-create-project-policy-document.md).

1. Verwenden Sie den folgenden Code, um die Projektrichtlinie an das Projekt im vertrauenswürdigen AWS Konto anzuhängen, das die Modellversion enthält, die Sie kopieren möchten. Rufen Sie an, um den Projekt-ARN zu erhalten [DescribeProjects](https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/md-describing-project-sdk.html). Rufen Sie ARN auf, um die Modellversion abzurufen [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/md-describing-model-sdk.html). 

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

   Ändern Sie die folgenden Werte:
   + `project-arn`an den ARN des Quellprojekts in dem vertrauenswürdigen AWS Konto, das die Modellversion enthält, die Sie kopieren möchten. 
   + `policy-name` in einen von Ihnen gewählten Richtliniennamen. 
   + `principal` in den Prinzipal, dem Sie den Zugriff auf die von Ihnen in `Model version ARN` angegebenen Modellversionen gewähren oder verweigern möchten. 
   + `project-version-arn` in den ARN der Modellversion, die Sie kopieren möchten.

   Wenn Sie eine bestehende Projektrichtlinie aktualisieren möchten, geben Sie den `policy-revision-id`-Parameter an und geben Sie die Revisions-ID der gewünschten Projektrichtlinie an. 

   ```
   aws rekognition put-project-policy \
     --project-arn project-arn \
     --policy-name policy-name \
     --policy-document '{ "Version": "2012-10-17",		 	 	  "Statement":[{ "Effect":"ALLOW or DENY", "Principal":{ "AWS":"principal" }, "Action":"rekognition:CopyProjectVersion", "Resource":"project-version-arn" }]}' \
     --profile custom-labels-access
   ```

------
#### [ Python ]

   Verwenden Sie folgenden Code. Geben Sie die folgenden Befehlszeilenparameter an:
   + `project_arn` – Der ARN des Quellprojekts, an das Sie die Projektrichtlinie anfügen möchten. 
   + `policy_name` – Ein Richtlinienname, den Sie wählen. 
   + `project_policy` – Die Datei, die das Dokument mit den Projektrichtlinien enthält.
   + `policy_revision_id` – (Optional). Wenn Sie eine bestehende Version einer Projektrichtlinie aktualisieren möchten, geben Sie die Revisions-ID der Projektrichtlinie an.

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   """
   Purpose
   Amazon Rekognition Custom Labels model example used in the service documentation:
   https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/md-copy-model-sdk.html
   Shows how to attach a project policy to an Amazon Rekognition Custom Labels project.
   """
   
   import boto3
   import argparse
   import logging
   import json
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   
   def put_project_policy(rek_client, project_arn, policy_name, policy_document_file, policy_revision_id=None):
       """
       Attaches a project policy to an Amazon Rekognition Custom Labels project.
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param policy_name: A name for the project policy.
       :param project_arn: The Amazon Resource Name (ARN) of the source project
       that you want to attach the project policy to.
       :param policy_document_file: The JSON project policy document to
       attach to the source project.
       :param policy_revision_id: (Optional) The revision of an existing policy to update.
       Pass None to attach new policy.
       :return The revision ID for the project policy.
       """
   
       try:
   
           policy_document_json = ""
           response = None
   
           with open(policy_document_file, 'r') as policy_document:
               policy_document_json = json.dumps(json.load(policy_document))
   
           logger.info(
               "Attaching %s project_policy to project %s.", 
               policy_name, project_arn)
   
           if policy_revision_id is None:
               response = rek_client.put_project_policy(ProjectArn=project_arn,
                                                        PolicyName=policy_name,
                                                        PolicyDocument=policy_document_json)
   
           else:
               response = rek_client.put_project_policy(ProjectArn=project_arn,
                                                        PolicyName=policy_name,
                                                        PolicyDocument=policy_document_json,
                                                        PolicyRevisionId=policy_revision_id)
   
           new_revision_id = response['PolicyRevisionId']
   
           logger.info(
               "Finished creating project policy %s. Revision ID: %s",
               policy_name, new_revision_id)
   
           return new_revision_id
   
       except ClientError as err:
           logger.exception(
               "Couldn't attach %s project policy to project %s: %s }",
               policy_name, project_arn, err.response['Error']['Message'] )
           raise
   
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "project_arn",  help="The Amazon Resource Name (ARN) of the project "
           "that you want to attach the project policy to."
       )
       parser.add_argument(
           "policy_name",  help="A name for the project policy."
   
       )
   
       parser.add_argument(
           "project_policy",  help="The file containing the project policy JSON"
       )
   
       parser.add_argument(
           "--policy_revision_id",  help="The revision of an existing policy to update. "
           "If you don't supply a value, a new project policy is created.",
           required=False
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
   
       try:
   
           # get command line arguments
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
   
           args = parser.parse_args()
   
           print(f"Attaching policy to {args.project_arn}")
   
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
   
           # Attach a new policy or update an existing policy.
   
           response = put_project_policy(rekognition_client,
                                         args.project_arn,
                                         args.policy_name,
                                         args.project_policy,
                                         args.policy_revision_id)
   
           print(
               f"project policy {args.policy_name} attached to project {args.project_arn}")
           print(f"Revision ID: {response}")
   
       except ClientError as err:
           print("Problem attaching project policy: %s", err)
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   Verwenden Sie folgenden Code. Geben Sie die folgenden Befehlszeilenparameter an:
   + `project_arn` – Der ARN des Quellprojekts, an das Sie die Projektrichtlinie anfügen möchten. 
   + `project_policy_name` – Ein Richtlinienname, den Sie wählen. 
   + `project_policy_document` – Die Datei, die das Dokument mit den Projektrichtlinien enthält.
   + `project_policy_revision_id` – (Optional). Wenn Sie eine bestehende Version einer Projektrichtlinie aktualisieren möchten, geben Sie die Revisions-ID der Projektrichtlinie an.

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   
   package com.example.rekognition;
   
   import java.io.IOException;
   import java.nio.file.Files;
   import java.nio.file.Path;
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.PutProjectPolicyRequest;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   
   public class PutProjectPolicy {
   
       public static final Logger logger = Logger.getLogger(PutProjectPolicy.class.getName());
   
       public static void putMyProjectPolicy(RekognitionClient rekClient, String projectArn, String projectPolicyName,
                String projectPolicyFileName, String projectPolicyRevisionId) throws IOException {
   
           try {
   
               Path filePath = Path.of(projectPolicyFileName);
   
               
   
               String policyDocument = Files.readString(filePath);
   
               String[] logArguments = new String[] { projectPolicyFileName, projectPolicyName };
   
               PutProjectPolicyRequest putProjectPolicyRequest = null;
   
               logger.log(Level.INFO, "Attaching Project policy: {0} to project: {1}", logArguments);
   
               // Attach the project policy.
   
               if (projectPolicyRevisionId == null) {
                   putProjectPolicyRequest = PutProjectPolicyRequest.builder().projectArn(projectArn)
                           .policyName(projectPolicyName).policyDocument(policyDocument).build();
               } else {
                   putProjectPolicyRequest = PutProjectPolicyRequest.builder().projectArn(projectArn)
                           .policyName(projectPolicyName).policyRevisionId(projectPolicyRevisionId)
                           .policyDocument(policyDocument)
   
                           .build();
               }
   
               rekClient.putProjectPolicy(putProjectPolicyRequest);
   
               logger.log(Level.INFO, "Attached Project policy: {0} to project: {1}", logArguments);
   
           } catch (
   
           RekognitionException e) {
               logger.log(Level.SEVERE, "Client error occurred: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String args[]) {
   
           final String USAGE = "\n" + "Usage: "
                   + "<project_arn> <project_policy_name> <policy_document> <project_policy_revision_id>\n\n" + "Where:\n"
                   + "   project_arn - The ARN of the project that you want to attach the project policy to.\n\n"
                   + "   project_policy_name - A name for the project policy.\n\n"
                   + "   project_policy_document - The file name of the project policy.\n\n"
                   + "   project_policy_revision_id - (Optional) The revision ID of the project policy that you want to update.\n\n";
   
           if (args.length < 3 || args.length > 4) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           String projectArn = args[0];
           String projectPolicyName = args[1];
           String projectPolicyDocument = args[2];
           String projectPolicyRevisionId = null;
   
           if (args.length == 4) {
               projectPolicyRevisionId = args[3];
           }
   
           try {
   
               RekognitionClient rekClient = RekognitionClient.builder()
               .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
               .region(Region.US_WEST_2)
               .build();
   
           
               // Attach the project policy.
               putMyProjectPolicy(rekClient, projectArn, projectPolicyName, projectPolicyDocument,
                       projectPolicyRevisionId);
   
               System.out.println(
                       String.format("project policy %s: attached to project: %s", projectPolicyName, projectArn));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
           catch (IOException intError) {
               logger.log(Level.SEVERE, "Exception while reading policy document: {0}", intError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

1. Kopieren Sie die Modellversion, indem Sie den Anweisungen unter [Kopieren eines Modells (SDK)](md-copy-model-sdk.md) folgen. 