亚马逊 SageMaker AI 基于身份的策略示例 - 亚马逊 SageMaker AI

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

亚马逊 SageMaker AI 基于身份的策略示例

默认情况下,IAM用户和角色无权创建或修改 SageMaker AI 资源。他们也无法使用 AWS Management Console AWS CLI、或执行任务 AWS API。IAM管理员必须创建IAM策略,授予用户和角色对其所需的指定资源执行特定API操作的权限。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。要了解如何将策略附加到IAM用户或群组,请参阅《服务授权参考》中的添加和删除IAM身份权限

要了解如何使用这些示例策略文档创建IAM基于身份的JSON策略,请参阅在选项卡上JSON创建策略

策略最佳实践

基于身份的策略决定了某人是否可以在您的账户中创建、访问或删除 SageMaker AI 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时,请遵循以下指南和建议:

  • 开始使用 AWS 托管策略并转向最低权限权限 — 要开始向用户和工作负载授予权限,请使用为许多常见用例授予权限的AWS 托管策略。它们在你的版本中可用 AWS 账户。我们建议您通过定义针对您的用例的 AWS 客户托管策略来进一步减少权限。有关更多信息,请参阅《IAM 用户指南》中的 AWS 托管式策略工作职能的AWS 托管式策略

  • 应用最低权限许可 – 在使用 IAM 策略设置权限时,请仅授予执行任务所需的权限。为此,您可以定义在特定条件下可以对特定资源执行的操作,也称为最低权限许可。有关使用 IAM 应用权限的更多信息,请参阅《IAM 用户指南》中的 IAM 中的策略和权限

  • 使用 IAM 策略中的条件进一步限制访问权限 – 您可以向策略添加条件来限制对操作和资源的访问。例如,您可以编写一个策略条件来指定所有请求都必须使用发送SSL。如果服务操作是通过特定的方式使用的,则也可以使用条件来授予对服务操作的访问权限 AWS 服务,例如 AWS CloudFormation。有关更多信息,请参阅《IAM用户指南》中的IAMJSON策略元素:条件

  • 使用 A IAM ccess Analyzer 验证您的IAM策略以确保权限的安全性和功能性 — A IAM ccess Analyzer 会验证新的和现有的策略,以便策略符合IAM策略语言 (JSON) 和IAM最佳实践。 IAMAccess Analyzer 提供了 100 多项策略检查和可行的建议,可帮助您制定安全和实用的策略。有关更多信息,请参阅IAM用户指南中的使用 A IAMccess Analyzer 验证策略

  • 需要多重身份验证 (MFA)-如果您的场景需要IAM用户或 root 用户 AWS 账户,请打开MFA以提高安全性。要要求MFA何时调用API操作,请在策略中添加MFA条件。有关更多信息,请参阅《IAM用户指南》MFA中的使用进行安全API访问

有关 IAM 中最佳实践的更多信息,请参阅《IAM 用户指南》中的 IAM 中的安全最佳实践

使用 A SageMaker I 控制台

要访问 Amazon SageMaker AI 控制台,您必须拥有一组最低权限。这些权限必须允许您列出和查看 AWS 账户中 SageMaker AI 资源的详细信息。如果创建的基于身份的策略比最低权限要求更严格,管理控制台将无法正常运行。这包括具有该策略的用户或角色。

为确保这些实体仍然可以使用 SageMaker AI 控制台,您还必须将以下 AWS 托管策略附加到这些实体。如需了解更多信息,请参阅服务授权参考中的为用户添加权限

您无需为仅拨打 AWS CLI 或的用户设置最低控制台权限 AWS API。相反,只允许访问与你正在尝试执行的API操作相匹配的操作。

使用 Amazon A SageMaker I 控制台所需的权限

权限参考表列出了 Amazon SageMaker AI API 操作并显示了每个操作所需的权限。有关 Amazon A SageMaker I API 操作的更多信息,请参阅Amazon SageMaker AI API 权限:操作、权限和资源参考

