Amazon SageMaker のアイデンティティベースポリシーの例 - アマゾン SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon SageMaker のアイデンティティベースポリシーの例

デフォルトでは、IAM ユーザーおよびロールには、 SageMaker リソースを作成または変更するアクセス許可はありません。AWS Management Console、AWS CLI、または AWS API を使用してタスクを実行することもできません。IAM 管理者は、ユーザーとロールに必要な、指定されたリソースで特定の API オペレーションを実行する許可をユーザーとロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらの許可が必要な IAM ユーザーまたはグループにそのポリシーを添付します。IAM ユーザーまたはグループにポリシーをアタッチする方法については、IAM ユーザーガイドの「IAM ID のアクセス許可の追加および削除」を参照してください。

JSON ポリシードキュメントのこれらの例を使用して、IAM アイデンティティベースのポリシーを作成する方法については、「IAM ユーザーガイド」の「JSON タブでのポリシーの作成」を参照してください。

ポリシーのベストプラクティス

ID ベースのポリシーは、ユーザーのアカウントで誰かが SageMaker リソースを作成、アクセス、または削除できるどうかを決定します。これらのアクションを実行すると、AWS アカウント に追加料金が発生する可能性があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください。

  • AWS マネージドポリシーを使用して開始し、最小特権の許可に移行する – ユーザーとワークロードへの許可の付与を開始するには、多くの一般的なユースケースのために許可を付与する AWS マネージドポリシーを使用します。これらは AWS アカウント で使用できます。ユースケースに応じた AWS カスタマーマネージドポリシーを定義することで、許可をさらに減らすことをお勧めします。詳細については、「IAM ユーザーガイド」の「AWS マネージドポリシー」または「AWS ジョブ機能の管理ポリシー」を参照してください。

  • 最小特権を適用する – IAM ポリシーで許可を設定するときは、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、最小特権アクセス許可とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、「IAM ユーザーガイド」の「IAM でのポリシーとアクセス許可」を参照してください。

  • IAM ポリシーで条件を使用してアクセスをさらに制限する – ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。例えば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定することができます。また、AWS のサービス などの特定の AWS CloudFormation を介して使用する場合、条件を使用してサービスアクションへのアクセスを許可することもできます。詳細については、[IAM User Guide] (IAM ユーザーガイド) の [IAM JSON policy elements: Condition] (IAM JSON ポリシー要素:条件) を参照してください。

  • IAM Access Analyzer を使用して IAM ポリシーを検証し、安全で機能的な許可を確保する - IAM Access Analyzer は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM Access Analyzer は 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーを作成できるようサポートします。詳細については、「IAM ユーザーガイド」の「IAM Access Analyzer ポリシーの検証」を参照してください。

  • 多要素認証 (MFA) を要求する – アカウントで IAM ユーザーまたはルートユーザーを要求するシナリオがある場合は、セキュリティを強化するために MFA をオンにします。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、「IAM ユーザーガイド」の「MFA 保護 API アクセスの設定」を参照してください。

IAM でのベストプラクティスの詳細については、「IAM ユーザーガイド」の「IAM でのセキュリティのベストプラクティス」を参照してください。

SageMaker コンソールの使用

Amazon SageMaker コンソールにアクセスするには、許可の最小限のセットが必要です。これらの許可により、AWS アカウントの SageMaker リソースに関する詳細を一覧表示および表示できるようにする必要があります。最小限必要な許可よりも厳しく制限されたアイデンティティベースポリシーを作成すると、そのポリシーを添付したエンティティ (IAM ユーザーまたはロール) に対してコンソールが意図したとおりに機能しません。

SageMaker これらのエンティティがコンソールを使用できるように、AWSエンティティに次の管理ポリシーもアタッチします。詳細については、IAM ユーザーガイドの「ユーザーへのアクセス許可の追加」を参照してください。

AWS CLI または AWS API のみを呼び出すユーザーには、最小限のコンソール許可を付与する必要はありません。代わりに、実行しようとしている API オペレーションに一致するアクションのみへのアクセスが許可されます。

Amazon SageMaker コンソールの使用に必要なアクセス許可

アクセス許可のリファレンス表は、Amazon SageMaker API オペレーションとそれらの各オペレーションに必要なアクセス許可を示しています。Amazon SageMaker API オペレーションの詳細については、を参照してくださいAmazon SageMaker API アクセス許可:アクション、アクセス許可、リソースのリファレンス

