SageMaker 角色 - Amazon SageMaker

SageMaker 角色

Amazon SageMaker 使用其他 AWS 服务代表您执行操作。您必须向 SageMaker 授予使用这些服务及其所依赖的资源的权限。您可以使用 AWS Identity and Access Management (IAM) 执行角色向 SageMaker 授予这些权限。有关 IAM 角色的更多信息,请参阅 IAM 角色

要创建和使用执行角色,可以使用以下过程。

创建执行角色

使用以下过程创建一个执行角色,并附加 IAM 托管策略 AmazonSageMakerFullAccess。如果您的使用案例需要更精细的权限,请使用本页上的其他部分来创建满足业务需求的执行角色。您可以使用 SageMaker 控制台或 AWS CLI 创建执行角色。

重要

以下过程中使用的 IAM 管理策略 AmazonSageMakerFullAccess 只授予执行角色对名称中包含 SageMakerSagemakersagemakeraws-glue 的存储桶或对象执行特定 Amazon S3 操作的权限。要了解如何为执行角色添加附加策略,以授予其访问其他 Amazon S3 存储桶和对象的权限,请参阅向 SageMaker 执行角色添加其他 Amazon S3 权限

注意

创建 SageMaker 域或笔记本实例时,可以直接创建执行角色。

从 SageMaker 控制台创建新的执行角色

  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 选择 Role (角色),然后选择 Create role (创建角色)

  3. AWS 服务保留为可信实体类型,然后使用向下箭头在其他 AWS 服务的使用案例中找到 SageMaker

  4. 选择 SageMaker - 执行,然后选择下一步

  5. IAM 托管策略 AmazonSageMakerFullAccess 会自动附加到角色。要查看此策略中包含的权限,请选择策略名称旁边的加号 (+)。选择下一步

  6. 输入角色名称描述

  7. (可选)向角色添加其他权限和标签。

  8. 选择创建角色

  9. 在 IAM 控制台的角色部分中,找到刚刚创建的角色。如果需要,请通过文本框使用角色名称搜索角色。

  10. 在角色摘要页面上,记下 ARN。

从 AWS CLI 创建新的执行角色

使用 AWS CLI 创建执行角色之前,请务必按照 AWS CLI 先决条件中的说明对其进行更新和配置,然后继续按照从 AWS CLI 加入中的说明进行操作。

创建执行角色后,可以将其与 SageMaker 域、用户配置文件或 Jupyter 笔记本实例进行关联。

您也可以将执行角色的 ARN 传递给 API 调用。例如,使用 Amazon SageMaker Python SDK,您可以将执行角色的 ARN 传递给估算器。在下面的代码示例中,我们使用 XGBoost 算法容器创建估算器,并将执行角色的 ARN 作为参数传递。有关 GitHub 上的完整示例,请参阅 Customer Churn Prediction with XGBoost(利用 XGBoost 预测客户流失率)。

import sagemaker, boto3 from sagemaker import image_uris sess = sagemaker.Session() region = sess.boto_region_name bucket = sess.default_bucket() prefix = "sagemaker/DEMO-xgboost-churn" container = sagemaker.image_uris.retrieve("xgboost", region, "1.7-1") xgb = sagemaker.estimator.Estimator( container, execution-role-ARN, instance_count=1, instance_type="ml.m4.xlarge", output_path="s3://{}/{}/output".format(bucket, prefix), sagemaker_session=sess, ) ...

向 SageMaker 执行角色添加其他 Amazon S3 权限

当您对 Amazon S3 中的资源(如输入数据)使用 SageMaker 特征时,将使用您在请求中指定的执行角色(如 CreateTrainingJob)来访问这些资源。

如果您将 IAM 托管策略 AmazonSageMakerFullAccess 附加到一个执行角色,则该角色有权对名称中包含 SageMakerSagemakersagemakeraws-glue 的存储桶或对象执行某些 Amazon S3 操作。它还有权对任何 Amazon S3 资源执行以下操作:

"s3:CreateBucket", "s3:GetBucketLocation", "s3:ListBucket", "s3:ListAllMyBuckets", "s3:GetBucketCors", "s3:PutBucketCors"

