Amazon SageMaker 身分型政策範例 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon SageMaker 身分型政策範例

根據預設,IAM使用者和角色沒有建立或修改 SageMaker 資源的許可。他們也無法使用 AWS Management Console AWS CLI、 或 執行任務 AWS API。IAM 管理員必須建立IAM政策,授予使用者和角色許可,以對所需的指定資源執行特定API操作。然後,管理員必須將這些政策連接到需要這些許可IAM的使用者或群組。若要了解如何將政策連接至IAM使用者或群組,請參閱服務授權參考 中的新增和移除IAM身分許可

若要了解如何使用這些範例政策文件建立IAM身分型JSON政策,請參閱在JSON索引標籤 上建立政策

政策最佳實務

身分型政策會決定是否有人可以在您的帳戶中建立、存取或刪除 SageMaker 資源。這些動作可能會讓您的 AWS 帳戶產生費用。當您建立或編輯身分型政策時,請遵循下列準則及建議事項:

  • 開始使用 AWS 受管政策並邁向最低權限許可 – 若要開始將許可授予您的使用者和工作負載,請使用 AWS 受管政策,將許可授予許多常見使用案例。它們可在您的 中使用 AWS 帳戶。建議您定義特定於使用案例 AWS 的客戶受管政策,以進一步減少許可。如需詳細資訊,請參閱 IAM 使用者指南 中的 AWS 受管政策AWS 受管政策。

  • 套用最低權限許可 – 當您使用IAM政策設定許可時, 只會授予執行任務所需的許可。為實現此目的,您可以定義在特定條件下可以對特定資源採取的動作,這也稱為最低權限許可。如需使用 IAM 套用許可的詳細資訊,請參閱 IAM 使用者指南 中的政策和許可IAM

  • 使用IAM政策中的條件來進一步限制存取:您可以將條件新增至政策,以限制對動作和資源的存取。例如,您可以撰寫政策條件來指定所有請求都必須使用 傳送SSL。如果透過特定 使用服務動作,例如 AWS 服務,您也可以使用 條件來授予其存取權 AWS CloudFormation。如需詳細資訊,請參閱 IAM 使用者指南 中的IAMJSON政策元素:條件

  • 使用 IAM Access Analyzer 驗證您的IAM政策以確保安全且功能許可 – IAM Access Analyzer 會驗證新的和現有的政策,讓政策遵循IAM政策語言 (JSON) 和IAM最佳實務。IAM Access Analyzer 提供超過 100 個政策檢查和可操作的建議,協助您撰寫安全且實用的政策。如需詳細資訊,請參閱 IAM 使用者指南 中的IAM存取分析器政策驗證

  • 需要多重要素身分驗證 (MFA) – 如果您有需要IAM使用者或 根使用者的案例 AWS 帳戶,請開啟 MFA 以獲得額外的安全性。若要在呼叫API操作MFA時要求 ,請將MFA條件新增至您的政策。如需詳細資訊,請參閱 IAM 使用者指南 中的設定 MFA受保護的API存取

如需 中最佳實務的詳細資訊IAM,請參閱 IAM 使用者指南 中的安全最佳實務IAM

使用 SageMaker 主控台

若要存取 Amazon SageMaker 主控台,您必須具有一組最低許可。這些許可必須允許您列出和檢視 AWS 帳戶中 SageMaker 資源的詳細資訊。如果您建立比最低必要許可更嚴格的身分型政策,則主控台將無法針對具有該政策的實體正常運作。這包括具有該政策的使用者或角色。

若要確保這些實體仍然可以使用 SageMaker 主控台,您還必須將下列 AWS 受管政策連接至這些實體。如需詳細資訊,請參閱服務授權參考 中的將許可新增至使用者

對於僅對 AWS CLI 或 進行呼叫的使用者,您不需要允許最低主控台許可 AWS API。相反地,僅允許存取與您嘗試執行API的操作相符的動作。

使用 Amazon SageMaker 主控台所需的許可

許可參考表列出 Amazon SageMaker API 操作,並顯示每個操作所需的許可。如需 Amazon SageMaker API操作的詳細資訊,請參閱 Amazon SageMaker API 許可:動作、許可和資源參考