要使用 Amazon SageMaker AI 控制台,您需要授予其他操作的权限。具体而言,控制台需要允许ec2操作显示子网VPCs、和安全组的权限。或者,控制台需要为 CreateNotebookCreateTrainingJobCreateModel 等任务创建执行角色的权限。使用以下权限策略授予这些权限:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "SageMakerApis", "Effect": "Allow", "Action": [ "sagemaker:*" ], "Resource": "*" }, { "Sid": "VpcConfigurationForCreateForms", "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ], "Resource": "*" }, { "Sid":"KmsKeysForCreateForms", "Effect":"Allow", "Action":[ "kms:DescribeKey", "kms:ListAliases" ], "Resource":"*" }, { "Sid": "AccessAwsMarketplaceSubscriptions", "Effect": "Allow", "Action": [ "aws-marketplace:ViewSubscriptions" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "codecommit:BatchGetRepositories", "codecommit:CreateRepository", "codecommit:GetRepository", "codecommit:ListRepositories", "codecommit:ListBranches", "secretsmanager:CreateSecret", "secretsmanager:DescribeSecret", "secretsmanager:ListSecrets" ], "Resource": "*" }, { "Sid":"ListAndCreateExecutionRoles", "Effect":"Allow", "Action":[ "iam:ListRoles", "iam:CreateRole", "iam:CreatePolicy", "iam:AttachRolePolicy" ], "Resource":"*" }, { "Sid": "DescribeECRMetaData", "Effect": "Allow", "Action": [ "ecr:Describe*" ], "Resource": "*" }, { "Sid": "PassRoleForExecutionRoles", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } } ] }

使用 Amazon G SageMaker round Truth 控制台所需的权限

要使用 Amazon G SageMaker round Truth 控制台,您需要授予其他资源的权限。具体来说,管理控制台需要以下权限

  • 可以在 AWS Marketplace 上查看订阅,

  • Amazon Cognito 操作以管理您的私有劳动力

  • Amazon S3 操作以访问输入和输出文件

  • AWS Lambda 列出和调用函数的操作

使用以下权限策略授予这些权限:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GroundTruthConsole", "Effect": "Allow", "Action": [ "aws-marketplace:DescribeListings", "aws-marketplace:ViewSubscriptions", "cognito-idp:AdminAddUserToGroup", "cognito-idp:AdminCreateUser", "cognito-idp:AdminDeleteUser", "cognito-idp:AdminDisableUser", "cognito-idp:AdminEnableUser", "cognito-idp:AdminRemoveUserFromGroup", "cognito-idp:CreateGroup", "cognito-idp:CreateUserPool", "cognito-idp:CreateUserPoolClient", "cognito-idp:CreateUserPoolDomain", "cognito-idp:DescribeUserPool", "cognito-idp:DescribeUserPoolClient", "cognito-idp:ListGroups", "cognito-idp:ListIdentityProviders", "cognito-idp:ListUsers", "cognito-idp:ListUsersInGroup", "cognito-idp:ListUserPoolClients", "cognito-idp:ListUserPools", "cognito-idp:UpdateUserPool", "cognito-idp:UpdateUserPoolClient", "groundtruthlabeling:DescribeConsoleJob", "groundtruthlabeling:ListDatasetObjects", "groundtruthlabeling:RunFilterOrSampleManifestJob", "groundtruthlabeling:RunGenerateManifestByCrawlingJob", "lambda:InvokeFunction", "lambda:ListFunctions", "s3:GetObject", "s3:PutObject", "s3:SelectObjectContent" ], "Resource": "*" } ] }

使用 Amazon Augmented AI(预览版)管理控制台所需的权限

要使用 Augmented AI 控制台,您需要授予其他资源的权限。使用以下权限策略授予这些权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:*Algorithm", "sagemaker:*Algorithms", "sagemaker:*App", "sagemaker:*Apps", "sagemaker:*AutoMLJob", "sagemaker:*AutoMLJobs", "sagemaker:*CodeRepositories", "sagemaker:*CodeRepository", "sagemaker:*CompilationJob", "sagemaker:*CompilationJobs", "sagemaker:*Endpoint", "sagemaker:*EndpointConfig", "sagemaker:*EndpointConfigs", "sagemaker:*EndpointWeightsAndCapacities", "sagemaker:*Endpoints", "sagemaker:*Environment", "sagemaker:*EnvironmentVersion", "sagemaker:*EnvironmentVersions", "sagemaker:*Environments", "sagemaker:*Experiment", "sagemaker:*Experiments", "sagemaker:*FlowDefinitions", "sagemaker:*HumanLoop", "sagemaker:*HumanLoops", "sagemaker:*HumanTaskUi", "sagemaker:*HumanTaskUis", "sagemaker:*HyperParameterTuningJob", "sagemaker:*HyperParameterTuningJobs", "sagemaker:*LabelingJob", "sagemaker:*LabelingJobs", "sagemaker:*Metrics", "sagemaker:*Model", "sagemaker:*ModelPackage", "sagemaker:*ModelPackages", "sagemaker:*Models", "sagemaker:*MonitoringExecutions", "sagemaker:*MonitoringSchedule", "sagemaker:*MonitoringSchedules", "sagemaker:*NotebookInstance", "sagemaker:*NotebookInstanceLifecycleConfig", "sagemaker:*NotebookInstanceLifecycleConfigs", "sagemaker:*NotebookInstanceUrl", "sagemaker:*NotebookInstances", "sagemaker:*ProcessingJob", "sagemaker:*ProcessingJobs", "sagemaker:*RenderUiTemplate", "sagemaker:*Search", "sagemaker:*SearchSuggestions", "sagemaker:*Tags", "sagemaker:*TrainingJob", "sagemaker:*TrainingJobs", "sagemaker:*TransformJob", "sagemaker:*TransformJobs", "sagemaker:*Trial", "sagemaker:*TrialComponent", "sagemaker:*TrialComponents", "sagemaker:*Trials", "sagemaker:*Workteam", "sagemaker:*Workteams" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "sagemaker:*FlowDefinition" ], "Resource": "*", "Condition": { "StringEqualsIfExists": { "sagemaker:WorkteamType": [ "private-crowd", "vendor-crowd" ] } } }, { "Effect": "Allow", "Action": [ "application-autoscaling:DeleteScalingPolicy", "application-autoscaling:DeleteScheduledAction", "application-autoscaling:DeregisterScalableTarget", "application-autoscaling:DescribeScalableTargets", "application-autoscaling:DescribeScalingActivities", "application-autoscaling:DescribeScalingPolicies", "application-autoscaling:DescribeScheduledActions", "application-autoscaling:PutScalingPolicy", "application-autoscaling:PutScheduledAction", "application-autoscaling:RegisterScalableTarget", "aws-marketplace:ViewSubscriptions", "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarms", "cloudwatch:GetMetricData", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:PutMetricAlarm", "cloudwatch:PutMetricData", "codecommit:BatchGetRepositories", "codecommit:CreateRepository", "codecommit:GetRepository", "codecommit:ListBranches", "codecommit:ListRepositories", "cognito-idp:AdminAddUserToGroup", "cognito-idp:AdminCreateUser", "cognito-idp:AdminDeleteUser", "cognito-idp:AdminDisableUser", "cognito-idp:AdminEnableUser", "cognito-idp:AdminRemoveUserFromGroup", "cognito-idp:CreateGroup", "cognito-idp:CreateUserPool", "cognito-idp:CreateUserPoolClient", "cognito-idp:CreateUserPoolDomain", "cognito-idp:DescribeUserPool", "cognito-idp:DescribeUserPoolClient", "cognito-idp:ListGroups", "cognito-idp:ListIdentityProviders", "cognito-idp:ListUserPoolClients", "cognito-idp:ListUserPools", "cognito-idp:ListUsers", "cognito-idp:ListUsersInGroup", "cognito-idp:UpdateUserPool", "cognito-idp:UpdateUserPoolClient", "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:CreateVpcEndpoint", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcEndpoints", "ec2:DescribeVpcs", "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:CreateRepository", "ecr:Describe*", "ecr:GetAuthorizationToken", "ecr:GetDownloadUrlForLayer", "elastic-inference:Connect", "elasticfilesystem:DescribeFileSystems", "elasticfilesystem:DescribeMountTargets", "fsx:DescribeFileSystems", "glue:CreateJob", "glue:DeleteJob", "glue:GetJob", "glue:GetJobRun", "glue:GetJobRuns", "glue:GetJobs", "glue:ResetJobBookmark", "glue:StartJobRun", "glue:UpdateJob", "groundtruthlabeling:*", "iam:ListRoles", "kms:DescribeKey", "kms:ListAliases", "lambda:ListFunctions", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:GetLogEvents", "logs:PutLogEvents", "sns:ListTopics" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:DeleteLogDelivery", "logs:DescribeResourcePolicies", "logs:GetLogDelivery", "logs:ListLogDeliveries", "logs:PutResourcePolicy", "logs:UpdateLogDelivery" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:CompleteLayerUpload", "ecr:BatchDeleteImage", "ecr:UploadLayerPart", "ecr:DeleteRepositoryPolicy", "ecr:InitiateLayerUpload", "ecr:DeleteRepository", "ecr:PutImage" ], "Resource": "arn:aws:ecr:*:*:repository/*sagemaker*" }, { "Effect": "Allow", "Action": [ "codecommit:GitPull", "codecommit:GitPush" ], "Resource": [ "arn:aws:codecommit:*:*:*sagemaker*", "arn:aws:codecommit:*:*:*SageMaker*", "arn:aws:codecommit:*:*:*Sagemaker*" ] }, { "Effect": "Allow", "Action": [ "secretsmanager:ListSecrets" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:CreateSecret" ], "Resource": [ "arn:aws:secretsmanager:*:*:secret:AmazonSageMaker-*" ] }, { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue" ], "Resource": "*", "Condition": { "StringEquals": { "secretsmanager:ResourceTag/SageMaker": "true" } } }, { "Effect": "Allow", "Action": [ "robomaker:CreateSimulationApplication", "robomaker:DescribeSimulationApplication", "robomaker:DeleteSimulationApplication" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "robomaker:CreateSimulationJob", "robomaker:DescribeSimulationJob", "robomaker:CancelSimulationJob" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:AbortMultipartUpload", "s3:GetBucketCors", "s3:PutBucketCors" ], "Resource": [ "arn:aws:s3:::*SageMaker*", "arn:aws:s3:::*Sagemaker*", "arn:aws:s3:::*sagemaker*", "arn:aws:s3:::*aws-glue*" ] }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetBucketLocation", "s3:ListBucket", "s3:ListAllMyBuckets" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "*", "Condition": { "StringEqualsIgnoreCase": { "s3:ExistingObjectTag/SageMaker": "true" } } }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:*:*:function:*SageMaker*", "arn:aws:lambda:*:*:function:*sagemaker*", "arn:aws:lambda:*:*:function:*Sagemaker*", "arn:aws:lambda:*:*:function:*LabelingFunction*" ] }, { "Action": "iam:CreateServiceLinkedRole", "Effect": "Allow", "Resource": "arn:aws:iam::*:role/aws-service-role/sagemaker.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_SageMakerEndpoint", "Condition": { "StringLike": { "iam:AWSServiceName": "sagemaker.application-autoscaling.amazonaws.com" } } }, { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "*", "Condition": { "StringEquals": { "iam:AWSServiceName": "robomaker.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "sns:Subscribe", "sns:CreateTopic" ], "Resource": [ "arn:aws:sns:*:*:*SageMaker*", "arn:aws:sns:*:*:*Sagemaker*", "arn:aws:sns:*:*:*sagemaker*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::*:role/*", "Condition": { "StringEquals": { "iam:PassedToService": [ "sagemaker.amazonaws.com", "glue.amazonaws.com", "robomaker.amazonaws.com", "states.amazonaws.com" ] } } } ] }