Amazon SageMaker コンソールを使用するには、追加のアクションのためのアクセス許可を付与する必要があります。具体的には、ec2 アクションにサブネット、VPC、セキュリティグループを表示することを許可する、アクセス許可がコンソールに必要です。オプションで、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 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 条件キーを使用してリソースの作成を制御

SageMaker固有の条件キーを使用して、 SageMaker リソースの作成に対するきめ細かなアクセスを制御します。IAM ポリシーでの条件キーの使用の詳細については、IAM ユーザーガイドの「IAM JSON ポリシーエレメント: 条件」を参照してください。

条件キー、関連する API アクション、関連ドキュメントへのリンクについては、IAM ユーザーガイドの SageMaker「条件キー」を参照してください

次の例は、 SageMaker 条件キーを使ってアクセスを制御する方法を示しています。

SageMaker ファイルシステム条件キーを使用してリソースへのアクセスを制御する

SageMaker トレーニングは、トレーニングアルゴリズムを実行するための安全なインフラストラクチャを提供しますが、場合によっては、深層防御を実装する必要があります。たとえば、アルゴリズムで信頼されていないコードを実行するリスクを最小限に抑えます。または、組織に固有のセキュリティの義務があります。このようなシナリオでは、IAM ポリシーの Condition 要素でサービス固有の条件キーを使用して、特定のファイルシステム、ディレクトリ、アクセスモード (読み取り/書き込み、読み取り専用)、およびセキュリティグループにアクセスできるユーザーを制限できます。

特定のディレクトリおよびアクセスモードにアクセス可能な 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" } } } ] }

IAM ユーザーを特定のファイルシステムに制限する

ユーザー空間クライアントを使用する悪意のあるアルゴリズムが、アカウント内のファイルシステムに直接アクセスできないようにするには、特定のセキュリティグループからの進入を許可して、ネットワークトラフィックを制限します。次の例では、IAM ユーザーは指定されたセキュリティグループのみを使ってファイルシステムにアクセスできます。

{ "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 リポジトリのアルゴリズムを使ってトレーニングジョブを起動できる IAM ユーザーを制限する IAM ロールを作成します。

ロールをとともに使用する方法の詳細については SageMaker、「SageMaker ロール」を参照してください。

トレーニングを特定の VPC に制限する

Amazon VPC 内からトレーニングジョブを作成する AWS ユーザーを制限します。VPC 内でトレーニングジョブが作成されると、VPC フローログを使用して、トレーニングクラスターとの間のトラフィックをすべてモニタリングすることができます。VPC フローログの使用方法については、Amazon Virtual Private Cloud ユーザーガイドの「VPC フローログ」を参照してください。

次のポリシーでは、IAM ユーザーが VPC 内から CreateTrainingJob を呼び出すことによってトレーニングジョブを作成するよう強制します。

{ "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 を使用)、プライベート、ベンダーの 3 つのワークフォースタイプのいずれかに分類されます。これらのタイプのいずれかまたは作業チームの ARN を使って、特定の作業チームへの IAM ユーザーアクセスを制限するには、sagemaker:WorkteamType および sagemaker:WorkteamArn 条件キーのいずれかまたは両方を使用します。sagemaker:WorkteamType 条件キーには、文字列条件演算子を使用します。sagemaker:WorkteamArn 条件キーには、Amazon リソースネーム (ARN) 条件演算子を使用します。ユーザーが制限された作業チームでラベリングジョブを作成しようとすると、 SageMaker アクセス拒否エラーが返されます。

以下のポリシーは、sagemaker:WorkteamType および sagemaker:WorkteamArn 条件キーを適切な条件演算子および有効な条件値と共に使用するさまざまな方法を示しています。

以下の例では、sagemaker:WorkteamType 条件キーと StringEquals 条件演算子を使用して、パブリック作業チームへのアクセスを制限しています。条件値の形式は workforcetype-crowd です。workforcetypepublicprivate、または vendor に置き換えます。

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

以下のポリシーは、sagemaker:WorkteamArn 条件キーを使用してパブリック作業チームへのアクセスを制限する方法を示しています。最初の例は、その条件キーを作業チーム ARN の有効な IAM regex-variant および ArnLike 条件演算子と共に使う方法を示しています。2 番目の例は、その条件キーを 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 キーを指定できる IAM ユーザーを制限します。

{ "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:VolumeKmsKey 条件キーを使用してノートブックインスタンスを作成または更新するときに、アタッチされたストレージボリュームを暗号化する AWS KMS キーを指定するよう IAM ユーザーに強制します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceEncryption", "Effect": "Allow", "Action": [ "sagemaker:CreateNotebookInstance" ], "Resource": "*", "Condition": { "ArnLike": { "sagemaker:VolumeKmsKey": "*key/volume-kms-key-12345" } } } ] }