若要使用 Amazon SageMaker 主控台,您需要授予其他動作的許可。具體而言,主控台需要許可,允許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 SageMaker Ground Truth 主控台所需的許可

若要使用 Amazon SageMaker Ground 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 增強型 AI (預覽) 主控台所需的許可

若要使用增強版 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 資源的建立

使用 SageMaker特定條件金鑰控制精細存取,以允許建立 SageMaker 資源。如需在IAM政策中使用條件索引鍵的相關資訊,請參閱 IAM 使用者指南 中的IAMJSON政策元素:條件

服務授權參考 中的 條件索引鍵、相關API動作和相關文件連結會列在 的條件索引鍵 SageMaker中。

下列範例示範如何使用 SageMaker 條件金鑰來控制存取。

使用檔案系統條件金鑰控制對 SageMaker 資源的存取

SageMaker 訓練為訓練演算法提供安全的基礎設施以供執行,但在某些情況下,您可能想要增加深度的防禦。例如,您可以將在演算法中執行不受信任程式碼的風險降到最低,或者在組織中具有特定的安全性規定。對於這些案例,您可以使用IAM政策條件元素中的服務特定條件索引鍵來縮小使用者的範圍,以:

  • 特定檔案系統

  • 目錄

  • 存取模式 (唯讀、唯讀)

  • 安全群組

將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,請參閱SageMaker 角色

將訓練限制為特定 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" } } } ] }

限制對 Ground Truth 標籤工作和 Amazon A2I 人工審核工作流程的人力資源類型的存取

Amazon SageMaker Ground Truth 和 Amazon Augmented AI 工作團隊屬於三種勞動力類型之一:

  • 公有 (使用 Amazon Mechanical Turk)

  • private

  • 供應商

您可以使用其中一種類型或工作團隊 來限制使用者對特定工作團隊的存取權ARN。若要這麼做,請使用 sagemaker:WorkteamType和/或 sagemaker:WorkteamArn 條件索引鍵。若是 sagemaker:WorkteamType 條件金鑰,請使用字串條件運算子。針對sagemaker:WorkteamArn條件索引鍵,使用 Amazon Resource Name (ARN) 條件運算子 。如果使用者嘗試使用受限的工作團隊建立標籤工作, 會 SageMaker 傳回拒絕存取錯誤。

下列政策顯示使用 sagemaker:WorkteamTypesagemaker:WorkteamArn條件索引鍵搭配適當條件運算子和有效條件值的不同方法。

下列範例將 sagemaker:WorkteamType 條件金鑰與 StringEquals 條件運算子搭配使用,以限制對公有工作團隊的存取權。它接受下列格式的條件值:workforcetype-crowd,其中 workforcetype 可以等於 publicprivatevendor

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

下列政策示範如何使用 sagemaker:WorkteamArn 條件金鑰來限制對公有工作團隊的存取權。第一個顯示如何搭配工作團隊ARN和ArnLike條件運算子的有效 IAM regex 變數使用。第二個顯示如何與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" } } } ] }

強制執行輸入資料的加密

下列政策會限制使用者指定 AWS KMS 金鑰,以在建立時使用sagemaker:VolumeKmsKey條件金鑰加密輸入資料:

  • 訓練

  • 超參數調校

  • 標籤任務

{ "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.*"] } } } ] }

強制停用網際網路存取和根存取以建立筆記本執行個體

您可以同時對筆記本執行個體停用網際網路存取和根存取,以協助讓它們更加安全。如需控制筆記本執行個體根存取權的資訊,請參閱 控制 SageMaker 筆記本執行個體的根存取權。如需停用筆記本執行個體網際網路存取的資訊,請參閱 將 中的筆記本執行個體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存取

若要控制對 SageMaker API SageMaker 託管端點呼叫的存取,請使用身分型IAM政策。

限制來自 的 呼叫存取 SageMaker API和執行時間 VPC

如果您在 中設定介面端點VPC,則 以外的個人VPC可以透過網際網路連線至 SageMaker API和執行期。若要防止這種情況,請連接限制存取來自 內之呼叫IAM的政策VPC。這些呼叫必須僅限於有權存取您 SageMaker 資源的所有使用者和群組。如需為 SageMaker API 和 執行期建立VPC介面端點的相關資訊,請參閱 連線至 SageMaker 內部 VPC

