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角色

依預設,每個步驟都具有管道執行角色。您可以選擇性地將不同的角色傳遞給管道中的任何步驟。這可確保每個步驟中的程式碼不會影響其他步驟中使用的資源,除非管道定義中指定的兩個步驟之間有直接關係。您可以在定義步驟的處理器或估算器時傳遞這些角色。如需如何在這些定義中包含這些角色的範例,請參閱 SageMaker Python SDK 文件

自訂管道任務的存取管理

您可以進一步自訂您的IAM政策,以便組織中選取的成員可以執行任何或所有管道步驟。例如,您可以授予特定使用者建立訓練任務的許可,以及另一組使用者建立處理任務的許可,以及所有使用者執行剩餘步驟的許可。要使用此功能,您可以選擇一個自訂字串,其字首位您的任務名稱。您的管理員在允許的 前面加上字首ARNs,而資料科學家在管道實例中包含此字首。由於允許使用者IAM的政策包含ARN具有指定字首的任務,因此管道步驟的後續任務具有必要的許可以繼續。任務字首預設為關閉 – 您必須在 Pipeline 類別中開啟此選項才能使用它。

對於關閉字首的任務,任務名稱的格式如圖所示,並且是下表所述欄位的串連:

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

欄位 定義

管道

靜態字串始終在前面。此字串會將管道協同運作服務識別為任務的來源。

executionId

管道執行中執行個體的隨機緩衝區。

stepNamePrefix

使用者指定的步驟名稱 (在管道步驟的 name 引數中指定),限制為前 20 個字元。

entityToken

一個隨機的權杖,用於確保步驟實體的等冪性。

failureCount

目前嘗試完成任務的重試次數。

在此情況下,沒有自訂字首會附加到任務名稱,且對應的IAM政策必須符合此字串。

對於開啟任務字首的使用者,基礎任務名稱會採用下列格式,並將自訂字首指定為 MyBaseJobName

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

自訂字首會取代靜態pipelines字串,以協助您縮小可做為管道一部分執行 SageMaker 任務的使用者選擇範圍。

字首長度限制

任務名稱具有特定於個別管道步驟的內部長度限制。此約束也會限制允許字首的長度。字首長度要求如下:

將任務字首套用至IAM政策

您的管理員會建立IAM政策,允許特定字首的使用者建立任務。下列範例正策允許資料科學家在使用 MyBaseJobName 字首時建立訓練任務。

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

將任務字首套用至管道建立

您可以使用任務執行個體類別的 *base_job_name 引數來指定字首。

注意

您可以在建立管道步驟之前,將任務字首和 *base_job_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 主控台互動。 

如果您使用 VPC 搭配 SCP限制對 Amazon S3 的存取,則需要採取步驟,讓您的管道能夠存取其他 Amazon S3 資源。

若要允許管道使用 VPCJsonGet函數存取 Amazon S3,請更新您組織的 SCP ,以確保使用管道的角色可存取 Amazon S3。若要執行此操作,請使用主體標籤和條件索引鍵,為 Pipelines 執行器透過管道執行角色使用的角色建立例外狀況。

允許管道在 外部存取 Amazon S3 VPC
  1. 依照標記IAM使用者和角色 中的步驟,為您的管道執行角色建立唯一的標籤

  2. SCP 使用您建立之標籤Aws:PrincipalTag IAM的條件索引鍵,在 中授予例外狀況。有關詳細資訊,請參閱建立、更新和刪除服務控制策略