Como anexar uma política de projeto (SDK) - Rekognition

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

Como anexar uma política de projeto (SDK)

Uma política de projeto é anexada a um projeto Amazon Rekognition Custom Labels chamando a operação PutProjectPolicy.

Anexe várias políticas de projeto a um projeto chamando PutProjectPolicy para cada política de projeto que você deseja adicionar. É possível anexar até cinco políticas de projeto a um projeto. Se precisar anexar mais políticas de projeto, solicite um aumento de limite.

Ao anexar pela primeira vez uma política de projeto exclusiva a um projeto, não especifique uma ID de revisão no parâmetro de entrada PolicyRevisionId. A resposta de PutProjectPolicy é um ID de revisão da política do projeto que o Amazon Rekognition Custom Labels cria para você. É possível usar o ID da revisão para atualizar ou excluir a revisão mais recente de uma política do projeto. O Amazon Rekognition Custom Labels mantém somente a revisão mais recente da política de um projeto. Se tentar atualizar ou excluir uma revisão anterior de uma política de projeto, receberá um erro InvalidPolicyRevisionIdException.

Para atualizar uma política de projeto existente, especifique o ID de revisão da política de projeto no parâmetro de entrada PolicyRevisionId. É possível obter os IDs de revisão das políticas do projeto em um projeto chamando ListProjectPolicies.

Depois de anexar uma política de projeto a um projeto de origem, é possível copiar o modelo do projeto de origem para o projeto de destino. Para obter mais informações, consulte Como copiar um modelo (SDK).

Para remover uma política de projeto de um projeto, chame DeleteProjectPolicy. Para obter uma lista das políticas do projeto anexadas a um projeto, chame ListProjectPolicies.

Para anexar uma política de projeto a um projeto (SDK)
  1. Se ainda não tiver feito isso, instale e configure a AWS CLI e os AWS SDKs. Para obter mais informações, consulte Etapa 2: configure a AWS CLI e os AWS SDKs.

  2. Crie um documento de política do projeto.

  3. Use o código a seguir para anexar a política do projeto ao projeto, na conta confiável da AWS, que contém a versão do modelo que você deseja copiar. Para obter a chamada do ARN, chame DescribeProjects. Para obter a chamada do ARN da versão do modelo, chame DescribeProjectVersions.

    AWS CLI

    Altere os seguintes valores:

    • project-arn para o ARN do projeto de origem na conta confiável da AWS que contém a versão do modelo que você deseja copiar.

    • policy-name para um nome de política que você escolher.

    • principal> para a entidade principal que deseja permitir ou negar o acesso às versões do modelo que você especificar no Model version ARN.

    • project-version-arn para o ARN da versão do modelo que você deseja copiar.

    Se quiser atualizar uma política de projeto existente, especifique o parâmetro policy-revision-id e forneça o ID de revisão da política de projeto desejada.

    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

    Use o seguinte código: Forneça os seguintes parâmetros de linha de comando:

    • project_arn: o ARN do projeto de origem ao qual você deseja anexar a política do projeto.

    • policy_name: um nome de política que você escolher.

    • project_policy: o arquivo que contém o documento de política do projeto.

    • policy_revision_id: (optional). Se quiser atualizar uma revisão existente da política de um projeto, especifique o ID de revisão da política de projeto.

    # 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

    Use o seguinte código: Forneça os seguintes parâmetros de linha de comando:

    • project_arn: o ARN do projeto de origem ao qual você deseja anexar a política do projeto.

    • project_policy_name: um nome de política que você escolher.

    • project_policy_document: o arquivo que contém o documento de política do projeto.

    • project_policy_revision_id: (optional). Se quiser atualizar uma revisão existente da política de um projeto, especifique o ID de revisão da política de projeto.

    /* 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 a versão do modelo seguindo as instruções em Como copiar um modelo (SDK).