重要

如果您套用類似下列其中一項IAM的政策,則使用者無法透過主控台存取指定的 SageMaker APIs 。

若要限制僅從 中進行連線的存取VPC,請建立限制存取 AWS Identity and Access Management 的政策。此存取權必須僅限於來自您 內部的呼叫VPC。然後將該政策新增至用於存取 SageMaker API或 執行期的每個 AWS Identity and Access Management 使用者、群組或角色。

注意

此政策僅允許向建立介面端點之子網路中的呼叫者建立連線。

{ "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 API和 執行期呼叫的存取

您只能從您指定的清單中的 IP 地址存取 SageMaker 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 ,使用此方法依 IP 地址篩選不相容。如需透過VPC介面端點連線時限制筆記本執行個體存取權的相關資訊,請參閱 透過VPC介面端點連線至筆記本執行個體

使用標籤控制對 SageMaker 資源的存取

在IAM政策中指定標籤,以控制對 SageMaker 資源群組的存取。使用標籤實作屬性型存取控制 (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

  • 搜尋

一個簡單的範例可以幫助您了解如何使用標籤來分區資源。假設您已DevTeam2在 AWS 帳戶中定義了兩個不同的IAM群組,名為 DevTeam1和 。您也建立了 10 個筆記本執行個體。您正在為一個專案使用 5 個筆記本執行個體。您正在為第二個專案使用另外 5 個筆記本執行個體。您可以在第一個專案使用的筆記本執行個體上提供API撥打電話的DevTeam1許可。您可以提供 DevTeam2來對第二個專案使用的筆記本執行個體進行API呼叫。

下列程序提供一個簡單的範例,可協助您了解新增標籤的概念。您可以使用它來實現前段中說明的解決方案。

控制對API呼叫的存取 (範例)
  1. 使用鍵 Project 和值 A 在用於第一個專案的筆記本執行個體新增標籤。如需將標籤新增至 SageMaker 資源的資訊,請參閱 AddTags

  2. 使用鍵 Project 和值 B 在用於第二個專案的筆記本執行個體新增標籤。

  3. 建立ResourceTag具有條件IAM的政策,拒絕存取用於第二個專案的筆記本執行個體。然後,將該政策連接至 DevTeam1。下列範例政策會拒絕任何筆記本執行個體上的所有API呼叫,其標籤的索引鍵為 Project,值為 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. 建立ResourceTag具有條件IAM的政策,拒絕存取用於第一個專案的筆記本執行個體。然後,將該政策連接至 DevTeam2。下列範例政策會拒絕任何筆記本執行個體上的所有API呼叫,其標籤的索引鍵為 Project且值為 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": "*" } ] }

提供標記 SageMaker資源的許可

標籤是您可以連接至特定 AWS 資源的中繼資料標籤。標籤由索引鍵值對組成,該對提供一種靈活的方法,為具有各種標記使用案例中繼資料屬性的資源加上註釋,包括:

它們可用於許可和政策、服務配額,以及與其他 AWS 服務的整合。標籤可以在建立資源時由使用者定義或 AWS 產生。這取決於使用者是否手動指定自訂標籤, AWS 還是服務會自動產生標籤。

  • 中的使用者定義標籤 SageMaker:使用者可以在使用 SageMaker SDKs、 AWS CLI CLI、 SageMaker APIs SageMaker 主控台或 AWS CloudFormation 範本建立 SageMaker 資源時新增標籤。

    注意

    如果稍後更新資源且變更或取代標籤值,則可以覆寫使用者定義的標籤。例如,使用 {Team: A} 建立的訓練任務可能會不當更新,並重新標記為 {Team: B}。因此,允許的許可可能會指派不正確。因此,在允許使用者或群組新增標籤時應小心,因為它們可能可以覆寫現有的標籤值。最佳實務是嚴格限制標籤許可,並使用IAM條件來控制標籤能力。

  • 在 中AWS 產生的標籤 SageMaker: SageMaker自動標記其建立的特定資源。例如,Studio 和 Studio Classic 會自動將sagemaker:domain-arn標籤指派給他們建立 SageMaker 的資源。使用網域標記新資源ARN可追蹤訓練任務、模型和端點等 SageMaker 資源的產生方式。為了更精細的控制和追蹤,新資源會收到其他標籤,例如:

    • sagemaker:user-profile-arn - 建立資源ARN的使用者設定檔的 。這允許追蹤特定使用者建立的資源。

    • sagemaker:space-arn - 資源建立所在空間ARN的 。這允許對每個空間的資源進行分組和隔離。

    注意

    AWS 產生的標籤無法由使用者變更。

如需標記 AWS 資源和最佳實務的一般資訊,請參閱標記 AWS 資源。如需主要標記使用案例的相關資訊,請參閱標記使用案例

准許在建立 SageMaker 資源時新增標籤

您可以允許使用者 (使用者定義的標籤 ) 或 Studio 和 Studio Classic (AWS 產生的標籤 ) 在建立時新增新 SageMaker 資源的標籤。若要這麼做,其IAM許可必須包含下列兩項:

  • 基礎會 SageMaker 建立該資源類型的許可。

  • sagemaker:AddTags 許可。

例如,允許使用者建立 SageMaker 訓練任務並加上標籤,這需要授予 sagemaker:CreateTrainingJob和 的許可sagemaker:AddTags

重要

允許 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 建立 Amazon SageMaker 資源的自訂IAM政策也必須授予許可,才能將標籤新增至這些資源。需要將標籤新增至資源的許可,因為 Studio 和 Studio Classic 會自動標記他們建立的任何資源。如果IAM政策允許 Studio 和 Studio Classic 建立資源,但不允許標記,則嘗試建立資源時可能會發生「AccessDenied」錯誤。

AWS Amazon 的受管政策 SageMaker 提供建立 SageMaker 資源的許可,已包含在建立這些資源時新增標籤的許可。

管理員會將這些IAM許可連接到下列任一項目:

  • AWS IAM 針對使用者定義標籤指派給使用者的角色

  • Studio 或 Studio Classic 用於產生標籤的 AWS 執行角色

如需建立和套用自訂IAM政策的指示,請參閱建立IAM政策 (主控台)

注意

搜尋以 開頭的動作,即可在SageMaker API文件中找到 SageMaker 資源建立操作清單Create。這些建立動作,例如 CreateTrainingJobCreateEndpoint,是建立新 SageMaker 資源的操作。

將標籤許可新增至特定建立動作

您可以透過將其他IAM政策連接至原始資源建立政策來授予具有限制的sagemaker:AddTags許可。下列範例政策允許 sagemaker:AddTags,但僅限於特定 SageMaker 資源建立動作,例如 CreateTrainingJob

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

政策條件限制sagemaker:AddTags為與特定建立動作搭配使用。在此方法中,建立許可政策會保持不變,而額外的政策會提供限制sagemaker:AddTags存取。條件會將其縮小範圍範圍,以至需要標記的建立動作,藉此防止空白sagemaker:AddTags許可。這只允許特定 SageMaker資源建立使用案例使用,sagemaker:AddTags以實作 的最低權限。

範例:全域允許標籤許可,並將建立動作限制為網域

在此自訂IAM政策範例中,前兩個陳述式說明使用標籤來追蹤資源建立。其允許在使用sagemaker:CreateModel所有資源時對這些資源進行動作和標記。第三個陳述式示範如何使用標籤值來控制資源的操作。在此情況下,它會防止建立任何以特定網域 標記 SageMaker 的資源ARN,並根據標籤值限制存取。

尤其是:

  • 第一個陳述式允許對任何資源 () 執行CreateModel動作*

  • 第二個陳述式允許 sagemaker:AddTags動作,但僅當sagemaker:TaggingAction條件索引鍵等於 時CreateModel。這會將sagemaker:AddTags動作限制為只有在用來標記新建立的模型時。

  • 第三個陳述式會拒絕在任何資源 SageMaker (Create*) 上建立動作 (*),但只有在資源具有sagemaker:domain-arn等於特定網域 ARN、 的標籤時domain-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 SageMaker Studio Classic 網域相關聯的資源,並與之互動。您可以使用可見性條件來限制其對單一網域或多個網域的存取。

{ "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請求。