允许用户查看他们自己的权限

此示例显示您可以如何创建策略,以便允许 IAM 用户查看附加到其用户身份的内联和托管策略。此策略包括在控制台上或使用或以编程方式完成此操作的 AWS CLI 权限。 AWS API

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

使用条件键控制 SageMaker AI 资源的创建

使用 SageMaker 特定于 AI 的条件键控制精细访问权限以允许创建 SageMaker AI 资源。有关在IAM策略中使用条件密钥的信息,请参阅IAM用户指南中的IAMJSON策略元素:条件

条件密钥、相关API操作和相关文档的链接列在《服务授权参考》中的 SageMaker AI 条件密钥中。

以下示例说明如何使用 SageMaker AI 条件键来控制访问权限。

使用文件系统条件键控制对 SageMaker AI 资源的访问

SageMaker AI 训练为训练算法提供了安全的基础架构,但在某些情况下,您可能需要增强深度防御。例如,您可以最大程度地降低在算法中运行不受信任的代码的风险,或者您在组织中具有特定的安全性要求。对于这些场景,您可以使用IAM策略的 Condition 元素中的服务特定条件键将用户的范围缩小到:

  • 特定文件系统

  • 目录

  • 访问模式(读写、只读)

  • 安全组

将IAM用户限制在特定的目录和访问模式下