トレーニングジョブのネットワークの隔離を強制する

次のポリシーでは、sagemaker:NetworkIsolation 条件キーを使ってトレーニングジョブを作成するときに、ネットワーク隔離を可能にする IAM ユーザーを制限します。

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

トレーニングジョブに特定のインスタンスタイプを強制する

次のポリシーでは、sagemaker:InstanceTypes 条件キーを使ってトレーニングジョブを作成するときに、特定のインスタンスタイプを使うよう IAM ユーザーに強制します。

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

トレーニングジョブに特定の EI アクセラレーターを強制する

次のポリシーでは、ノートブックインスタンスを作成または更新したり、sagemaker:AcceleratorTypes 条件キーを使ってエンドポイント設定を作成したりするときに、特定の Elastic Inference (EI) アクセラレーター (提供されている場合) の使用を IAM ユーザーに制限します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceAcceleratorType", "Effect": "Allow", "Action": [ "sagemaker:CreateNotebookInstance", "sagemaker:UpdateNotebookInstance", "sagemaker:CreateEndpointConfig" ], "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "sagemaker:AcceleratorTypes": ["ml.eia1.medium"] } } } ] }

ノートブックインスタンスを作成するためにインターネットアクセスとルートアクセスを無効にする

ノートブックインスタンスへのインターネットアクセスとルートアクセスのいずれも無効にすることで、それらの安全性を高めることができます。ノートブックインスタンスへのルートアクセスのコントロールについては、「 SageMaker ノートブックインスタンスへのルートアクセスを制御する」を参照してください。ノートブックインスタンスのインターネットアクセスの無効化については、「VPC 内のノートブックインスタンスを外部リソースに接続する」を参照してください。

次のポリシーでは、インスタンスの作成時にネットワークアクセスを無効にしたり、ノートブックインスタンスの作成時や更新時にルートアクセスを無効にしたりするよう IAM ユーザーに要求します。