要向执行角色授予访问 Amazon S3 中一个或多个特定存储桶的权限,您可以为该角色附加类似于以下内容的策略。此策略授予 IAM 角色执行 AmazonSageMakerFullAccess 允许的所有操作的权限,但此访问权限仅限于存储桶 DOC-EXAMPLE-BUCKET1DOC-EXAMPLE-BUCKET2。请参阅您正在使用的具体 SageMaker 特征的安全文档,了解该特征所需的 Amazon S3 权限的更多信息。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "arn:aws:s3:::DOC-EXAMPLE-BUCKET2/*" ] }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetBucketLocation", "s3:ListBucket", "s3:ListAllMyBuckets", "s3:GetBucketCors", "s3:PutBucketCors" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET2" ] } ] }

获取执行角色

您可以使用 SageMaker 控制台或 AWS CLI 来检索附加到 SageMaker 域、用户配置文件或笔记本实例的执行角色的 ARN。

  • 要查找附加到 SageMaker 域的 IAM 执行角色的 ARN,请参阅查看和编辑域

  • 要查找附加到用户配置文件的 IAM 执行角色的 ARN,请参阅查看用户配置文件和用户配置文件详细信息

  • 要查找附加到笔记本实例的 IAM 执行角色的 ARN,请执行以下操作:

    1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

    2. 在左侧导航窗格中,选择笔记本,然后选择笔记本实例

    3. 从笔记本列表中,选择要查看的笔记本电脑。

    4. ARN 位于权限和加密部分。

或者,Amazon SageMaker Python SDK 用户可通过运行以下代码来检索附加到其用户配置文件或笔记本实例的执行角色的 ARN:

import sagemaker sagemaker_session = sagemaker.Session() role = sagemaker.get_execution_role()
注意

只有在 SageMaker 中运行笔记本时,该执行角色才可用。如果在非 SageMaker 的笔记本中运行 get_execution_role,预计会出现“区域”错误。

传递角色

诸如在服务之间传递角色之类的操作是 SageMaker 中的常见功能。您可以在《IAM 用户指南》中找到有关 SageMaker 的操作、资源和条件键的更多详细信息。

进行以下 API 调用时需要传递角色 (iam:PassRole):CreateAutoMLJobCreateCompilationJobCreateDomainCreateFeatureGroupCreateFlowDefinitonCreateHyperParameterTuningJobCreateImageCreateLabelingJobCreateModelCreateMonitoringScheduleCreateNotebookInstanceCreateProcessingJobCreateTrainingJobCreateUserProfileRenderUiTemplateUpdateImage

您可以将以下信任策略附加到 IAM 角色,该角色可授予 SageMaker 主体权限以代入该角色,并且对于所有执行角色均相同:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

您需要授予该角色的权限有所不同,具体取决于您所调用的 API。以下几节解释了这些权限。

注意

您可以使用 AWS 托管的 AmazonSageMakerFullAccess 权限策略,而不用通过创建权限策略来管理权限。此策略中的权限相当广泛,以允许您执行您可能希望在 SageMaker 中执行的任何操作。有关此策略的列表,包括有关添加许多权限的原因的信息,请参阅 AWS 托管式策略:AmazonSageMakerFullAccess。如果您更愿意创建自定义策略和管理权限以将权限限定于您需要使用执行角色执行的操作,请参阅以下主题。

重要

如果您遇到问题,请参阅 Amazon SageMaker 身份和访问问题排查

有关 IAM 角色的更多信息,请参阅《IAM 用户指南》中的 IAM 角色

CreateAutoMLJob API:执行角色权限

对于可在 CreateAutoMLJob API 请求中传递的执行角色,您可以将以下最低权限策略附加到该角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "sagemaker:DescribeEndpointConfig", "sagemaker:DescribeModel", "sagemaker:InvokeEndpoint", "sagemaker:ListTags", "sagemaker:DescribeEndpoint", "sagemaker:CreateModel", "sagemaker:CreateEndpointConfig", "sagemaker:CreateEndpoint", "sagemaker:DeleteModel", "sagemaker:DeleteEndpointConfig", "sagemaker:DeleteEndpoint", "cloudwatch:PutMetricData", "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:DescribeLogStreams", "s3:GetObject", "s3:PutObject", "s3:ListBucket", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" } ] }

如果您为 AutoML 作业指定一个私有 VPC,请添加以下权限:

{ "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcs", "ec2:DescribeDhcpOptions", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ] }

