IAM アクセス管理 - Amazon SageMaker

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

IAM アクセス管理

以下のセクションでは、Amazon SageMaker Pipelines の AWS Identity and Access Management (IAM) 要件について説明します。これらのアクセス許可の実装例については、「前提条件」を参照してください。

パイプラインロールのアクセス許可

パイプラインを作成するには、パイプラインの作成時にパイプラインに渡すIAMパイプライン実行ロールが必要です。パイプラインを作成する SageMaker インスタンスのロールにはiam:PassRole、パイプライン実行ロールのアクセス許可が必要です。IAMロールの詳細については、IAM「 ロール」を参照してください。

パイプラインの実行ロールには、次のアクセス許可が必要です。

  • パイプライン内の SageMaker ジョブにロールを渡すには、iam:PassRole渡すロールのアクセス許可。 

  • パイプライン内の各ジョブタイプに対する CreateDescribe のアクセス許可。

  • JsonGet 関数を使用するための Amazon S3 アクセス許可。Amazon S3 リソースへのアクセスは、リソースベースのポリシーとアイデンティティベースのポリシーを使用して制御します。リソースベースのポリシーが Amazon S3 バケットに適用され、パイプラインにバケットへのアクセスを許可します。アイデンティティベースのポリシーは、アカウントから Amazon S3 呼び出しを行う機能をパイプラインに提供します。リソースベースのポリシーとアイデンティティベースのポリシーの詳細については、「アイデンティティベースのポリシーとリソースベースのポリシー」を参照してください。

    { "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::<your-bucket-name>/*", "Effect": "Allow" }

パイプラインステップのアクセス許可

パイプラインには、 SageMaker ジョブを実行するステップが含まれます。パイプラインステップでこれらのジョブを実行するには、必要なリソースへのアクセスを提供するIAMロールを アカウントに必要です。このロールは、パイプラインによって SageMaker サービスプリンシパルに渡されます。IAM ロールの詳細については、IAM「 ロール」を参照してください。

デフォルトでは、各ステップがパイプラインの実行ロールを取得します。必要に応じて、パイプラインの任意のステップに別のロールを渡すこともできます。こうすることで、パイプライン定義で指定される 2 つのステップ間に直接的な関係がない限り、各ステップのコードは他のステップで使用されるリソースに影響を与えないようになります。これらのロールは、ステップのプロセッサや推定器を定義するときに渡します。これらの定義にこれらのロールを含める方法の例については、SageMakerPython SDKドキュメント を参照してください。

Pipelines ジョブのアクセス管理をカスタマイズする

さらにIAMポリシーをカスタマイズして、組織内の選択したメンバーがパイプラインステップの一部またはすべてを実行できるようにします。例えば、特定のユーザーにトレーニングジョブを作成するアクセス許可を付与し、別のユーザーグループに処理ジョブを作成するアクセス許可を付与し、すべてのユーザーに残りのステップを実行するアクセス許可を付与できます。この機能を使用するには、ジョブ名にプレフィックスとして付けるカスタム文字列を選択します。管理者は、許可された にプレフィックスARNsを付加し、データサイエンティストはパイプラインインスタンス化にこのプレフィックスを含めます。許可されたユーザーのIAMポリシーには、指定されたプレフィックスARNを持つジョブが含まれているため、パイプラインステップの後続のジョブには、続行するために必要なアクセス許可があります。ジョブプレフィックスはデフォルトではオフになっています。使用するには Pipeline クラスでこのオプションをオンにする必要があります。

プレフィックスがオフになっているジョブの場合、ジョブ名は次の表で説明するフィールドを連結した形式になります。

pipelines-<executionId>-<stepNamePrefix>-<entityToken>-<failureCount>

フィールド 定義

pipelines

常に静的な文字列が先頭に追加されます。この文字列は、パイプラインオーケストレーションサービスをジョブのソースとして識別します。

executionId

実行中のパイプラインインスタンス用のランダム化されたバッファ。

stepNamePrefix

ユーザー指定のステップ名 (パイプラインステップの name 引数で指定)。最初の 20 文字に制限されます。

entityToken

ステップエンティティが冪等性であることを保証するためのランダム化されたトークン。

failureCount

ジョブを完了するために試行された現在の再試行回数。

この場合、ジョブ名にカスタムプレフィックスが付加されず、対応するIAMポリシーがこの文字列と一致する必要があります。

ジョブプレフィックスを有効にするユーザーの場合、基になるジョブ名は次の形式になり、カスタムプレフィックスは MyBaseJobName として指定されます。

<MyBaseJobName>-<executionId>-<entityToken>-<failureCount>

カスタムプレフィックスは静的pipelines文字列を置き換え、パイプラインの一部として SageMaker ジョブを実行できるユーザーの選択を絞り込むのに役立ちます。

プレフィックスの長さ制限

ジョブ名には、個々のパイプラインステップに固有の内部の長さ制限があります。この制約により、許可されるプレフィックスの長さも制限されます。プレフィックスの長さの要件は以下のとおりです。

パイプラインのステップ プレフィックスの長さ

TrainingStep, ModelStep, TransformStep, ProcessingStep, ClarifyCheckStep, QualityCheckStep, RegisterModelStep

38

TuningStep, AutoML

6

IAM ポリシーにジョブプレフィックスを適用する

管理者は、特定のプレフィックスのユーザーがジョブを作成できるようにするIAMポリシーを作成します。以下のポリシーの例では、データサイエンティストに、MyBaseJobName プレフィックスを使用する場合にトレーニングジョブの作成を許可しています。