以下策略将用户限制为EFS文件系统的/sagemaker/xgboost-dm/train/sagemaker/xgboost-dm/validation目录ro(只读) AccessMode:

注意

当允许使用目录时,训练算法也可以访问其所有子目录。 POSIX权限被忽略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessToElasticFileSystem", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:CreateHyperParameterTuningJob" ], "Resource": "*", "Condition": { "StringEquals": { "sagemaker:FileSystemId": "fs-12345678", "sagemaker:FileSystemAccessMode": "ro", "sagemaker:FileSystemType": "EFS", "sagemaker:FileSystemDirectoryPath": "/sagemaker/xgboost-dm/train" } } }, { "Sid": "AccessToElasticFileSystemValidation", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:CreateHyperParameterTuningJob" ], "Resource": "*", "Condition": { "StringEquals": { "sagemaker:FileSystemId": "fs-12345678", "sagemaker:FileSystemAccessMode": "ro", "sagemaker:FileSystemType": "EFS", "sagemaker:FileSystemDirectoryPath": "/sagemaker/xgboost-dm/validation" } } } ] }

限制用户使用特定文件系统

为防止使用用户空间客户端的恶意算法直接访问账户中的任何文件系统,可以限制网络流量。要限制这种流量,只允许从特定安全组进入。在以下示例中, 用户只能使用指定的安全组访问文件系统:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessToLustreFileSystem", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:CreateHyperParameterTuningJob" ], "Resource": "*", "Condition": { "StringEquals": { "sagemaker:FileSystemId": "fs-12345678", "sagemaker:FileSystemAccessMode": "ro", "sagemaker:FileSystemType": "FSxLustre", "sagemaker:FileSystemDirectoryPath": "/fsx/sagemaker/xgboost/train" }, "ForAllValues:StringEquals": { "sagemaker:VpcSecurityGroupIds": [ "sg-12345678" ] } } } ] }

此示例可将算法限制在特定文件系统中。不过,这并不妨碍算法使用用户空间客户端访问该文件系统中的任何目录。要缓解这种情况,您可以:

  • 确保文件系统仅包含您信任的用户要访问的数据

  • 创建一个IAM角色,限制您的用户使用已批准ECR存储库中的算法启动训练作业

有关如何在 SageMaker AI 中使用角色的更多信息,请参阅 SageMaker AI 角色

将训练限制在特定的范围内 VPC

限制 AWS 用户在 Amazon 内部创建培训作业VPC。在中创建训练作业时VPC,使用VPC流日志监控进出训练集群的所有流量。有关使用VPC流日志的信息,请参阅 Amazon Virtual Private Cloud 用户指南中的VPC流日志。

以下策略强制要求训练作业由CreateTrainingJob从内部调用的用户创建:VPC

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowFromVpc", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:CreateHyperParameterTuningJob" ], "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "sagemaker:VpcSubnets": ["subnet-a1234"], "sagemaker:VpcSecurityGroupIds": ["sg12345", "sg-67890"] }, "Null": { "sagemaker:VpcSubnets": "false", "sagemaker:VpcSecurityGroupIds": "false" } } } ] }

限制对地面实况标注作业和 Amazon A2I 人工审核工作流程的劳动力类型的访问权限

Amazon SageMaker Ground Truth 和 Amazon Agumented AI 工作团队分为三种劳动力类型之一:

  • 公开(与 Amazon Mechanical Turk 合作)

  • 专属

  • 供应商

您可以使用其中一种类型或工作团队来限制用户对特定工作团队的访问权限ARN。为此,请使用 sagemaker:WorkteamType 和/或 sagemaker:WorkteamArn 条件键。对于 sagemaker:WorkteamType 条件键,请使用字符串条件运算符。对于sagemaker:WorkteamArn条件密钥,请使用 Amazon 资源名称 (ARN) 条件运算符。如果用户尝试使用受限的工作团队创建标签作业, SageMaker AI 会返回拒绝访问错误。

以下策略展示了使用 sagemaker:WorkteamTypesagemaker:WorkteamArn 条件键以及适当条件运算符和有效条件值的不同方法。