如果您的输入采用服务器端加密加 AWS KMS 托管密钥 (SSE-KMS) 进行加密,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:Decrypt" ] }

如果在 AutoML 作业的输出配置中指定一个 KMS 密钥,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:Encrypt" ] }

如果在 AutoML 作业的资源配置中指定一个批量 KMS 密钥,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:CreateGrant" ] }

CreateDomain API:执行角色权限

当您在 CreateDomain API 请求中将 AWS KMS 客户托管密钥作为 KmsKeyId 传递时,IAM Identity Center 域的执行角色和 IAM 域的用户/执行角色需要以下权限。将在 CreateApp API 调用期间强制执行这些权限。

对于可在 CreateDomain API 请求中传递的执行角色,您可以将以下权限策略附加到该角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "arn:aws:kms:region:account-id:key/kms-key-id" } ] }

或者,如果在 KMS 策略中指定了权限,则可以将以下策略附加到该角色:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::account-id:role/ExecutionRole" ] }, "Action": [ "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*" } ] }

CreateImage 和 UpdateImage API:执行角色权限

对于可在 CreateImageUpdateImage API 请求中传递的执行角色,您可以将以下权限策略附加到该角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } } ] }

CreateNotebookInstance API:执行角色权限

您向执行角色授予调用 CreateNotebookInstance API 的权限取决于您计划对笔记本实例执行的操作。如果您计划用它来调用 SageMaker API,并在调用 CreateTrainingJobCreateModel API 时传递相同的角色,则将以下权限策略附加到该角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:*", "ecr:GetAuthorizationToken", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability", "ecr:SetRepositoryPolicy", "ecr:CompleteLayerUpload", "ecr:BatchDeleteImage", "ecr:UploadLayerPart", "ecr:DeleteRepositoryPolicy", "ecr:InitiateLayerUpload", "ecr:DeleteRepository", "ecr:PutImage", "ecr:CreateRepository", "cloudwatch:PutMetricData", "cloudwatch:GetMetricData", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents", "logs:GetLogEvents", "s3:CreateBucket", "s3:ListBucket", "s3:GetBucketLocation", "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "robomaker:CreateSimulationApplication", "robomaker:DescribeSimulationApplication", "robomaker:DeleteSimulationApplication", "robomaker:CreateSimulationJob", "robomaker:DescribeSimulationJob", "robomaker:CancelSimulationJob", "ec2:CreateVpcEndpoint", "ec2:DescribeRouteTables", "elasticfilesystem:DescribeMountTargets" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "codecommit:GitPull", "codecommit:GitPush" ], "Resource": [ "arn:aws:codecommit:*:*:*sagemaker*", "arn:aws:codecommit:*:*:*SageMaker*", "arn:aws:codecommit:*:*:*Sagemaker*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } } ] }

要收紧权限,请限制 "Resource": "*" 以使权限仅限于特定的 Amazon S3 和 Amazon ECR 资源,如下所示:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:*", "ecr:GetAuthorizationToken", "cloudwatch:PutMetricData", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::inputbucket" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::inputbucket/object1", "arn:aws:s3:::outputbucket/path", "arn:aws:s3:::inputbucket/object2", "arn:aws:s3:::inputbucket/object3" ] }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": [ "arn:aws:ecr:region::repository/my-repo1", "arn:aws:ecr:region::repository/my-repo2", "arn:aws:ecr:region::repository/my-repo3" ] } ] }

如果您计划访问其他资源(如 Amazon DynamoDB 或 Amazon Relational Database Service),则向此策略添加相关权限。

在上一个策略中,您按如下方式确定策略范围:

  • 仅向您在 s3:ListBucket 请求中指定作为 InputDataConfig.DataSource.S3DataSource.S3Uri 的特定存储桶授予 CreateTrainingJob 权限。

  • 按如下方式确定 s3:GetObject s3:PutObjects3:DeleteObject 的权限范围:

    • 将范围限定为您在 CreateTrainingJob 请求中指定的以下值:

      InputDataConfig.DataSource.S3DataSource.S3Uri

      OutputDataConfig.S3OutputPath

    • 将范围限定为您在 CreateModel 请求中指定的以下值:

      PrimaryContainer.ModelDataUrl

      SuplementalContainers.ModelDataUrl

  • 按如下方式确定 ecr 权限的范围:

    • 将范围限定为您在 AlgorithmSpecification.TrainingImage 请求中指定的 CreateTrainingJob 值。

    • 将范围限定为您在 PrimaryContainer.Image 请求中指定的 CreateModel 值:

