プロジェクトポリシーのアタッチ (SDK) - Rekognition

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

プロジェクトポリシーのアタッチ (SDK)

Amazon Rekognition Custom Labels プロジェクトにプロジェクトポリシーをアタッチするには、PutProjectPolicy オペレーションを呼び出します。

追加するプロジェクトポリシーごとに PutProjectPolicy を呼び出すことにより、複数のプロジェクトポリシーをプロジェクトにアタッチします。1 つのプロジェクトには最大 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 を呼び出します。モデルバージョンを取得するには、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)」の手順に従ってモデルバージョンをコピーします。