IAM访问管理 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

IAM访问管理

以下各节介绍了 Amazon Pipelin SageMaker es 的 Amazon Identity and Access Management (IAM) 要求。有关如何实施这些权限的示例,请参阅先决条件

管道角色权限

您的管道需要一个IAM管道执行角色,该角色将在您创建管道时传递给流水线。 创建管道的 SageMaker 实例的角色必须拥有管道执行角色的iam:PassRole权限才能通过管道执行角色。 有关IAM角色的更多信息,请参阅IAM角色

您的管道执行角色需要以下权限:

  • 要将任何角色传递给管道内的 SageMaker 作业,则指正在传递的角色的iam:PassRole权限。 

  • 管道中每种作业类型的 CreateDescribe 权限。

  • Amazon S3 使用 JsonGet 函数的权限。您可以使用基于资源的策略和基于身份的策略来控制对 Amazon S3 资源的访问。基于资源的策略将应用于您的 Amazon S3 存储桶,并授予 Pipelines 访问该存储桶的权限。基于身份的策略使您的管道能够从您的账户调用 Amazon S3。有关基于资源的策略和基于身份的策略的更多信息,请参阅基于身份的策略和基于资源的策略

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

管道步骤权限

管道包括运行 SageMaker 作业的步骤。为了使管道步骤能够运行这些作业,它们需要在您的账户中有一个IAM角色来提供对所需资源的访问权限。此角色由您的管道传递给 SageMaker 服务主体。有关IAM角色的更多信息,请参阅IAM角色

默认情况下,每个步骤都扮演管道执行角色。您可以选择将不同的角色传递给管道中的任何步骤。这样可以确保每个步骤中的代码不会影响其他步骤中使用的资源,除非管道定义中指定的两个步骤之间存在直接关系。您可以在为步骤定义处理器或估算器时传递这些角色。有关如何在这些定义中包含这些角色的示例,请参阅 SageMakerPython SDK 文档

自定义管道作业的访问管理

您可以进一步自定义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 作业的用户的选择范围。

前缀长度限制

作业名称具有特定于各个管道步骤的内部长度限制。此约束还限定了允许的前缀长度。前缀长度要求如下:

将作业前缀应用于策略 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']

使用管道的服务控制策略

服务控制策略 (SCPs) 是一种组织策略,可用于管理组织中的权限。SCPs集中控制组织中所有账户的最大可用权限。通过在组织中使用 Pipelines,您可以确保数据科学家无需与 Amazon 控制台交互即可管理您的管道执行。 

如果您使用SCP的是限制访问 Amazon S3 的,则需要采取措施允许您的管道访问其他 Amazon S3 资源。VPC

要允许 Pipelines 使用该JsonGet功能在您VPC之外访问 Amazon S3,请更新您的组织SCP以确保使用管道的角色可以访问 Amazon S3。为此,请使用主体标签和条件键为管道执行者通过管道执行角色使用的角色创建一个例外。

允许 Pipelines 在您的外部访问 Amazon S3 VPC
  1. 按照标记IAM用户和角色中的步骤,为您的管道执行角色创建唯一的标签

  2. 在SCP使用您创建的标签的Aws:PrincipalTag IAM条件密钥时允许例外。有关更多信息,请参阅创建、更新和删除服务控制策略