{ "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 ポリシーを使用します。

VPC 内からの呼び出しに対する SageMaker API およびランタイムへのアクセスを制限する

VPC 内にインターフェイスエンドポイントを設定した場合でも、VPC 外のユーザーは、インターネット経由で SageMaker API およびランタイムに接続できます。ただし、VPC 内からの呼び出しへのアクセスを制限する IAM ポリシーをアタッチする場合を除きます。 SageMaker SageMaker API およびランタイムの VPC インターフェイスエンドポイントの作成については、「」を参照してくださいVPC SageMaker インターフェイスエンドポイント経由でのConnect

重要

以下のような IAM ポリシーを適用すると、ユーザーは指定された SageMaker API にコンソールからアクセスできなくなります。

VPC 内からの接続のみにアクセスを制限するには、VPC 内からの呼び出しのみにアクセスを制限する AWS Identity and Access Management ポリシーを作成します。次に、 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:SourceVpc ではなく、aws:SourceVpce 条件キーを使用します。

{ "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 コールおよびランタイムの呼び出しへのアクセスを許可するには、API へのアクセスを拒否する IAM ポリシーをアタッチします。ただし、API やランタイムにアクセスするために使用されるすべてのAWS Identity and Access Managementユーザー、グループ、ロールに対する呼び出しが、リスト内の IP アドレスから行われた場合を除きます。IAM ポリシーの作成の詳細については、AWS Identity and Access Management ユーザーガイドの「IAM ポリシーの作成」を参照してください。API コールにアクセスする IP アドレスのリストを指定するには、IpAddress 条件演算子と aws:SourceIP 条件コンテキストキーを使用します。IAM 条件演算子の詳細については、AWS Identity and Access Management ユーザーガイドの「IAM JSON ポリシーエレメント: 条件演算子」を参照してください。IAM 条件コンテキストキーの詳細については、「AWS グローバル条件コンテキストキー」を参照してください。

たとえば、次のポリシーでは、192.0.2.0 - 192.0.2.255 および 203.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 アドレスからのみノートブックインスタンスへのアクセスを許可するには、CreatePresignedNotebookInstanceUrl へのアクセスを拒否する IAM ポリシーをアタッチします。ただし、リスト内の IP アドレスから、ノートブックインスタンスへのアクセスに使用する各 AWS Identity and Access Management ユーザー、グループ、またはロールを呼び出す場合を除きます。IAM ポリシーの作成の詳細については、AWS Identity and Access Management ユーザーガイドの「IAM ポリシーの作成」を参照してください。ノートブックインスタンスにアクセスする IP アドレスのリストを指定するには、IpAddress 条件演算子と aws:SourceIP 条件コンテキストキーを使用します。IAM 条件演算子の詳細については、AWS Identity and Access Management ユーザーガイドの「IAM JSON ポリシーエレメント: 条件演算子」を参照してください。IAM 条件コンテキストキーの詳細については、「AWS グローバル条件コンテキストキー」を参照してください。

たとえば、次のポリシーでは、192.0.2.0 - 192.0.2.255 および 203.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 リクエストとフレームに適用されます。

注記

この方法を使って IP アドレスでフィルタリングする方法は、VPC SageMaker インターフェイスエンドポイントを介して接続するときには互換性がありません。 。VPC インターフェイスエンドポイントを介して接続するときにノートブックインスタンスへのアクセスを制限する方法については、「VPC インターフェイスエンドポイントを介してノートブックインスタンスに接続する」を参照してください。

タグにより、 SageMaker リソースへのアクセスを制御する

SageMaker リソースにタグを付与し、IAMResourceTag ポリシーで条件を指定することで、リソースグループへのアクセスを制御します。

注記

タグベースのポリシーでは、以下の API コールは制限されません。

  • DeleteImageVersion

  • DescribeImageVersion

  • ListAlgorithms

  • ListCodeRepositories

  • ListCompilationJobs

  • ListEndpointConfigs

  • ListEndpoints

  • ListFlowDefinitions

  • ListHumanTaskUis

  • ListHyperparameterTuningJobs

  • ListLabelingJobs

  • ListLabelingJobsForWorkteam

  • ListModelPackages

  • ListModels

  • ListNotebookInstanceLifecycleConfigs

  • ListNotebookInstances

  • ListSubscribedWorkteams

  • ListTags

  • ListProcessingJobs

  • ListTrainingJobs

  • ListTrainingJobsForHyperParameterTuningJob

  • ListTransformJobs

  • ListWorkteams

  • 検索

例えば、AWS アカウントで DevTeam1 および DevTeam2 という 2 つの異なる IAM グループを定義したとします。また、10 個のノートブックインスタンスを作成し、そのうちの 5 個を 1 つのプロジェクトに使用して、残りの 5 個を別のプロジェクトに使用するとします。DevTeam1 のメンバーには、最初のプロジェクトに使用されるノートブックインスタンスの API コールの実行を許可し、DevTeam2 のメンバーには、2 番目のプロジェクトに使用されるノートブックインスタンスの API コールの実効を許可します。

API コールへのアクセスをコントロールするには (例)
  1. 最初のプロジェクトに使用されるノートブックインスタンスに、キーが Project、値が A であるタグを追加します。 SageMaker リソースへのタグの追加については、「」を参照してくださいAddTags

  2. 2 番目のプロジェクトに使用されるノートブックインスタンスに、キーが Project、値が B であるタグを追加します。

  3. 2 番目のプロジェクトで使用されるノートブックインスタンスへのアクセスを拒否する ResourceTag 条件を含む IAM ポリシーを作成し、そのポリシーを DevTeam1 にアタッチします。以下は、キーが Project、値が B であるタグを持つノートブックインスタンスに対するすべての API コールを拒否するポリシーの例です。

    { "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 ポリシーを作成して ID にアタッチする方法については、AWS Identity and Access Management ユーザーガイドの「ポリシーを使用したアクセス制御」を参照してください。

  4. 最初のプロジェクトで使用されるノートブックインスタンスへのアクセスを拒否する ResourceTag 条件を含む IAM ポリシーを作成し、そのポリシーを DevTeam2 にアタッチします。以下は、キーが Project、値が A であるタグを持つノートブックインスタンスに対するすべての API コールを拒否するポリシーの例です。

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

API コールにタグの有無を要求する

特定のタグまたは特定のタグ値の有無を要求するには、IAM ポリシーで RequestTag 条件キーを使用します。例えば、IAM グループの任意のメンバーによって作成されたすべてのエンドポイントを、キーが environment、値が dev であるタグを使って作成する必要がある場合、次のようにポリシーを作成します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sagemaker:CreateEndpoint", "Resource": "arn:aws:sagemaker:*:*:endpoint/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "dev" } } } ] }