翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
IAM アクセス管理
以下のセクションでは、Amazon SageMaker Pipelines の AWS Identity and Access Management (IAM) 要件について説明します。これらのアクセス許可の実装例については、「前提条件」を参照してください。
パイプラインロールのアクセス許可
パイプラインを作成するには、パイプラインの作成時にパイプラインに渡すIAMパイプライン実行ロールが必要です。パイプラインを作成する SageMaker インスタンスのロールにはiam:PassRole
、パイプライン実行ロールのアクセス許可が必要です。IAMロールの詳細については、IAM「 ロール」を参照してください。
パイプラインの実行ロールには、次のアクセス許可が必要です。
-
パイプライン内の SageMaker ジョブにロールを渡すには、
iam:PassRole
渡すロールのアクセス許可。 -
パイプライン内の各ジョブタイプに対する
Create
とDescribe
のアクセス許可。 -
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 |
ユーザー指定のステップ名 (パイプラインステップの |
entityToken |
ステップエンティティが冪等性であることを保証するためのランダム化されたトークン。 |
failureCount |
ジョブを完了するために試行された現在の再試行回数。 |
この場合、ジョブ名にカスタムプレフィックスが付加されず、対応するIAMポリシーがこの文字列と一致する必要があります。
ジョブプレフィックスを有効にするユーザーの場合、基になるジョブ名は次の形式になり、カスタムプレフィックスは MyBaseJobName
として指定されます。
<MyBaseJobName>
-<executionId>
-<entityToken>
-<failureCount>
カスタムプレフィックスは静的pipelines
文字列を置き換え、パイプラインの一部として SageMaker ジョブを実行できるユーザーの選択を絞り込むのに役立ちます。
プレフィックスの長さ制限
ジョブ名には、個々のパイプラインステップに固有の内部の長さ制限があります。この制約により、許可されるプレフィックスの長さも制限されます。プレフィックスの長さの要件は以下のとおりです。
パイプラインのステップ | プレフィックスの長さ |
---|---|
|
38 |
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
(明確化チェック) クラス用のCheckJobConfig
のbase_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(...) } )
ジョブプレフィックスはデフォルトではオフになっています。この機能を有効にするには、以下のスニペットに示す PipelineDefinitionConfig
の use_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
-
IAM 「ユーザーとロールのタグ付け」の手順に従って、パイプライン実行ロールの一意のタグを作成します。
-
作成したタグ
Aws:PrincipalTag IAM
の条件キーSCPを使用して、 で例外を付与します。詳細については、「サービスコントロールポリシーの作成、更新、削除」を参照してください。