cloudwatchlogs 操作适用于“*”资源。有关更多信息,请参阅《Amazon CloudWatch 用户指南》中的 CloudWatch 资源和操作

CreateHyperParameterTuningJob API:执行角色权限

对于可在 CreateHyperParameterTuningJob API 请求中传递的执行角色,您可以将以下权限策略附加到该角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:DescribeLogStreams", "s3:GetObject", "s3:PutObject", "s3:ListBucket", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" } ] }

您无需指定 "Resource": "*",而是可以将这些权限限制为特定的 Amazon S3、Amazon ECR 和 Amazon CloudWatch Logs 资源:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "ecr:GetAuthorizationToken" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::inputbucket" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::inputbucket/object", "arn:aws:s3:::outputbucket/path" ] }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "arn:aws:ecr:region::repository/my-repo" }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:DescribeLogStreams" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/sagemaker/TrainingJobs*" } ] }

如果与超参数优化作业关联的训练容器需要访问其他数据源(如 DynamoDB 或 Amazon RDS 资源),则向此策略添加相关权限。

在上一个策略中,您按如下方式确定策略范围:

  • 仅向您在 s3:ListBucket 请求中指定作为 InputDataConfig.DataSource.S3DataSource.S3Uri 的特定存储桶授予 CreateTrainingJob 权限。

  • 仅向您在 s3:GetObject 请求的输入和输出数据配置中指定的以下对象授予 s3:PutObjectCreateHyperParameterTuningJob 权限:

    InputDataConfig.DataSource.S3DataSource.S3Uri

    OutputDataConfig.S3OutputPath

  • 仅向您在 CreateHyperParameterTuningJob 请求中指定的注册表路径 (AlgorithmSpecification.TrainingImage) 授予 Amazon ECR 权限。

  • 仅向 SageMaker 训练作业的日志组授予 Amazon CloudWatch Logs 权限。

cloudwatch 操作适用于“*”资源。有关更多信息,请参阅《Amazon CloudWatch 用户指南》中的 CloudWatch 资源和操作

如果您为超参数优化作业指定一个私有 VPC,请添加以下权限:

{ "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcs", "ec2:DescribeDhcpOptions", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ] }

如果您的输入采用服务器端加密加 AWS KMS 托管密钥 (SSE-KMS) 进行加密,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:Decrypt" ] }

如果在超参数优化作业的输出配置中指定一个 KMS 密钥,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:Encrypt" ] }

如果在超参数优化作业的资源配置中指定一个批量 KMS 密钥,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:CreateGrant" ] }

CreateProcessingJob API:执行角色权限

对于可在 CreateProcessingJob API 请求中传递的执行角色,您可以将以下权限策略附加到该角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:DescribeLogStreams", "s3:GetObject", "s3:PutObject", "s3:ListBucket", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" } ] }

您无需指定 "Resource": "*",而是可以将这些权限限制为特定的 Amazon S3 和 Amazon ECR 资源:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:DescribeLogStreams", "ecr:GetAuthorizationToken" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::inputbucket" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::inputbucket/object", "arn:aws:s3:::outputbucket/path" ] }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "arn:aws:ecr:region::repository/my-repo" } ] }

如果 CreateProcessingJob.AppSpecification.ImageUri 需要访问其他数据源 (如 DynamoDB 或 Amazon RDS 资源),则向此策略添加相关权限。

在上一个策略中,您按如下方式确定策略范围:

  • 仅向您在 s3:ListBucket 请求中指定作为 ProcessingInputs 的特定存储桶授予 CreateProcessingJob 权限。

  • s3:GetObject s3:PutObject 权限的范围限定在 CreateProcessingJob 请求中要在 ProcessingInputsProcessingOutputConfig 中下载或上传的对象。

  • 仅向您在 CreateProcessingJob 请求中指定的注册表路径 (AppSpecification.ImageUri) 授予 Amazon ECR 权限。

cloudwatchlogs 操作适用于“*”资源。有关更多信息,请参阅《Amazon CloudWatch 用户指南》中的 CloudWatch 资源和操作

