프로젝트 정책(SDK) 연결 - Rekognition

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

프로젝트 정책(SDK) 연결

PutProjectPolicy 작업을 호출하여 Amazon Rekognition Custom Labels 프로젝트에 프로젝트 정책을 연결합니다.

추가하려는 각 프로젝트 정책마다 PutProjectPolicy 항목을 호출하여 여러 프로젝트 정책을 프로젝트에 연결하세요. 최대 5개의 프로젝트 정책을 프로젝트에 연결할 수 있습니다. 더 많은 프로젝트 정책을 추가해야 하는 경우 한도 증가를 요청할 수 있습니다.

고유한 프로젝트 정책을 프로젝트에 처음 첨부할 때는 PolicyRevisionId 입력 파라미터에 수정 ID를 지정하지 마세요. PutProjectPolicy의 응답은 Amazon Rekognition Custom Labels가 사용자를 위해 생성하는 프로젝트 정책의 수정 ID입니다. 수정 ID를 사용하여 프로젝트 정책의 최신 개정 버전을 업데이트하거나 삭제할 수 있습니다. Amazon Rekognition Custom Labels는 프로젝트 정책의 최신 개정 버전만 보관합니다. 프로젝트 정책의 이전 개정 버전을 업데이트하거나 삭제하려고 하면 InvalidPolicyRevisionIdException 오류가 발생합니다.

기존 프로젝트 정책을 업데이트하려면 PolicyRevisionId 입력 파라미터에 프로젝트 정책의 개정 ID를 지정합니다. ListProjectPolicies를 호출하여 프로젝트의 프로젝트 정책에 대한 개정 ID를 가져올 수 있습니다.

프로젝트 정책을 소스 프로젝트에 연결한 후 소스 프로젝트에서 대상 프로젝트로 모델을 복사할 수 있습니다. 자세한 내용은 모델 복사(SDK) 섹션을 참조하세요.

프로젝트에서 프로젝트 정책을 제거하려면 DeleteProjectPolicy를 호출하세요. 프로젝트에 첨부된 프로젝트 정책 목록을 가져오려면 ListProjectPolicies를 호출하세요.

프로젝트 정책을 프로젝트에 연결하려면(SDK)
  1. 아직 하지 않았다면 AWS CLI 및 AWS SDK를 설치하고 구성하세요. 자세한 내용은 4단계: 설정 AWS CLI 그리고 AWS SDKs 섹션을 참조하세요.

  2. 프로젝트 정책 문서를 생성합니다.

  3. 다음 코드를 사용하여 복사하려는 모델 버전이 포함된 신뢰하는 AWS 계정의 프로젝트에 프로젝트 정책을 첨부합니다. 프로젝트 ARN을 가져오려면 DescribeProjects를 호출하세요. 모델 버전 ARN을 가져오려면 DescribeProjectVersions를 호출하세요.

    AWS CLI

    다음 값을 변경합니다.

    • project-arn 항목을 복사하려는 모델 버전이 포함된 신뢰하는 AWS 계정의 소스 프로젝트 ARN으로 변경합니다.

    • policy-name 항목을 선택한 정책 이름으로 변경합니다.

    • principal 항목을 Model version ARN에서 지정한 모델 버전에 대한 액세스를 허용하거나 거부하려는 보안 주체로 변경합니다.

    • project-version-arn 항목을 복사하려는 모델 버전의 ARN으로 변경합니다.

    기존 프로젝트 정책을 업데이트하려면 policy-revision-id 파라미터를 지정하고 원하는 프로젝트 정책의 개정 ID를 제공하세요.

    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

    다음 코드를 사용합니다. 다음 명령줄 파라미터를 제공하세요.

    • project_arn: 프로젝트 정책을 연결할 소스 프로젝트의 ARN

    • policy_name: 사용자가 선택한 정책 이름

    • project_policy: 프로젝트 정책 문서가 들어 있는 파일

    • policy_revision_id: (선택 사항) 기존 프로젝트 정책의 개정 버전을 업데이트하려면 프로젝트 정책의 개정 ID를 지정하세요.

    # 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

    다음 코드를 사용합니다. 다음 명령줄 파라미터를 제공하세요.

    • project_arn: 프로젝트 정책을 연결할 소스 프로젝트의 ARN

    • project_policy_name: 사용자가 선택한 정책 이름

    • project_policy_document: 프로젝트 정책 문서가 들어 있는 파일

    • project_policy_revision_id: (선택 사항) 기존 프로젝트 정책의 개정 버전을 업데이트하려면 프로젝트 정책의 개정 ID를 지정하세요.

    /* 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. 모델 복사(SDK)의 지침에 따라 모델 버전을 복사하세요.