Asociación de una política de proyecto (SDK) - Rekognition

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.

Asociación de una política de proyecto (SDK)

Para asociar una política de proyecto a un proyecto de Etiquetas personalizadas de Amazon Rekognition, debe llamar a la operación PutProjectPolicy.

Asocie varias políticas de proyecto en un proyecto llamando a PutProjectPolicy por cada política de proyecto que desee añadir. Puedes asociar hasta cinco políticas de proyecto a un proyecto. Si necesita asociar más políticas de proyecto, puede solicitar que se aumente el límite.

La primera vez que asocie una política de proyecto única a un proyecto, no indique ningún ID de revisión en el parámetro de entrada PolicyRevisionId. La respuesta de PutProjectPolicy es un ID de revisión de la política de proyecto que Etiquetas personalizadas de Amazon Rekognition crea para usted. Puede usar el ID de revisión para actualizar o eliminar la última revisión de una política de proyecto. Etiquetas personalizadas de Amazon Rekognition solo conserva la última revisión de la política de un proyecto. Si intenta modificar o eliminar la revisión anterior de una política de proyecto, le aparecerá el error InvalidPolicyRevisionIdException.

Para modificar una política de proyecto existente, indique el ID de revisión de la política del proyecto en el parámetro de entrada PolicyRevisionId. Puede obtener los ID de revisión de las políticas de proyecto llamando a ListProjectPolicies.

Después de asociar una política de proyecto a un proyecto de origen, puede copiar el modelo del proyecto de origen al proyecto de destino. Para obtener más información, consulte Copia de un modelo (SDK).

Para eliminar la política de proyecto de un proyecto, llame a DeleteProjectPolicy. Para ver una lista de las políticas de proyecto asociadas a un proyecto, llame a ListProjectPolicies.

Cómo asociar una política de proyecto a un proyecto (SDK)
  1. Si aún no lo ha hecho, instale y configure la AWS CLI y los SDK de AWS. Para obtener más información, consulte Paso 4: Configure los SDK y AWS CLIAWS.

  2. Cree un documento de política de proyecto.

  3. Utilice el siguiente código para asociar la política de proyecto al proyecto, en la cuenta de AWS de confianza, que incluya la versión del modelo que desee copiar. Para obtener el ARN del proyecto, llame a DescribeProjects. Para obtener el ARN de la versión del modelo, llame a DescribeProjectVersions.

    AWS CLI

    Cambie los siguientes valores:

    • project-arn por el ARN del proyecto de origen en la cuenta de AWS de confianza que incluya la versión del modelo que desee copiar.

    • policy-name por el nombre de política que elija.

    • principal: por la entidad principal a la que desee permitir o denegar el acceso a las versiones del modelo que indique en Model version ARN.

    • project-version-arn por el ARN de la versión del modelo que desee copiar.

    Si desea modificar una política de proyecto existente, indique el parámetro policy-revision-id e incluya el ID de revisión de la política del proyecto deseada.

    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

    Utilice el siguiente código. Indique los siguientes parámetros de línea de comandos:

    • project_arn: el ARN del proyecto de origen al que desee asociar la política del proyecto.

    • policy_name: el nombre de política que elija.

    • project_policy: el archivo que contiene el documento de la política de proyecto.

    • policy_revision_id: (Opcional). Si desea modificar la revisión de una política de proyecto existente, indique el ID de revisión de la política de proyecto.

    # 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

    Utilice el siguiente código. Indique los siguientes parámetros de línea de comandos:

    • project_arn: el ARN del proyecto de origen al que desee asociar la política del proyecto.

    • project_policy_name: el nombre de política que elija.

    • project_policy_document: el archivo que contiene el documento de la política de proyecto.

    • project_policy_revision_id: (Opcional). Si desea modificar la revisión de una política de proyecto existente, indique el ID de revisión de la política de proyecto.

    /* 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); } } }
  4. Copie la versión del modelo siguiendo las instrucciones que aparecen en Copia de un modelo (SDK).