

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

# Amazon SageMaker AI のアイデンティティベースポリシーの例
<a name="security_iam_id-based-policy-examples"></a>

IAM ユーザーとロールには、デフォルトでは SageMaker AI リソースを作成したり変更したりするアクセス許可はありません。また、 AWS マネジメントコンソール、 AWS CLI、または AWS API を使用してタスクを実行することはできません。IAM 管理者は、ユーザーとロールに必要な、指定されたリソースで特定の API オペレーションを実行する権限をユーザーとロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらの権限が必要な IAM ユーザーまたはグループにそのポリシーをアタッチする必要があります。IAM ユーザーまたはグループにポリシーをアタッチする方法については、「*Service Authorization Reference*」の「[IAM ID のアクセス許可の追加および削除](https://docs.aws.amazon.com/service-authorization/latest/reference/access_policies_manage-attach-detach.html)」を参照してください。

これらのサンプル JSON ポリシードキュメントを使用して IAM アイデンティティベースのポリシーを作成する方法については、「[Creating Policies on the JSON Tab](https://docs.aws.amazon.com/service-authorization/latest/reference/access_policies_create.html#access_policies_create-json-editor)」を参照してください。

**Topics**
+ [ポリシーに関するベストプラクティス](#security_iam_service-with-iam-policy-best-practices)
+ [SageMaker AI コンソールを使用する](#security_iam_id-based-policy-examples-console)
+ [自分の権限の表示をユーザーに許可する](#security_iam_id-based-policy-examples-view-own-permissions)
+ [条件キーを使用して SageMaker AI リソースの作成を制御する](#sagemaker-condition-examples)
+ [アイデンティティベースのポリシーを使用して SageMaker AI API へのアクセスを制御する](#api-access-policy)
+ [SageMaker AI API とランタイムコールへのアクセスを IP アドレスで制限する](#api-ip-filter)
+ [ノートブックインスタンスへのアクセスを IP アドレスで制限する](#nbi-ip-filter)
+ [タグを使用して SageMaker AI リソースへのアクセスを制御する](#access-tag-policy)
+ [SageMaker AI リソースにタグ付けのアクセス許可を付与する](#grant-tagging-permissions)
+ [可視性条件を使用して検索可能なリソースへのアクセスを制限する](#limit-access-to-searchable-resources)

## ポリシーに関するベストプラクティス
<a name="security_iam_service-with-iam-policy-best-practices"></a>

アイデンティティベースのポリシーは、ユーザーのアカウントで SageMaker AI リソースを作成、アクセス、または削除できるどうかを決定します。これらのアクションでは、 AWS アカウントに費用が発生する場合があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください:
+ ** AWS 管理ポリシーを開始し、最小特権のアクセス許可に移行する** – ユーザーとワークロードにアクセス許可の付与を開始するには、多くの一般的なユースケースにアクセス許可を付与する*AWS 管理ポリシー*を使用します。これらは で使用できます AWS アカウント。ユースケースに固有の AWS カスタマー管理ポリシーを定義することで、アクセス許可をさらに減らすことをお勧めします。詳細については、*IAM ユーザーガイド* の [AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) または [ジョブ機能のAWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) を参照してください。
+ **最小特権を適用する** – IAM ポリシーでアクセス許可を設定する場合は、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、*最小特権*アクセス許可とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、*IAM ユーザーガイド* の [IAM でのポリシーとアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) を参照してください。
+ **IAM ポリシーで条件を使用してアクセスをさらに制限する** - ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。たとえば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定できます。条件を使用して、サービスアクションが などの特定の を通じて使用されている場合に AWS のサービス、サービスアクションへのアクセスを許可することもできます CloudFormation。詳細については、*IAM ユーザーガイド* の [IAM JSON ポリシー要素:条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) を参照してください。
+ **IAM アクセスアナライザー を使用して IAM ポリシーを検証し、安全で機能的な権限を確保する** - IAM アクセスアナライザー は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM アクセスアナライザーは 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーの作成をサポートします。詳細については、*IAM ユーザーガイド* の [IAM Access Analyzer でポリシーを検証する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html) を参照してください。
+ **多要素認証 (MFA) を要求する** – で IAM ユーザーまたはルートユーザーを必要とするシナリオがある場合は AWS アカウント、MFA をオンにしてセキュリティを強化します。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、*IAM ユーザーガイド* の [MFA を使用した安全な API アクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html) を参照してください。

IAM でのベストプラクティスの詳細については、*IAM ユーザーガイド* の [IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) を参照してください。

## SageMaker AI コンソールを使用する
<a name="security_iam_id-based-policy-examples-console"></a>

Amazon SageMaker AI コンソールにアクセスするには、最小限のアクセス許可のセットが必要です。これらのアクセス許可により、 AWS アカウントの SageMaker AI リソースの詳細を一覧表示および表示できます。最小限必要な許可よりも厳しい制限のアイデンティティベースのポリシーを作成すると、そのポリシーを持つエンティティではコンソールが適切に機能しません。これには、そのポリシーを持つユーザーまたはロールが含まれます。

これらのエンティティが引き続き SageMaker AI コンソールを使用できるようにするには、エンティティに次の AWS 管理ポリシーもアタッチする必要があります。詳細については、「*Service Authorization Reference*」の「[Adding Permissions to a User](https://docs.aws.amazon.com/service-authorization/latest/reference/id_users_change-permissions.html#users_change_permissions-add-console)」を参照してください。

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

**Topics**
+ [Amazon SageMaker AI コンソールを使用するために必要なアクセス許可](#console-permissions)
+ [Amazon SageMaker Ground Truth コンソールを使用するために必要なアクセス許可](#groundtruth-console-policy)
+ [Amazon Augmented AI (プレビュー) コンソールを使用するために必要なアクセス許可](#amazon-augmented-ai-console-policy)

### Amazon SageMaker AI コンソールを使用するために必要なアクセス許可
<a name="console-permissions"></a>

アクセス許可のリファレンス表は、Amazon SageMaker AI API オペレーションとそれらの各オペレーションに必要なアクセス許可を説明しています。Amazon SageMaker API オペレーションの詳細については、「[Amazon SageMaker AI API アクセス許可: アクション、アクセス許可、リソースの参照](api-permissions-reference.md)」を参照してください。

Amazon SageMaker AI コンソールを使用するには、追加のアクションのためのアクセス許可を付与する必要があります。具体的には、`ec2` アクションにサブネット、VPC、セキュリティグループを表示することを許可する、アクセス許可がコンソールに必要です。オプションで、`CreateNotebook`、`CreateTrainingJob`、`CreateModel` などのタスク用の*実行ロール*を作成する、アクセス許可がコンソールに必要です。これらのアクセス許可に次のアクセス許可ポリシーを付与します。

------
#### [ JSON ]

****  

```
{
    "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 コンソールを使用するために必要なアクセス許可
<a name="groundtruth-console-policy"></a>

Amazon SageMaker Ground Truth コンソールを使用するには、追加のリソースのためのアクセス許可を付与する必要があります。具体的には、コンソールには以下のアクセス許可が必要です。
+ サブスクリプションを表示する AWS Marketplace、
+ プライベートワークフォースを管理する Amazon Cognito オペレーション
+ 入出力ファイルにアクセスするための Amazon S3 アクション
+ AWS Lambda 関数を一覧表示および呼び出すアクション

これらのアクセス許可に次のアクセス許可ポリシーを付与します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GroundTruthConsole",
            "Effect": "Allow",
            "Action": [
                "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:RunGenerateManifestByCrawlingJob",

                "lambda:InvokeFunction",
                "lambda:ListFunctions",

                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### Amazon Augmented AI (プレビュー) コンソールを使用するために必要なアクセス許可
<a name="amazon-augmented-ai-console-policy"></a>

Augmented AI コンソールを使用するには、追加のリソースのためのアクセス許可を付与する必要があります。これらのアクセス許可に次のアクセス許可ポリシーを付与します。

------
#### [ JSON ]

****  

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

------

## 自分の権限の表示をユーザーに許可する
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

この例では、ユーザーアイデンティティにアタッチされたインラインおよびマネージドポリシーの表示を 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 リソースの作成を制御する
<a name="sagemaker-condition-examples"></a>

SageMaker AI 固有の条件キーを使用して、SageMaker AI リソースの作成に対するきめ細かなアクセスを制御します。IAM ポリシーでの条件キーの使用の詳細については、IAM ユーザーガイドの「[IAM JSON ポリシーエレメント: 条件](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_elements_condition.html)」を参照してください。**

条件キー、関連する API アクション、関連ドキュメントへのリンクは、「*サービス承認リファレンス*」の「[SageMaker AI の条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsagemaker.html#amazonsagemaker-policy-keys)」に記載されています。

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

**Topics**
+ [ファイルシステム条件キーを使用して SageMaker AI リソースへのアクセスを制御する](#access-fs-condition-keys)
+ [トレーニングを特定の VPC に制限する](#sagemaker-condition-vpc)
+ [Ground Truth ラベリングジョブと Amazon A2I の人間によるレビューワークフローのワークフォースタイプへのアクセスを制限する](#sagemaker-condition-keys-labeling)
+ [入力データの暗号化を適用する](#sagemaker-condition-kms)
+ [トレーニングジョブのネットワーク分離を適用する](#sagemaker-condition-isolation)
+ [トレーニングジョブに特定のインスタンスタイプを適用する](#sagemaker-condition-instance)
+ [ノートブックインスタンス作成でのインターネットアクセスとルートアクセスを無効にする](#sagemaker-condition-nbi-lockdown)

### ファイルシステム条件キーを使用して SageMaker AI リソースへのアクセスを制御する
<a name="access-fs-condition-keys"></a>

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

**Topics**
+ [IAM ユーザーを特定のディレクトリとアクセスモードに制限する](#access-fs-condition-keys-ex-dirs)
+ [ユーザーを特定のファイルシステムに制限する](#access-fs-condition-keys-ex-fs)

#### IAM ユーザーを特定のディレクトリとアクセスモードに制限する
<a name="access-fs-condition-keys-ex-dirs"></a>

以下のポリシーでは、EFS ファイルシステムの `/sagemaker/xgboost-dm/train` ディレクトリと `/sagemaker/xgboost-dm/validation` ディレクトリにアクセスできるユーザーを `ro` (読み取り専用) アクセスモードに制限します。

**注記**  
ディレクトリが許可されると、そのすべてのサブディレクトリにもトレーニングアルゴリズムからアクセスできます。POSIX アクセス許可は無視されます。

------
#### [ JSON ]

****  

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

------

#### ユーザーを特定のファイルシステムに制限する
<a name="access-fs-condition-keys-ex-fs"></a>

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

------
#### [ JSON ]

****  

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

------

この例では、アルゴリズムを特定のファイルシステムに制限できます。ただし、アルゴリズムがユーザースペースクライアントを使用して、ファイルシステム内のディレクトリにアクセスすることは回避できません。この問題を解消するには、以下を実行します。
+  ユーザーのアクセスを信頼するデータのみがファイルシステムに含まれていることを確認する
+ 承認された ECR リポジトリのアルゴリズムを使ってトレーニングジョブを起動できるユーザーを制限する IAM ロールを作成します。

SageMaker AIでロールを使用する方法の詳細については、「[SageMaker AI ロール](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)」を参照してください。

### トレーニングを特定の VPC に制限する
<a name="sagemaker-condition-vpc"></a>

Amazon VPC 内からトレーニングジョブを作成するように AWS ユーザーを制限します。トレーニングジョブが VPC 内で作成されたら、VPC フローログを使用して、トレーニングクラスターとの間のすべてのトラフィックをモニタリングします。VPC フローログの使用方法については、Amazon Virtual Private Cloud ユーザーガイドの「[VPC フローログ](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)」を参照してください。**

次のポリシーでは、トレーニングジョブが、VPC 内から [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) を呼び出すユーザーによって作成されるよう強制します。

------
#### [ JSON ]

****  

```
{
    "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 の人間によるレビューワークフローのワークフォースタイプへのアクセスを制限する
<a name="sagemaker-condition-keys-labeling"></a>

Amazon SageMaker Ground Truth と Amazon Augmented AI の作業チームは、次の 3 つの[ワークフォースタイプ](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-workforce-management.html)のいずれかに分類されます。
+ パブリック (Amazon Mechanical Turk を使用) 
+ プライベート
+ ベンダー

これらのタイプのいずれかまたは作業チームの ARN を使用して、特定の作業チームへのユーザーアクセスを制限できます。これを行うには、`sagemaker:WorkteamType` 条件キーおよび/または `sagemaker:WorkteamArn` 条件キーを使用します。`sagemaker:WorkteamType` 条件キーには、[文字列条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String)を使用します。`sagemaker:WorkteamArn` 条件キーには、[Amazon リソースネーム (ARN) 条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_ARN)を使用します。ユーザーが制限された作業チームでラベリングジョブを作成しようとすると、SageMaker AI からアクセス拒否エラーが返されます。

次のポリシーは、適切な条件演算子と有効な条件値を使用して `sagemaker:WorkteamType` 条件キーと `sagemaker:WorkteamArn` 条件キーを使用するさまざまな方法を説明しています。

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

------
#### [ JSON ]

****  

```
{
    "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 と共に使用する方法を示しています。

------
#### [ JSON ]

****  

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

------

------
#### [ JSON ]

****  

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

------

 

### 入力データの暗号化を適用する
<a name="sagemaker-condition-kms"></a>

次のポリシーでは、作成時に `sagemaker:VolumeKmsKey`条件 AWS KMS キーを使用して入力データを暗号化するキーを指定するようにユーザーを制限します。
+ トレーニング
+ ハイパーパラメータチューニング
+ ラベリングジョブ

------
#### [ JSON ]

****  

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

     ]
}
```

------

### トレーニングジョブのネットワーク分離を適用する
<a name="sagemaker-condition-isolation"></a>

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

------
#### [ JSON ]

****  

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

------

### トレーニングジョブに特定のインスタンスタイプを適用する
<a name="sagemaker-condition-instance"></a>

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

------
#### [ JSON ]

****  

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

     ]
}
```

------

### ノートブックインスタンス作成でのインターネットアクセスとルートアクセスを無効にする
<a name="sagemaker-condition-nbi-lockdown"></a>

ノートブックインスタンスへのインターネットアクセスとルートアクセスのいずれも無効にすることで、それらの安全性を高めることができます。ノートブックインスタンスへのルートアクセスを制御する方法については、「[SageMaker ノートブックインスタンスへのルートアクセスを制御する](nbi-root-access.md)」を参照してください。ノートブックインスタンスのインターネットアクセスを無効にする方法については、「[VPC 内のノートブックインスタンスを外部リソースに接続する](appendix-notebook-and-internet-access.md)」を参照してください。

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

------
#### [ JSON ]

****  

```
{
    "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 AI API へのアクセスを制御する
<a name="api-access-policy"></a>

SageMaker AI API コール、SageMaker AI でホストされたエンドポイントへのコールへのアクセスを制御するには、アイデンティティベースの IAM ポリシーを使用します。

**Topics**
+ [SageMaker AI API とランタイムへのアクセスを VPC 内からの呼び出しに制限する](#api-access-policy-vpc)

### SageMaker AI API とランタイムへのアクセスを VPC 内からの呼び出しに制限する
<a name="api-access-policy-vpc"></a>

VPC にインターフェイスエンドポイントを設定すると、VPC 外のユーザーがインターネット経由で SageMaker AI API やランタイムに接続できるようになります。これを回避するには、VPC 内からの呼び出しへのアクセスを制限する IAM ポリシーをアタッチします。このような呼び出しは、SageMaker AI リソースにアクセスできるすべてのユーザーとグループに制限する必要があります。SageMaker AI API およびランタイムの VPC インターフェイスエンドポイントの作成については、「[VPC 内で SageMaker AI に接続する](interface-vpc-endpoint.md)」を参照してください。

**重要**  
次のいずれかに似た IAM ポリシーを適用すると、ユーザーは指定された SageMaker AI API にコンソールからアクセスできなくなります。

アクセスを VPC 内からの接続のみに制限するには、アクセスを制限する AWS Identity and Access Management ポリシーを作成します。このアクセスは、VPC 内からの呼び出しのみに制限する必要があります。次に、SageMaker AI API またはランタイムへのアクセスに使用されるすべての AWS Identity and Access Management ユーザー、グループ、ロールにそのポリシーを追加します。

**注記**  
このポリシーでは、インターフェイスのエンドポイントを作成したサブネット内の発信者にのみ接続を許可します。

------
#### [ JSON ]

****  

```
{
    "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` 条件キーを使用します。

------
#### [ JSON ]

****  

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

------

## SageMaker AI API とランタイムコールへのアクセスを IP アドレスで制限する
<a name="api-ip-filter"></a>

SageMaker AI API コールとランタイム呼び出しへのアクセスを、指定したリスト内の IP アドレスからのみ許可することができます。これを行うには、呼び出しがリスト内の IP アドレスからのものでない限り、API へのアクセスを拒否する IAM ポリシーを作成します。次に、API またはランタイムへのアクセスに使用されるすべての AWS Identity and Access Management ユーザー、グループ、またはロールにそのポリシーをアタッチします。IAM ポリシーの作成の詳細については、AWS Identity and Access Management ユーザーガイドの「[IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。**

API コールにアクセスできる IP アドレスのリストを指定するには、以下を使用します。
+ `IpAddress` 条件演算子
+ `aws:SourceIP` 条件コンテキストキー

IAM 条件演算子の詳細については、AWS Identity and Access Management ユーザーガイドの「[IAM JSON ポリシーエレメント: 条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)」を参照してください。**IAM 条件コンテキストキーの詳細については、「[AWS グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。

たとえば、次のポリシーでは、`192.0.2.0` - `192.0.2.255` および `203.0.113.0` - `203.0.113.255` の範囲の IP アドレスからのみ、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) へのアクセスが許可されます。

------
#### [ JSON ]

****  

```
{
    "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 アドレスで制限する
<a name="nbi-ip-filter"></a>

ノートブックインスタンスへのアクセスを指定したリスト内の IP アドレスからのみ許可することができます。これを行うには、呼び出しがリスト内の IP アドレスからのものでない限り、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreatePresignedNotebookInstanceUrl.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreatePresignedNotebookInstanceUrl.html) へのアクセスを拒否する IAM ポリシーを作成します。次に、ノートブックインスタンスへのアクセスに使用されるすべての AWS Identity and Access Management ユーザー、グループ、またはロールにこのポリシーをアタッチします。IAM ポリシーの作成の詳細については、AWS Identity and Access Management ユーザーガイドの「[IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。**

ノートブックインスタンスにアクセスできる IP アドレスのリストを指定するには、以下を使用します。
+ `IpAddress` 条件演算子
+ `aws:SourceIP` 条件コンテキストキー

IAM 条件演算子の詳細については、AWS Identity and Access Management ユーザーガイドの「[IAM JSON ポリシーエレメント: 条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)」を参照してください。**IAM 条件コンテキストキーの詳細については、「[AWS グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。

たとえば、次のポリシーでは、`192.0.2.0` - `192.0.2.255` および `203.0.113.0` - `203.0.113.255` の範囲の IP アドレスからのみノートブックインスタンスへのアクセスが許可されます。

------
#### [ JSON ]

****  

```
{
    "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 AI に接続する](https://docs.aws.amazon.com/sagemaker/latest/dg/interface-vpc-endpoint.html)場合には互換性がありません。VPC インターフェイスエンドポイントを介して接続するときにノートブックインスタンスへのアクセスを制限する方法については、「[VPC インターフェイスエンドポイントを介してノートブックインスタンスに接続する](notebook-interface-endpoint.md)」を参照してください。

## タグを使用して SageMaker AI リソースへのアクセスを制御する
<a name="access-tag-policy"></a>

IAM ポリシー内のタグを指定して、SageMaker AI リソースのグループへのアクセスを制御します。リソースタグを使用して属性ベースのアクセス制御 (ABAC) を実装できます。タグを使用すると、リソースへのアクセスを特定のユーザーグループに分割することができます。あるチームに 1 つのリソースグループへのアクセス権を、別のチームには別のリソースセットへのアクセス権を割り当てることができます。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
検索

タグを使用してリソースを分割する方法を理解しやすくするため、簡単な例を示します。 AWS アカウント`DevTeam2`で `DevTeam1`と という名前の 2 つの異なる IAM グループを定義したとします。10 個のノートブックインスタンスも作成しました。1 つのプロジェクトに 5 つのノートブックインスタンスを使用しています。残りの 5 つは 2 つ目のプロジェクトに使用しています。1 つ目のプロジェクトで使用しているノートブックインスタンスで API コールを行うアクセス許可を `DevTeam1` に付与できます。`DevTeam2` には、2 つ目のプロジェクトで使用するノートブックインスタンスで API コールを行うよう指定できます。

以下の手順は、タグ追加の概念を理解するのに役立つ簡単な例を示しています。これを使用して、前の段落で説明したソリューションを実装できます。

**API コールへのアクセスをコントロールするには (例)**

1. 最初のプロジェクトに使用されるノートブックインスタンスに、キーが `Project`、値が `A` であるタグを追加します。SageMaker AI リソースへのタグの追加については、「[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AddTags.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AddTags.html)」を参照してください。

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

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

------
#### [ JSON ]

****  

   ```
   {
     "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 ユーザーガイドの「[ポリシーを使用したアクセス制御](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html)」を参照してください。**

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

------
#### [ JSON ]

****  

   ```
   {
     "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 AI リソースにタグ付けのアクセス許可を付与する
<a name="grant-tagging-permissions"></a>

[タグ](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/what-are-tags.html)は、特定の AWS リソースにアタッチできるメタデータラベルです。タグはキー値のペアで構成され、タグを使用すると、次のとおりさまざまな[タグ付けのユースケース](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-use-cases.html)で、メタデータ属性を使ってリソースに柔軟に注釈付けを行うことができます。
+ 検索
+ セキュリティ
+ [原価配分](https://docs.aws.amazon.com/whitepapers/latest/sagemaker-studio-admin-best-practices/cost-attribution.html)
+ アクセスコントロール
+ 自動化

これらは、アクセス許可とポリシー、サービスクォータ、および他の AWS サービスとの統合で使用できます。タグは、リソースの作成時にユーザー定義または AWS 生成できます。これは、ユーザーがカスタムタグを手動で指定するか、 AWS サービスが自動的にタグを生成するかによって異なります。
+ SageMaker AI の*ユーザー定義タグ*: ユーザーは、SageMaker SDKs、 CLI、SageMaker APIs、SageMaker AI AWS CLI コンソール、または CloudFormation テンプレートを使用して SageMaker AI リソースを作成するときにタグを追加できます。
**注記**  
リソースが後で更新され、タグ値が変更または置換された場合、ユーザー定義のタグは上書きされる場合があります。例えば、\$1Team: A\$1 で作成されたトレーニングジョブの更新が不適切に行われ、\$1Team: B\$1 として再度タグ付けされる可能性があります。その結果、許可されたアクセス許可が不適切に割り当てられる可能性があります。このため、ユーザーまたはグループにタグの追加を許可する際は、既存のタグ値を上書きできる可能性があるため、注意が必要です。タグのアクセス許可の範囲を厳密に定義し、IAM 条件を使用してタグ付け機能を制御することがベストプラクティスです。
+ SageMaker AI で*AWS 生成されたタグ*: SageMaker AI は、作成する特定のリソースに自動的にタグ付けします。例えば、Studio と Studio Classic は、作成した SageMaker AI リソースに `sagemaker:domain-arn` タグを自動的に割り当てます。ドメイン ARN を使用して新しいリソースにタグ付けすると、トレーニングジョブ、モデル、エンドポイントなどの SageMaker AI リソースがどのように生成されたかを追跡できます。よりきめ細かい制御と追跡を行うには、新しいリソースには次のとおりの追加のタグ付けを行います。
  + `sagemaker:user-profile-arn` - リソースを作成したユーザープロファイルの ARN。これにより、特定のユーザーが作成したリソースを追跡できます。
  + `sagemaker:space-arn` - リソースが作成されたスペースの ARN。これにより、スペースごとにリソースをグループ化して分離できます。
**注記**  
AWS が生成したタグは、ユーザーが変更することはできません。

 AWS リソースのタグ付けに関する一般的な情報とベストプラクティスについては、[AWS 「リソースのタグ付け](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html)」を参照してください。主なタグ付けのユースケースについては、「[Tagging use cases](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-use-cases.html)」を参照してください。

### SageMaker AI リソースの作成時にタグを追加するアクセス許可を付与する
<a name="grant-tagging-permissions-with-create"></a>

ユーザー (*ユーザー定義タグ*) または Studio および Studio Classic (*AWS 生成されたタグ*) が、作成時に新しい SageMaker AI リソースにタグを追加することを許可できます。これを行うには、IAM アクセス許可に次の両方が含まれている必要があります。
+ ベースとなる SageMaker AI は、そのリソースタイプのアクセス許可を作成します。
+ `sagemaker:AddTags` アクセス許可 

例えば、SageMaker トレーニングジョブを作成してタグ付けすることをユーザーに許可する場合、`sagemaker:CreateTrainingJob` と `sagemaker:AddTags` のアクセス許可を付与する必要があります。

**重要**  
Amazon SageMaker Studio または Amazon SageMaker Studio Classic に Amazon SageMaker AI リソースの作成を許可するカスタム IAM ポリシーでは、これらのリソースにタグを追加するアクセス許可も付与する必要があります。Studio と Studio Classic は、作成したリソースに自動的にタグ付けするため、リソースにタグを追加するアクセス許可が必要になります。IAM ポリシーで Studio と Studio Classic によるリソースの作成が許可されていても、タグ付けが許可されていない場合は、リソースを作成しようとしたときに「AccessDenied」エラーが発生する可能性があります。  
SageMaker AI リソースを作成するためのアクセス許可を付与する [AWS Amazon SageMaker AI の マネージドポリシー](security-iam-awsmanpol.md) には、それらのリソースの作成中にタグを追加するためのアクセス許可もあらかじめ含まれています。

管理者は、次のいずれかにこのような IAM アクセス許可をアタッチします。
+ AWS ユーザー定義タグのユーザーに割り当てられた IAM ロール
+  AWS 生成のタグのために Studio または Studio Classic が使用する実行ロール

カスタム IAM ポリシーの作成と適用の手順については、「[IAM ポリシーを作成する (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)」を参照してください。

**注記**  
SageMaker AI リソース作成オペレーションのリストは、「[SageMaker API ドキュメント](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Operations_Amazon_SageMaker_Service.html)」で 「`Create`」で始まるアクションを検索すると確認できます。`CreateTrainingJob` や `CreateEndpoint` などのこれらの create アクションは、新しい SageMaker AI リソースを作成するオペレーションです。

**特定の作成アクションにタグ付けのアクセス許可を追加する**

元のリソース作成ポリシーに追加の IAM ポリシーをアタッチすると、制約付きの `sagemaker:AddTags` アクセス許可を付与できます。次のサンプルポリシーでは、`sagemaker:AddTags` を許可するとはいえ、`CreateTrainingJob` などの特定の SageMaker AI リソース作成アクションのみに制限しています。

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

ポリシー条件では `sagemaker:AddTags` を特定の作成アクションとともに使用するように制限しています。このアプローチでは、アクセス許可の作成ポリシーは変わらず、追加のポリシーで `sagemaker:AddTags` アクセスが制限されています。この条件は、範囲をタグ付けが必要な作成アクションに絞り込むことで、包括的な `sagemaker:AddTags` アクセス許可の付与を回避しています。これにより、特定の SageMaker AI リソース作成のユースケースにのみが許可され、`sagemaker:AddTags` の最小権限を実装できます。

**例: タグのアクセス許可をグローバルに許可して、作成アクションをドメインに限定する**

このカスタム IAM ポリシーの例では、最初の 2 つのステートメントは、タグを使用してリソースの作成を追跡する方法を示しています。これにより、すべてのリソースに対する `sagemaker:CreateModel` アクションと、そのアクションが使用される際のリソースのタグ付けが許可されます。3 番目のステートメントは、タグ値を使用してリソースのオペレーションを制御する方法を示しています。この場合、特定のドメイン ARN でタグ付けされた SageMaker AI リソースの作成を防ぎ、タグ値に基づいてアクセスを制限します。

特に、次のことに注意してください。
+ 最初のステートメントでは、任意のリソース (`*`) に対して `CreateModel` アクションを許可します。
+ 2 番目のステートメントでは、`sagemaker:TaggingAction` 条件キーが `CreateModel` に等しい場合のみ、`sagemaker:AddTags` アクションを許可します。これにより、`sagemaker:AddTags` アクションは、新しく作成されたモデルのタグ付けに使用される場合にのみ制限されます。
+ 3 番目のステートメントは、リソース (`Create*`) への SageMaker AI 作成アクション (`*`) をすべて拒否します。ただしこれは、リソースに特定のドメイン ARN、`sagemaker:domain-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"
            }
         }
      }
   ]
}
```

## 可視性条件を使用して検索可能なリソースへのアクセスを制限する
<a name="limit-access-to-searchable-resources"></a>

可視性条件を使用して、ユーザーのアクセスを 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"`」形式を使用します。ユーザーは、タグが付けられた任意のリソースに使用するキー値のペアを指定できます。

ユーザーが[検索](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Search.html)リクエストに `VisibilityConditions` パラメータを含めても、そのユーザーに適用されるアクセスポリシーに、`VisibilityConditions` で指定された条件キーに一致するものが含まれていないと、`Search` リクエストは許可され、実行されます。

ユーザーの[Search](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Search.html) API リクエストに `VisibilityConditions` パラメータが指定されておらず、そのユーザーに適用されるアクセスポリシーに `VisibilityConditions` に関連する条件キーが含まれている場合、そのユーザーの `Search` リクエストは拒否されます。