IAM-Zugriffsverwaltung - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

IAM-Zugriffsverwaltung

In den folgenden Abschnitten werden die AWS Identity and Access Management (IAM-) Anforderungen für Amazon SageMaker Model Building Pipelines beschrieben. Ein Beispiel dafür, wie Sie diese Berechtigungen implementieren können, finden Sie unter Voraussetzungen.

Berechtigungen für Pipeline-Rollen

Ihre Pipeline erfordert eine IAM-Pipeline-Ausführungsrolle, die an SageMaker Pipelines übergeben wird, wenn Sie eine Pipeline erstellen. Die Rolle für die SageMaker Instanz, die die Pipeline erstellt, muss über die iam:PassRole Berechtigung für die Pipeline-Ausführungsrolle verfügen, um sie übergeben zu können. Weitere Informationen zu IAM-Rollen finden Sie unter IAM-Rollen.

Für Ihre Pipeline-Ausführungsrolle sind die folgenden Berechtigungen erforderlich:

  • Um eine Rolle an einen SageMaker Job innerhalb einer Pipeline zu übergeben, ist dies die iam:PassRole Berechtigung für die Rolle, die übergeben wird. 

  • Create und Describe Berechtigungen für jeden Jobtyp in der Pipeline.

  • Amazon-S3-Berechtigungen zur Verwendung der JsonGet Funktion. Sie können den Zugriff auf Ressourcen mit einer identitätsbasierten oder ressourcenbasierten Richtlinie steuern. Eine ressourcenbasierte Richtlinie wird auf Ihren Amazon S3 S3-Bucket angewendet und gewährt SageMaker Pipelines Zugriff auf den Bucket. Eine identitätsbasierte Richtlinie gibt Ihrer Pipeline die Möglichkeit, Amazon-S3-Anrufe von Ihrem Konto aus zu tätigen. Weitere Informationen zu ressourcenbasierten Richtlinien finden Sie unter Identitätsbasierte und ressourcenbasierte Richtlinien.

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

Berechtigungen für Pipeline-Schritte

SageMaker Pipelines enthalten Schritte, mit denen Jobs ausgeführt werden. SageMaker Damit die Pipeline-Schritte diese Jobs ausführen können, benötigen sie eine IAM-Rolle in Ihrem Konto, die Zugriff auf die benötigte Ressource bietet. Diese Rolle wird von Ihrer Pipeline an den SageMaker Dienstprinzipal übergeben. Weitere Informationen zu Rollen finden Sie unter IAM-Rollen.

Standardmäßig übernimmt jeder Schritt die Rolle der Pipeline-Ausführung. Sie können optional jedem der Schritte in Ihrer Pipeline eine andere Rolle zuweisen. Dadurch wird sichergestellt, dass sich der Code in den einzelnen Schritten nicht auf Ressourcen auswirken kann, die in anderen Schritten verwendet werden, es sei denn, es besteht eine direkte Beziehung zwischen den beiden in der Pipeline-Definition angegebenen Schritten. Sie übergeben diese Rollen, wenn Sie den Prozessor oder den Schätzer für Ihren Schritt definieren. Beispiele dafür, wie diese Rollen in diese Definitionen aufgenommen werden können, finden Sie in der SageMakerPython SDK-Dokumentation.

Passen Sie die Zugriffsverwaltung für SageMaker Pipelines-Jobs an