如果您为处理作业指定一个私有 VPC,请添加以下权限。不要在策略中使用任何条件或资源筛选器。否则,在创建处理作业期间进行的验证检查将失败。

{ "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcs", "ec2:DescribeDhcpOptions", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ] }

如果您的输入采用服务器端加密加 AWS KMS 托管密钥 (SSE-KMS) 进行加密,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:Decrypt" ] }

如果在处理作业的输出配置中指定一个 KMS 密钥,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:Encrypt" ] }

如果在处理作业的资源配置中指定一个批量 KMS 密钥,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:CreateGrant" ] }

CreateTrainingJob API:执行角色权限

对于可在 CreateTrainingJob API 请求中传递的执行角色,您可以将以下权限策略附加到该角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:DescribeLogStreams", "s3:GetObject", "s3:PutObject", "s3:ListBucket", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" } ] }

您无需指定 "Resource": "*",而是可以将这些权限限制为特定的 Amazon S3 和 Amazon ECR 资源:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:DescribeLogStreams", "ecr:GetAuthorizationToken" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::inputbucket" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::inputbucket/object", "arn:aws:s3:::outputbucket/path" ] }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "arn:aws:ecr:region::repository/my-repo" } ] }

如果 CreateTrainingJob.AlgorithSpecifications.TrainingImage 需要访问其他数据源 (如 DynamoDB 或 Amazon RDS 资源),则向此策略添加相关权限。

在上一个策略中,您按如下方式确定策略范围:

  • 仅向您在 s3:ListBucket 请求中指定作为 InputDataConfig.DataSource.S3DataSource.S3Uri 的特定存储桶授予 CreateTrainingJob 权限。

  • 仅向您在 s3:GetObject 请求的输入和输出数据配置中指定的以下对象授予 s3:PutObjectCreateTrainingJob 权限:

    InputDataConfig.DataSource.S3DataSource.S3Uri

    OutputDataConfig.S3OutputPath

  • 仅向您在 CreateTrainingJob 请求中指定的注册表路径 (AlgorithmSpecification.TrainingImage) 授予 Amazon ECR 权限。

cloudwatchlogs 操作适用于“*”资源。有关更多信息,请参阅《Amazon CloudWatch 用户指南》中的 CloudWatch 资源和操作

如果您为训练作业指定一个私有 VPC,请添加以下权限:

{ "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcs", "ec2:DescribeDhcpOptions", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ] }

如果您的输入采用服务器端加密加 AWS KMS 托管密钥 (SSE-KMS) 进行加密,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:Decrypt" ] }

如果在训练作业的输出配置中指定一个 KMS 密钥,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:Encrypt" ] }

如果在训练作业的资源配置中指定一个批量 KMS 密钥,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:CreateGrant" ] }

CreateModel API:执行角色权限

对于可在 CreateModel API 请求中传递的执行角色,您可以将以下权限策略附加到该角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:DescribeLogStreams", "s3:GetObject", "s3:ListBucket", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" } ] }

您无需指定 "Resource": "*",而是可以将这些权限限制为特定的 Amazon S3 和 Amazon ECR 资源:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:DescribeLogStreams", "ecr:GetAuthorizationToken" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::inputbucket/object" ] }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": [ "arn:aws:ecr:region::repository/my-repo", "arn:aws:ecr:region::repository/my-repo" ] } ] }

如果 CreateModel.PrimaryContainer.Image 需要访问其他数据源 (如 Amazon DynamoDB 或 Amazon RDS 资源),则向此策略添加相关权限。

在上一个策略中,您按如下方式确定策略范围:

  • 仅向您在 PrimaryContainer.ModelDataUrl 请求的 CreateModel 中指定的对象授予 S3 权限。

  • 仅向您在 CreateModel 请求中指定作为 PrimaryContainer.ImageSecondaryContainer.Image 的特定注册表路径授予 Amazon ECR 权限。

cloudwatchlogs 操作适用于“*”资源。有关更多信息,请参阅《Amazon CloudWatch 用户指南》中的 CloudWatch 资源和操作

注意

如果您计划在生产环境中使用 SageMaker 部署防护机制特征进行模型部署,请确保您的执行角色有权对自动回滚警报执行 cloudwatch:DescribeAlarms 操作。

如果您为模型指定一个私有 VPC,请添加以下权限:

{ "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcs", "ec2:DescribeDhcpOptions", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ] }