{ "Action": "sagemaker:CreateTrainingJob", "Effect": "Allow", "Resource": [ "arn:aws:sagemaker:region:account-id:*/MyBaseJobName-*" ] }

ジョブプレフィックスをパイプラインインスタンス化に適用する

プレフィックスをジョブインスタンスクラスの *base_job_name 引数で指定します。

注記

パイプラインステップを作成する前に、*base_job_name 引数付きのジョブプレフィックスをジョブインスタンスに渡します。このジョブインスタンスには、ジョブをパイプラインのステップとして実行するのに必要な情報が含まれています。この引数は、使用するジョブインスタンスによって異なります。次のリストは、各パイプラインステップタイプにどの引数を使用するかを示しています。

  • Estimator (TrainingStep)、Processor (ProcessingStep)、AutoML (AutoMLStep) クラス用の base_job_name

  • Tunerクラス (TuningStep) 用の tuning_base_job_name

  • Transformerクラス (TransformStep) 用の transform_base_job_name

  • QualityCheckStep (品質チェック) クラスと ClarifyCheckstep (明確化チェック) クラス用の CheckJobConfigbase_job_name

  • Model クラスに使用される引数は、結果を ModelStep に渡す前にモデルに対して create を実行するか register を実行するかによって異なります。

    • create を呼び出す場合、カスタムプレフィックスはモデルを構築するときの name 引数から取得されます (つまり Model(name=))。

    • register を呼び出す場合、カスタムプレフィックスは register 呼び出しの model_package_name 引数から取得されます (つまり my_model.register(model_package_name=))

次の例は、新しいトレーニングジョブインスタンスのプレフィックスを指定する方法を示しています。

# Create a job instance xgb_train = Estimator( image_uri=image_uri, instance_type="ml.m5.xlarge", instance_count=1, output_path=model_path, role=role, subnets=["subnet-0ab12c34567de89f0"], base_job_name="MyBaseJobName" security_group_ids=["sg-1a2bbcc3bd4444e55"], tags = [ ... ] encrypt_inter_container_traffic=True, ) # Attach your job instance to a pipeline step step_train = TrainingStep( name="TestTrainingJob", estimator=xgb_train, inputs={ "train": TrainingInput(...), "validation": TrainingInput(...) } )

ジョブプレフィックスはデフォルトではオフになっています。この機能を有効にするには、以下のスニペットに示す PipelineDefinitionConfiguse_custom_job_prefix オプションを使用します。

from sagemaker.workflow.pipeline_definition_config import PipelineDefinitionConfig # Create a definition configuration and toggle on custom prefixing definition_config = PipelineDefinitionConfig(use_custom_job_prefix=True); # Create a pipeline with a custom prefix pipeline = Pipeline( name="MyJobPrefixedPipeline", parameters=[...] steps=[...] pipeline_definition_config=definition_config )

パイプラインを作成して実行します。次の例では、パイプラインを作成して実行し、ジョブのプレフィックスをオフにしてパイプラインを再実行する方法も示しています。

pipeline.create(role_arn=sagemaker.get_execution_role()) # Optionally, call definition() to confirm your prefixed job names are in the built JSON pipeline.definition() pipeline.start() # To run a pipeline without custom-prefixes, toggle off use_custom_job_prefix, update the pipeline # via upsert() or update(), and start a new run definition_config = PipelineDefinitionConfig(use_custom_job_prefix=False) pipeline.pipeline_definition_config = definition_config pipeline.update() execution = pipeline.start()

同様に、既存のパイプラインでもこの機能をオンに切り替えて、ジョブプレフィックスを使用する新規の実行を開始できます。

definition_config = PipelineDefinitionConfig(use_custom_job_prefix=True) pipeline.pipeline_definition_config = definition_config pipeline.update() execution = pipeline.start()

最後に、パイプライン実行時に list_steps を呼び出して、カスタムプレフィックスが付いたジョブを表示できます。

steps = execution.list_steps() prefixed_training_job_name = steps['PipelineExecutionSteps'][0]['Metadata']['TrainingJob']['Arn']

Pipelines を使用したサービスコントロールポリシー

サービスコントロールポリシー (SCPs) は、組織内のアクセス許可を管理するために使用できる組織ポリシーの一種です。SCPs は、組織内のすべてのアカウントで使用可能な最大アクセス許可を一元的に制御します。組織内でパイプラインを使用すると、データサイエンティストが AWS コンソールを操作することなくパイプラインの実行を管理できます。 

Amazon S3 へのアクセスSCPを制限する VPCで を使用している場合は、パイプラインが他の Amazon S3 リソースにアクセスできるようにする手順を実行する必要があります。 Amazon S3

Pipelines が JsonGet関数VPCを使用して の外部で Amazon S3 にアクセスできるようにするには、組織の を更新SCPして、Pipellines を使用するロールが Amazon S3 にアクセスできることを確認します。これを行うには、プリンシパルタグと条件キーを使用して、パイプライン実行ロールを介してパイプラインエグゼキュターが使用しているロールの例外を作成します。

Pipelines が の外部で Amazon S3 にアクセスできるようにするには VPC
  1. IAM 「ユーザーとロールのタグ付け」の手順に従って、パイプライン実行ロールの一意のタグを作成します。

  2. 作成したタグAws:PrincipalTag IAMの条件キーSCPを使用して、 で例外を付与します。詳細については、「サービスコントロールポリシーの作成、更新、削除」を参照してください。