Sie können Ihre IAM-Richtlinien weiter anpassen, sodass ausgewählte Mitglieder in Ihrer Organisation einzelne oder alle Pipeline-Schritte ausführen können. Sie können beispielsweise bestimmten Benutzern die Berechtigung zum Erstellen von Trainingsaufträgen und einer anderen Benutzergruppe die Berechtigung zum Erstellen von Verarbeitungsaufträgen und all Ihren Benutzern die Erlaubnis erteilen, die verbleibenden Schritte auszuführen. Um diese Funktion zu verwenden, wählen Sie eine benutzerdefinierte Zeichenfolge aus, die Ihrem Jobnamen vorangestellt wird. Ihr Administrator stellt den zulässigen ARNs das Präfix voran, während Ihr Data Scientist dieses Präfix in Pipeline-Instanziierungen einbezieht. Da die IAM-Richtlinie für zugelassene Benutzer einen Job-ARN mit dem angegebenen Präfix enthält, verfügen nachfolgende Jobs Ihres Pipeline-Schritts über die erforderlichen Berechtigungen, um fortzufahren. Das Job-Präfix ist standardmäßig deaktiviert. Sie müssen diese Option in Ihrer Pipeline Klasse aktivieren, um sie verwenden zu können.

Bei Jobs mit deaktiviertem Präfix wird der Jobname wie abgebildet formatiert und ist eine Verkettung von Feldern, die in der folgenden Tabelle beschrieben werden:

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

Feld Definition

Pipelines

Eine statische Zeichenfolge wird immer vorangestellt. Diese Zeichenfolge identifiziert den Pipeline-Orchestrierungsdienst als Quelle des Jobs.

executionId

Ein zufälliger Puffer für die laufende Instance der Pipeline.

Schritt NamePrefix

Der vom Benutzer angegebene Schrittname (im name Argument des Pipeline-Schritts angegeben), begrenzt auf die ersten 20 Zeichen.

entityToken

Ein zufälliges Token, um die Idempotenz der Schrittentität sicherzustellen.

failureCount

Die aktuelle Anzahl der Versuche, den Job abzuschließen.

In diesem Fall wird dem Jobnamen kein benutzerdefiniertes Präfix vorangestellt, und die entsprechende IAM-Richtlinie muss mit dieser Zeichenfolge übereinstimmen.

Für Benutzer, die das Job-Präfix aktivieren, hat der zugrunde liegende Jobname die folgende Form, wobei das benutzerdefinierte Präfix wie folgt angegeben ist: MyBaseJobName

< MyBase JobName > - <executionId>- <entityToken>- <failureCount>

Das benutzerdefinierte Präfix ersetzt die statische pipelines Zeichenfolge, damit Sie die Auswahl der Benutzer einschränken können, die den SageMaker Job als Teil einer Pipeline ausführen können.

Längenbeschränkungen für das Präfix

Die Auftragsnamen haben interne Längenbeschränkungen, die für einzelne Pipeline-Schritte spezifisch sind. Diese Einschränkung begrenzt auch die Länge des zulässigen Präfixes. Die Anforderungen an die Präfixlänge lauten wie folgt:

Wenden Sie Job-Präfixe auf eine IAM-Richtlinie an

Ihr Administrator erstellt IAM-Richtlinien, die es Benutzern mit bestimmten Präfixen ermöglichen, Jobs zu erstellen. Die folgende Beispielrichtlinie ermöglicht es Datenwissenschaftlern, Trainingsjobs zu erstellen, wenn sie das MyBaseJobName Präfix verwenden.

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

Wenden Sie Job-Präfixe auf Pipeline-Instanziierungen an

Sie geben Ihr Präfix mit dem *base_job_name Argument der Job-Instance-Klasse an.

Anmerkung

Sie übergeben Ihr Job-Präfix mit dem *base_job_name Argument an die Job-Instance, bevor Sie einen Pipeline-Schritt erstellen. Diese Auftrags-Instance enthält die erforderlichen Informationen, damit der Job als Schritt in einer Pipeline ausgeführt werden kann. Dieses Argument hängt von der verwendeten Auftrags-Instance ab. Die folgende Liste zeigt, welches Argument für jeden Pipeline-Schritttyp verwendet werden sollte:

  • base_job_name für die Klassen Estimator (TrainingStep), Processor (ProcessingStep) und AutoML (AutoMLStep)

  • tuning_base_job_name für die Tuner Klasse (TuningStep)

  • transform_base_job_name für die Transformer Klasse (TransformStep)

  • base_job_name von CheckJobConfig für die Klassen QualityCheckStep (Qualitätsprüfung) und ClarifyCheckstep (Klärungsprüfung)

  • Für die Model Klasse hängt das verwendete Argument davon ab, ob Sie das Modell ausführen create oder ob es register sich um Ihr Modell handelt, bevor das Ergebnis an übergeben wird ModelStep

    • Wenn Sie create aufrufen, stammt das benutzerdefinierte Präfix aus dem name Argument, das Sie bei der Konstruktion Ihres Modells angegeben haben (d. h., Model(name=))

    • Wenn Sie register aufrufen, stammt das benutzerdefinierte Präfix aus dem model_package_name Argument Ihres Aufrufs von register (d. h., my_model.register(model_package_name=))