以下示例使用 sagemaker:WorkteamType 条件键和 StringEquals 条件运算符一起限制对公有工作团队的访问。它接受以下格式的条件值:workforcetype-crowd,其中workforcetype可以等于publicprivate、或vendor

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictWorkteamType", "Effect": "Deny", "Action": "sagemaker:CreateLabelingJob", "Resource": "*", "Condition": { "StringEquals": { "sagemaker:WorkteamType": "public-crowd" } } } ] }

以下策略演示如何使用 sagemaker:WorkteamArn 条件键限制对公有工作团队的访问。第一个演示如何将其与工作团队ARN和ArnLike条件运IAM算符的有效正则表达式变体一起使用。第二个演示如何与ArnEquals条件操作员和工作团队一起使用它ARN。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictWorkteamType", "Effect": "Deny", "Action": "sagemaker:CreateLabelingJob", "Resource": "*", "Condition": { "ArnLike": { "sagemaker:WorkteamArn": "arn:aws:sagemaker:*:*:workteam/public-crowd/*" } } } ] }
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictWorkteamType", "Effect": "Deny", "Action": "sagemaker:CreateLabelingJob", "Resource": "*", "Condition": { "ArnEquals": { "sagemaker:WorkteamArn": "arn:aws:sagemaker:us-west-2:394669845002:workteam/public-crowd/default" } } } ] }

强制加密输入数据

以下策略限制用户在创建时使用sagemaker:VolumeKmsKey条件 AWS KMS 密钥指定用于加密输入数据的密钥:

  • 训练

  • 超参数调整

  • 标签作业

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceEncryption", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:CreateHyperParameterTuningJob", "sagemaker:CreateLabelingJob", "sagemaker:CreateFlowDefiniton" ], "Resource": "*", "Condition": { "ArnEquals": { "sagemaker:VolumeKmsKey": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } } } ] }

对训练作业实施网络隔离

以下策略限制用户在使用 sagemaker:NetworkIsolation 条件键创建训练作业时启用网络隔离:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceIsolation", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:CreateHyperParameterTuningJob" ], "Resource": "*", "Condition": { "Bool": { "sagemaker:NetworkIsolation": "true" } } } ] }

为训练作业执行特定的实例类型

以下策略限制用户在使用 sagemaker:InstanceTypes 条件键创建训练作业时使用特定实例类型:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceInstanceType", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:CreateHyperParameterTuningJob" ], "Resource": "*", "Condition": { "ForAllValues:StringLike": { "sagemaker:InstanceTypes": ["ml.c5.*"] } } } ] }

在创建笔记本实例时强制禁止互联网权限和 root 权限

您可以禁用对笔记本实例的 Internet 访问和根访问,以帮助提高它们的安全性。有关控制笔记本实例 root 权限的信息,请参阅 控制对 SageMaker 笔记本实例的 root 访问权限。有关禁用笔记本实例互联网权限的信息,请参阅 将中的笔记本实例VPC连接到外部资源

以下策略要求用户在创建实例时禁用网络访问权限,或在创建或更新笔记本实例时禁用根访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "LockDownCreateNotebookInstance", "Effect": "Allow", "Action": [ "sagemaker:CreateNotebookInstance" ], "Resource": "*", "Condition": { "StringEquals": { "sagemaker:DirectInternetAccess": "Disabled", "sagemaker:RootAccess": "Disabled" }, "Null": { "sagemaker:VpcSubnets": "false", "sagemaker:VpcSecurityGroupIds": "false" } } }, { "Sid": "LockDownUpdateNotebookInstance", "Effect": "Allow", "Action": [ "sagemaker:UpdateNotebookInstance" ], "Resource": "*", "Condition": { "StringEquals": { "sagemaker:RootAccess": "Disabled" } } } ] }

使用基于身份的策略控制对 SageMaker API AI 的访问

要控制对 SageMaker AI API 呼叫和对 A SageMaker I 托管终端节点的呼叫的访问权限,请使用基于身份IAM的策略。

将访问 SageMaker 人工智能API和运行时限制为来自您的内部的呼叫 VPC

如果您在中设置了接口终端节点VPC,则外部的个人VPC可以通过互联网连接到 SageMaker AI API 和运行时。为防止出现这种情况,请附上限制来自内部的呼叫的访问权限的IAMVPC策略。这些呼叫必须仅限于有权访问您的 SageMaker AI 资源的所有用户和群组。有关为 SageMaker AI API 和运行时创建VPC接口终端节点的信息,请参阅Connect 连接到你的 SageMaker AI VPC

重要

如果您应用类似于以下IAM策略之一的策略,则用户无法APIs通过控制台访问指定的 SageMaker AI。

要将访问权限限制为仅限从您的内部建立的连接VPC,请创建限制访问的 AWS Identity and Access Management 策略。此访问权限必须仅限于来自您内部的呼叫VPC。然后将该策略添加到用于访问 SageMaker AI 或运行时的每个 AWS Identity and Access Management 用户、组API或角色。

注意

此策略只允许连接到创建接口终端节点的子网中的调用方。

{ "Id": "api-example-1", "Version": "2012-10-17", "Statement": [ { "Sid": "EnableAPIAccess", "Effect": "Allow", "Action": [ "sagemaker:*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceVpc": "vpc-111bbaaa" } } } ] }

要将访问权限限制API为仅限使用接口端点进行的呼叫,请使用aws:SourceVpce条件键代替aws:SourceVpc

{ "Id": "api-example-1", "Version": "2012-10-17", "Statement": [ { "Sid": "EnableAPIAccess", "Effect": "Allow", "Action": [ "sagemaker:CreatePresignedNotebookInstanceUrl" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpce": [ "vpce-111bbccc", "vpce-111bbddd" ] } } } ] }

按 IP 地址限制对 SageMaker AI API 和运行时调用的访问

您只能允许从您指定的列表中的 IP 地址访问 SageMaker AI API 调用和运行时调用。为此,请创建拒绝访问的IAM策略,API除非呼叫来自列表中的 IP 地址。然后将该策略附加到用于访问或运行时的每个 AWS Identity and Access Management 用户、组API或角色。有关创建IAM策略的信息,请参阅AWS Identity and Access Management 用户指南中的创建IAM策略

要指定有权访问API呼叫的 IP 地址列表,请使用:

  • IpAddress 条件运算符

  • aws:SourceIP 条件语境键

有关IAM条件运算符的信息,请参阅AWS Identity and Access Management 用户指南中的IAMJSON策略元素:条件运算符。有关IAM条件上下文键的信息,请参阅AWS 全局条件上下文密钥

例如,以下策略仅允许从范围 192.0.2.0-192.0.2.255203.0.113.0-203.0.113.255 内的 IP 地址中访问 CreateTrainingJob

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sagemaker:CreateTrainingJob", "Resource": "*", "Condition": { "IpAddress": { "aws:SourceIp": [ "192.0.2.0/24", "203.0.113.0/24" ] } } } ] }

通过 IP 地址限制对笔记本实例的访问

您可以只允许您指定的列表中的 IP 地址访问笔记本实例。为此,请创建一个拒绝访问的IAM策略,CreatePresignedNotebookInstanceUrl除非呼叫来自列表中的 IP 地址。然后,将此策略附加到用于访问笔记本实例的每个 AWS Identity and Access Management 用户、组或角色。有关创建IAM策略的信息,请参阅AWS Identity and Access Management 用户指南中的创建IAM策略

要指定希望访问笔记本实例的 IP 地址列表,请使用

  • IpAddress 条件运算符

  • aws:SourceIP 条件语境键

有关IAM条件运算符的信息,请参阅AWS Identity and Access Management 用户指南中的IAMJSON策略元素:条件运算符。有关IAM条件上下文键的信息,请参阅AWS 全局条件上下文密钥

例如,以下策略仅允许从范围 192.0.2.0-192.0.2.255203.0.113.0-203.0.113.255 之间的 IP 地址访问笔记本实例:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sagemaker:CreatePresignedNotebookInstanceUrl", "Resource": "*", "Condition": { "IpAddress": { "aws:SourceIp": [ "192.0.2.0/24", "203.0.113.0/24" ] } } } ] }

该策略限制了对呼叫CreatePresignedNotebookInstanceUrl和该呼叫返回的呼叫URL的访问权限。该策略还会限制对控制台中所打开笔记本实例的访问。它会对尝试连接到笔记本实例的每个HTTP请求和 WebSocket 帧强制执行。

注意

通过VPC接口端点连接到 SageMaker AI 时,使用此方法按 IP 地址筛选是不兼容的。 。有关通过VPC接口端点连接时限制对笔记本实例的访问的信息,请参阅通过VPC接口端点连接到笔记本实例

使用标签控制对 SageMaker AI 资源的访问权限

在IAM策略中指定标签以控制对 SageMaker AI 资源组的访问权限。使用标签实现基于属性的访问控制 (ABAC)。使用标签有助于将资源访问权限划分给特定用户组。您可以让一个团队访问一组资源,让另一个团队访问另一组资源。您可以在IAM策略中提供ResourceTag条件,为每个群组提供访问权限。

注意

基于标签的策略无法限制以下API呼叫:

  • DeleteImageVersion

  • DescribeImageVersion

  • ListAlgorithms

  • ListCodeRepositories

  • ListCompilationJobs

  • ListEndpointConfigs

  • ListEndpoints

  • ListFlowDefinitions

  • ListHumanTaskUis

  • ListHyperparameterTuningJobs

  • ListLabelingJobs

  • ListLabelingJobsForWorkteam

  • ListModelPackages

  • ListModels

  • ListNotebookInstanceLifecycleConfigs

  • ListNotebookInstances

  • ListSubscribedWorkteams

  • ListTags

  • ListProcessingJobs

  • ListTrainingJobs

  • ListTrainingJobsForHyperParameterTuningJob

  • ListTransformJobs

  • ListWorkteams

  • Search

一个简单的示例可帮助您了解如何使用标签来划分资源。假设您在 AWS 账户中定义了两个不同的IAM群组DevTeam2,名为DevTeam1和。您还创建了 10 个笔记本实例。您将在一个项目中使用 5 个笔记本实例。将在第二个项目中使用另外 5 个笔记本实例。您可以DevTeam1提供在用于第一个项目的笔记本实例上进行API调用的权限。您可以提供DevTeam2在用于第二个项目的笔记本实例上进行API调用。

以下过程提供了一个简单示例,可帮助您理解添加标签的概念。您可以用它来实施上一段中描述的解决方案。

控制对API呼叫的访问权限(示例)
  1. 将具有键 Project 和值 A 的标签添加到用于第一个项目的笔记本实例。有关向 SageMaker AI 资源添加标签的信息,请参阅AddTags

  2. 将具有键 Project 和值 B 的标签添加到用于第二个项目的笔记本实例。

  3. 创建一个IAM策略,其ResourceTag条件是拒绝访问用于第二个项目的笔记本实例。然后,将该策略附加到 DevTeam1 中。以下示例策略拒绝对任何带有密钥为、值为的标签的Project笔记本实例进行的所有API调用B

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sagemaker:*", "Resource": "*" }, { "Effect": "Deny", "Action": "sagemaker:*", "Resource": "*", "Condition": { "StringEquals": { "sagemaker:ResourceTag/Project": "B" } } }, { "Effect": "Deny", "Action": [ "sagemaker:AddTags", "sagemaker:DeleteTags" ], "Resource": "*" } ] }

    有关创建IAM策略并将其附加到身份的信息,请参阅AWS Identity and Access Management 用户指南中的使用策略控制访问权限

  4. 创建一个IAM策略,其ResourceTag条件是拒绝访问用于第一个项目的笔记本实例。然后,将该策略附加到 DevTeam2 中。以下示例策略拒绝对任何带有密钥为、值为的标签的Project笔记本实例进行的所有API调用A

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sagemaker:*", "Resource": "*" }, { "Effect": "Deny", "Action": "sagemaker:*", "Resource": "*", "Condition": { "StringEquals": { "sagemaker:ResourceTag/Project": "A" } } }, { "Effect": "Deny", "Action": [ "sagemaker:AddTags", "sagemaker:DeleteTags" ], "Resource": "*" } ] }

提供标记 A SageMaker I 资源的权限

标签是您可以附加到某些 AWS 资源的元数据标签。标签由键值对组成,为各种标签使用场景提供了一种灵活的方式,为资源标注元数据属性:

它们可用于权限和策略、服务配额以及与其他 AWS 服务的集成。标签可以由用户定义,也可以在创建资源时 AWS 生成。这取决于是用户手动指定自定义标签,还是 AWS 服务自动生成标签。

  • SageMaker AI 中用户@@ 定义的标签:用户可以在使用 SageMaker AI SDKs、、、A SageMaker I 控制台或 AWS CloudFormation 模板创建 SageMaker AI 资源时添加标签。 AWS CLI CLI SageMaker APIs

    注意

    如果资源后来更新,标签值被更改或替换,用户定义的标签可以被覆盖。例如,以 {Team:A} 创建的训练作业可能会被错误地更新并重新标记为 {Team:B}. 因此,允许的权限可能分配不当。因此,在允许用户或用户组添加标签时应小心谨慎,因为他们可能会覆盖现有的标记值。最佳做法是严格限定标签权限的范围,并使用IAM条件来控制标记功能。

  • AWS 在 SageMaker AI 中@@ 生成的标签: SageMaker AI 会自动标记其创建的某些资源。例如,Studio 和 Studio Classic 会自动将sagemaker:domain-arn标签分配给他们创建的 SageMaker AI 资源。使用域名标记新资源ARN可以追溯训练作业、模型和端点等 SageMaker AI 资源是如何产生的。为了进行更精细的控制和跟踪,新资源会收到额外的标记,如

    • sagemaker:user-profile-arn-创建资源的用户个人资料。ARN这样就可以跟踪特定用户创建的资源。

    • sagemaker:space-arn-创建资源的空间。ARN这样就可以对每个空间的资源进行分组和隔离。

    注意

    AWS 用户无法更改生成的标签。

有关为 AWS 资源添加标签的一般信息和最佳实践,请参阅为资源添加 AWS 标签。有关主要标记使用场景的信息,请参阅标记使用场景

授予在创建 SageMaker AI 资源时添加标签的权限

您可以允许用户(用户定义的标签)或 Studio 和 Studio Classic(AWS 生成的标签)在创建新的 SageMaker AI 资源时为新的 AI 资源添加标签。为此,他们的IAM权限必须包括以下两项:

  • 该资源类型的基本 SageMaker AI 创建权限。

  • sagemaker:AddTags 权限。

例如,允许用户创建 SageMaker 训练作业并对其进行标记需要授予sagemaker:CreateTrainingJob和的权限sagemaker:AddTags

重要

允许 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 创建亚马逊 SageMaker AI 资源的自定义IAM策略还必须授予向这些资源添加标签的权限。之所以需要为资源添加标签的权限,是因为 Studio 和 Studio Classic 会自动为创建的任何资源添加标签。如果IAM策略允许 Studio 和 Studio Classic 创建资源但不允许标记,则在尝试创建资源时可能会出现 AccessDenied “” 错误。

AWS 亚马逊 A SageMaker I 的托管策略授予创建 SageMaker AI 资源的权限已经包括在创建这些资源时添加标签的权限。

管理员将这些IAM权限附加到:

  • AWS IAM为用户定义的标签分配给用户的角色

  • Studio 或 Studio Classic 为 AWS 生成的标记使用的执行角色

有关创建和应用自定义IAM策略的说明,请参阅创建IAM策略(控制台)

注意

通过搜索以开头的操作,可以在SageMaker API文档中找到 SageMaker AI 资源创建操作列表Create。这些创建操作(例如CreateTrainingJobCreateEndpoint)是创建新 SageMaker AI 资源的操作。

为某些创建操作添加标签权限

您可以通过在原始资源创建策略中附加一个IAM策略来授予该sagemaker:AddTags权限,但有限制。以下示例策略允许sagemaker:AddTags但仅限于某些 SageMaker AI 资源创建操作,例如CreateTrainingJob

{ "Sid": "AllowAddTagsForCreateOperations", "Effect": "Allow", "Action": [ "sagemaker:AddTags" ], "Resource": "*", "Condition": { "StringEquals": { "sagemaker:TaggingAction": "CreateTrainingJob" } } }

策略条件限制 sagemaker:AddTags 只能与特定的创建操作一起使用。在这种方法中,创建权限策略保持不变,而额外的策略则提供受限的 sagemaker:AddTags 访问权限。该条件将权限范围缩小到需要标记的创建操作,从而防止出现一揽子 sagemaker:AddTags 权限。这sagemaker:AddTags通过仅允许特定的 SageMaker AI 资源创建用例来实现最低权限。

示例:在全局范围内允许标记权限,并将创建操作限制在域内

在此自定义IAM策略示例中,前两个语句说明了如何使用标签来跟踪资源的创建。它允许对所有资源执行 sagemaker:CreateModel 操作,并在使用该操作时对这些资源进行标记。第三个语句演示了如何使用标签值来控制对资源的操作。在这种情况下,它会阻止创建任何标有特定域的 SageMaker AI 资源ARN,从而根据标签值限制访问权限。

具体而言:

  • 第一条语句允许对任何资源 (*) 执行 CreateModel 操作。

  • 第二条语句允许执行 sagemaker:AddTags 操作,但仅限于 sagemaker:TaggingAction 条件键等于 CreateModel 时。这就限制了 sagemaker:AddTags 操作只能用于标记新创建的模型。

  • 第三条语句拒绝对任何资源 (Create*) 执行任何 SageMaker AI 创建操作 (*),但前提是该资源的标签sagemaker:domain-arn等于特定域ARNdomain-arn

{ "Statement":[ { "Effect":"Allow", "Action":[ "sagemaker:CreateModel" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "sagemaker:AddTags" ], "Resource":"*", "Condition":{ "String":{ "sagemaker:TaggingAction":[ "CreateModel" ] } } }, { "Sid":"IsolateDomain", "Effect":"Deny", "Resource":"*", "Action":[ "sagemaker:Create*" ], "Condition":{ "StringEquals":{ "aws:ResourceTag/sagemaker:domain-arn":"domain-arn" } } } ] }

通过可见性条件限制对可搜索资源的访问

使用可见性条件限制用户对 AWS 账户内特定已标记资源的访问权限。用户只能访问他们拥有权限的资源。用户在搜索资源时,可以将搜索结果限制在特定资源范围内。

您可能希望您的用户仅查看与特定 Amazon SageMaker Studio 或 Amazon Studio Classic 域名相关的资源并与之交互。 SageMaker 您可以使用可见性条件将其访问权限限制在单个域或多个域内。

{ "Sid": "SageMakerApis", "Effect": "Allow", "Action": "sagemaker:Search", "Resource": "*", "Condition": { "StringEquals": { "sagemaker:SearchVisibilityCondition/Tags.sagemaker:example-domain-arn/EqualsIfExists": "arn:aws:sagemaker:AWS 区域:111122223333:domain/example-domain-1", "sagemaker:SearchVisibilityCondition/Tags.sagemaker:example-domain-arn/EqualsIfExists": "arn:aws:sagemaker:AWS 区域:111122223333:domain/example-domain-2" } } }

可见性条件的一般格式为 "sagemaker:SearchVisibilityCondition/Tags.key": "value"。您可以提供任何标记资源的键值对。

{ "MaxResults": number, "NextToken": "string", "Resource": "string", # Required Parameter "SearchExpression": { "Filters": [ { "Name": "string", "Operator": "string", "Value": "string" } ], "NestedFilters": [ { "Filters": [ { "Name": "string", "Operator": "string", "Value": "string" } ], "NestedPropertyName": "string" } ], "Operator": "string", "SubExpressions": [ "SearchExpression" ] }, "IsCrossAccount": "string", "VisibilityConditions" : [ List of conditions for visibility {"Key": "Tags.sagemaker:example-domain-arn", "Value": "arn:aws:sagemaker:AWS 区域:111122223333:domain/example-domain-1"}, {"Key": "Tags.sagemaker:example-domain-arn", "Value": "arn:aws:sagemaker:AWS 区域:111122223333:domain/example-domain-2"} ] ], "SortBy": "string", "SortOrder": "string" }

其中的可见性条件与策略中指定的 "sagemaker:SearchVisibilityCondition/Tags.key": "value" 格式相同。用户可以指定用于任何标记资源的键值对。

如果用户在搜索请求中包含 VisibilityConditions 参数,但适用于该用户的访问策略不包含在 VisibilityConditions 中指定的任何匹配条件键,则 Search 请求仍被允许并将运行。

如果未在用户的搜索API请求中指定VisibilityConditions参数,但适用于该用户的访问策略包含与相关的条件键VisibilityConditions,则该用户的Search请求将被拒绝。