Im folgenden Beispiel wird gezeigt, wie Sie ein Präfix für eine neue Trainingsauftrags-Instance angeben:

# 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(...) } )

Das Auftrag-Präfix ist standardmäßig deaktiviert. Um sich für diese Funktion zu entscheiden, verwenden Sie die use_custom_job_prefix Option von PipelineDefinitionConfig, wie im folgenden Codeausschnitt gezeigt:

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 )

Erstellen Sie Ihre Pipeline und führen Sie sie aus. Im folgenden Beispiel wird eine Pipeline erstellt und ausgeführt. Außerdem wird veranschaulicht, wie Sie das Auftrag-Präfix deaktivieren und Ihre Pipeline erneut ausführen können.

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()

In ähnlicher Weise können Sie die Funktion für bestehende Pipelines aktivieren und eine neue Ausführung starten, die Auftragspräfixe verwendet.

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

Schließlich können Sie Ihren Auftrag mit einem benutzerdefinierten Präfix anzeigen, indem Sie die Pipeline-Ausführung aufrufenlist_steps.

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

Service-Kontrollrichtlinien mit Pipelines

Service-Kontrollrichtlinien (Service Control Policies, SCPs) sind eine Art von Organisationsrichtlinien, die Sie zum Verwalten von Berechtigungen in Ihrer Organisation verwenden können. SCPs bieten eine zentrale Kontrolle über die maximal verfügbaren Berechtigungen aller Konten Ihrer Organisation. Durch die Verwendung von SageMaker Pipelines in Ihrer Organisation können Sie sicherstellen, dass Datenwissenschaftler Ihre Pipeline-Ausführungen verwalten, ohne mit der AWS Konsole interagieren zu müssen. 

Wenn Sie eine VPC mit Ihrem SCP verwenden, die den Zugriff auf Amazon S3 einschränkt, müssen Sie Maßnahmen ergreifen, damit Ihre Pipeline auf andere Amazon S3-Ressourcen zugreifen kann.

Um SageMaker Pipelines den Zugriff auf Amazon S3 außerhalb Ihrer VPC mit dieser JsonGet Funktion zu ermöglichen, aktualisieren Sie den SCP Ihrer Organisation, um sicherzustellen, dass die Rolle, die SageMaker Pipelines verwendet, auf Amazon S3 zugreifen kann. Erstellen Sie dazu mithilfe eines Prinzipal-Tags und eines Bedingungsschlüssels eine Ausnahme für Rollen, die vom SageMaker Pipeline-Executor über die Pipeline-Ausführungsrolle verwendet werden.

Um SageMaker Pipelines den Zugriff auf Amazon S3 außerhalb Ihrer VPC zu ermöglichen
  1. Erstellen Sie ein eindeutiges Tag für Ihre Pipeline-Ausführungsrolle, indem Sie die Schritte unter Taggen von IAM-Benutzern und -Rollen befolgen.

  2. Gewähren Sie in Ihrem SCP mithilfe des Aws:PrincipalTag IAM Bedingungsschlüssels für das von Ihnen erstellte Tag eine Ausnahme. Weitere Informationen finden Sie unter Erstellen, Aktualisieren und Löschen von Service-Kontrollrichtlinien.