

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

# 安装指南
<a name="scheduled-notebook-installation"></a>

以下内容提供了有关在您的 JupyterLab 环境中使用笔记本作业所需的安装内容的信息。

**适用于亚马逊 SageMaker Studio 和亚马逊 SageMaker Studio 实验室**

如果您的笔记本电脑在 Amazon SageMaker Studio 或 Amazon SageMaker Studio Lab 中，则无需进行额外安装，因为平台内置了SageMaker 笔记本作业。要设置 Studio 所需的权限，请参阅[为 Studio 设置策略和权限](scheduled-notebook-policies-studio.md)。

**对于本地 Jupyter 笔记本**

如果要在本地 JupyterLab 环境中使用 SageMaker Notebook Jobs，则需要执行其他安装。

要安装 SageMaker 笔记本作业，请完成以下步骤：

1. 安装 Python 3。有关详细信息，请参阅[安装 Python 3 和 Python 程序包](https://www.codecademy.com/article/install-python3)。

1. 安装 JupyterLab 版本 4 或更高版本。有关详细信息，请参阅 [JupyterLab SDK 文档](https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html)。

1. 安装 AWS CLI。有关详细信息，请参阅[安装或更新 AWS CLI的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 安装两组权限。IAM 用户需要权限才能向 A SageMaker I 提交作业，提交后，笔记本作业本身将扮演一个 IAM 角色，该角色需要根据任务访问资源的权限。

   1. 如果您尚未创建 IAM 用户，请参阅[在您的 AWS 账户中创建 IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)。

   1. 如果您尚未创建笔记本作业角色，请参阅[创建向 IAM 用户委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

   1. 附加必要的权限和信任策略以附加到您的用户和角色。有关 step-by-step说明和权限的详细信息，请参阅[为本地 Jupyter 环境安装策略和权限](scheduled-notebook-policies-other.md)。

1. 为您新创建的 IAM 用户生成 AWS 证书，并将其保存在您环境的证书文件（\$1/.aws/credentions）中。 JupyterLab 可以使用 CLI 命令 `aws configure` 执行此操作。有关说明，请参阅[配置和凭证文件设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)中的*使用命令设置和查看配置设置*部分。

1. （可选）默认情况下，调度器扩展使用带有 Python 2.0 的预构建的 SageMaker AI Docker 镜像。笔记本中使用的任何非默认内核都应安装在容器中。如果要在容器或 Docker 映像中运行笔记本，则需要创建 Amazon Elastic Container Registry (Amazon ECR) 映像。有关如何将 Docker 映像推送到 Amazon ECR 的信息，请参阅[推送 Docker 映像](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)。

1. 为 SageMaker 笔记本作业添加 JupyterLab 扩展程序。您可以使用命令将其添加到您的 JupyterLab环境中:`pip install amazon_sagemaker_jupyter_scheduler`。您可能需要使用 `sudo systemctl restart jupyter-server` 命令重新启动 Jupyter 服务器。

1. 从命令 JupyterLab 开始:`jupyter lab`.

1. 验证 Jupyter 笔记本任务栏中显示了 Notebook Jobs 小部件 (![\[Blue icon of a calendar with a checkmark, representing a scheduled task or event.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/icons/notebook-schedule.png))。

# 为 Studio 设置策略和权限
<a name="scheduled-notebook-policies-studio"></a>

在安排首次运行笔记本之前，您需要安装适当的策略和权限。以下是设置以下权限的说明：
+ 作业执行角色信任关系
+ 附加到作业执行角色的其他 IAM 权限
+ （可选）使用自定义 KMS 密钥的 AWS KMS 权限策略

**重要**  
如果您的 AWS 账户属于具有服务控制策略 (SCP) 的组织，则您的有效权限是您的 IAM 角色 SCPs 和用户策略允许的内容与允许的权限之间的逻辑交叉点。例如，如果您组织的 SCP 规定您只能访问 `us-east-1` 和 `us-west-1` 中的资源，而您的策略仅允许访问 `us-west-1` 和 `us-west-2` 中的资源，那么最终您只能访问 `us-west-1` 中的资源。如果您想行使角色和用户策略中允许的所有权限，则您的组织 SCPs 应授予与您自己的 IAM 用户和角色策略相同的权限集。有关如何确定允许的请求的详细信息，请参阅[确定是允许还是拒绝账户内的请求](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow)。

**信任关系**

要修改信任关系，请完成以下步骤：

1. 打开 [IAM 控制台](https://console.aws.amazon.com/iam/)。

1. 在左侧面板中选择**角色**。

1. 找到笔记本作业的作业执行角色并选择角色名称。

1. 选择**信任关系**选项卡。

1. 选择**编辑信任策略**。

1. 复制并粘贴以下策略：

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

****  

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

------

1. 选择**更新策略**。

## 其他 IAM 权限
<a name="scheduled-notebook-policies-add"></a>

在以下情况下，您可能需要包括其他 IAM 权限：
+ 您的 Studio 执行角色和笔记本作业角色不同
+ 您需要通过 S3 VPC 端点访问 Amazon S3 资源
+ 您想使用自定义 KMS 密钥来加密输入和输出 Amazon S3 存储桶

以下讨论提供了每种情况所需的策略。

### 如果您的 Studio 执行角色和笔记本作业角色不同，则需要相应权限
<a name="scheduled-notebook-policies-add-diffrole"></a>

以下 JSON 代码片段是一个示例策略，如果不将 Studio 执行角色用作笔记本作业角色，则应将其添加到 Studio 执行角色和笔记本作业角色中。如果需要进一步限制权限，请查看并修改此策略。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"iam:PassRole",
         "Resource":"arn:aws:iam::*:role/*",
         "Condition":{
            "StringLike":{
               "iam:PassedToService":[
                  "sagemaker.amazonaws.com",
                  "events.amazonaws.com"
               ]
            }
         }
      },
      {
         "Effect":"Allow",
         "Action":[
            "events:TagResource",
            "events:DeleteRule",
            "events:PutTargets",
            "events:DescribeRule",
            "events:PutRule",
            "events:RemoveTargets",
            "events:DisableRule",
            "events:EnableRule"
         ],
         "Resource":"*",
         "Condition":{
            "StringEquals":{
               "aws:ResourceTag/sagemaker:is-scheduling-notebook-job":"true"
            }
         }
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:CreateBucket",
            "s3:PutBucketVersioning",
            "s3:PutEncryptionConfiguration"
         ],
         "Resource":"arn:aws:s3:::sagemaker-automated-execution-*"
      },
      {
            "Sid": "S3DriverAccess",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::sagemakerheadlessexecution-*"
            ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "sagemaker:ListTags"
         ],
         "Resource":[
            "arn:aws:sagemaker:*:*:user-profile/*",
            "arn:aws:sagemaker:*:*:space/*",
            "arn:aws:sagemaker:*:*:training-job/*",
            "arn:aws:sagemaker:*:*:pipeline/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "sagemaker:AddTags"
         ],
         "Resource":[
            "arn:aws:sagemaker:*:*:training-job/*",
            "arn:aws:sagemaker:*:*:pipeline/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "ec2:DescribeDhcpOptions",
            "ec2:DescribeNetworkInterfaces",
            "ec2:DescribeRouteTables",
            "ec2:DescribeSecurityGroups",
            "ec2:DescribeSubnets",
            "ec2:DescribeVpcEndpoints",
            "ec2:DescribeVpcs",
            "ecr:BatchCheckLayerAvailability",
            "ecr:BatchGetImage",
            "ecr:GetDownloadUrlForLayer",
            "ecr:GetAuthorizationToken",
            "s3:ListBucket",
            "s3:GetBucketLocation",
            "s3:GetEncryptionConfiguration",
            "s3:PutObject",
            "s3:DeleteObject",
            "s3:GetObject",
            "sagemaker:DescribeApp",
            "sagemaker:DescribeDomain",
            "sagemaker:DescribeUserProfile",
            "sagemaker:DescribeSpace",
            "sagemaker:DescribeStudioLifecycleConfig",
            "sagemaker:DescribeImageVersion",
            "sagemaker:DescribeAppImageConfig",
            "sagemaker:CreateTrainingJob",
            "sagemaker:DescribeTrainingJob",
            "sagemaker:StopTrainingJob",
            "sagemaker:Search",
            "sagemaker:CreatePipeline",
            "sagemaker:DescribePipeline",
            "sagemaker:DeletePipeline",
            "sagemaker:StartPipelineExecution"
         ],
         "Resource":"*"
      }
   ]
}
```

------

### 通过 S3 VPC 端点访问 Amazon S3 资源所需的权限
<a name="scheduled-notebook-policies-add-vpc"></a>

如果您在私有 VPC 模式下运行 SageMaker Studio 并通过 S3 VPC 终端节点访问 S3，则可以向 VPC 终端节点策略添加权限以控制可通过 VPC 终端节点访问哪些 S3 资源。将以下权限添加到 VPC 端点策略。如果需要进一步限制权限，则可以修改策略，例如可以为 `Principal` 字段提供更严格的规范。

```
{
    "Sid": "S3DriverAccess",
    "Effect": "Allow",
    "Principal": "*",
    "Action": [
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket"
    ],
    "Resource": "arn:aws:s3:::sagemakerheadlessexecution-*"
}
```

有关如何设置 S3 VPC 端点策略的详细信息，请参阅[编辑 VPC 端点策略](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#edit-vpc-endpoint-policy-s3)。

### 使用自定义 KMS 密钥时所需的权限（可选）
<a name="scheduled-notebook-policies-add-kms"></a>

默认情况下，输入和输出 Amazon S3 存储桶使用服务器端加密进行加密，但您可以指定自定义 KMS 密钥来加密输出 Amazon S3 存储桶和附加到笔记本作业的存储卷中的数据。

如果您想使用自定义 KMS 密钥，请附加以下策略并提供您自己的 KMS 密钥 ARN。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
         "Effect":"Allow",
         "Action":[
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey",
            "kms:CreateGrant"
         ],
         "Resource":"arn:aws:kms:us-east-1:111122223333:key/key-id"
      }
   ]
}
```

------

# 为本地 Jupyter 环境安装策略和权限
<a name="scheduled-notebook-policies-other"></a>

您需要设置必要的权限和策略，以便在本地 Jupyter 环境中安排笔记本作业。IAM 用户需要权限才能向 A SageMaker I 提交作业，而笔记本作业本身承担的 IAM 角色需要访问资源的权限，具体视任务而定。下面将说明如何设置必要的权限和策略。

您需要安装两套权限。下图显示了在本地 Jupyter 环境中安排笔记本作业的权限结构。IAM 用户需要设置 IAM 权限才能向 A SageMaker I 提交任务。用户提交笔记本作业后，作业本身将代入一个 IAM 角色，该角色需要根据作业任务获得资源访问权限。

![\[\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/notebook-jobs-permissions.png)


以下几节将帮助您为 IAM 用户和作业执行角色安装必要的策略和权限。

## IAM 用户权限
<a name="scheduled-notebook-policies-other-user"></a>

**向 SageMaker AI 提交任务的权限**

要添加提交作业的权限，请完成以下步骤：

1. 打开 [IAM 控制台](https://console.aws.amazon.com/iam/)。

1. 在左侧面板中选择**用户**。

1. 找到您的笔记本作业的 IAM 用户并选择用户名。

1. 选择**添加权限**，然后从下拉菜单中选择**创建内联策略**。

1. 选择 **JSON** 选项卡。

1. 复制并粘贴以下策略：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "EventBridgeSchedule",
               "Effect": "Allow",
               "Action": [
                   "events:TagResource",
                   "events:DeleteRule",
                   "events:PutTargets",
                   "events:DescribeRule",
                   "events:EnableRule",
                   "events:PutRule",
                   "events:RemoveTargets",
                   "events:DisableRule"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/sagemaker:is-scheduling-notebook-job": "true"
                   }
               }
           },
           {
               "Sid": "IAMPassrole",
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::*:role/*",
               "Condition": {
                   "StringLike": {
                       "iam:PassedToService": [
                           "sagemaker.amazonaws.com",
                           "events.amazonaws.com"
                       ]
                   }
               }
           },
           {
               "Sid": "IAMListRoles",
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "*"
           },
           {
               "Sid": "S3ArtifactsAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:PutEncryptionConfiguration",
                   "s3:CreateBucket",
                   "s3:PutBucketVersioning",
                   "s3:ListBucket",
                   "s3:PutObject",
                   "s3:GetObject",
                   "s3:GetEncryptionConfiguration",
                   "s3:DeleteObject",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::sagemaker-automated-execution-*"
               ]
           },
           {
               "Sid": "S3DriverAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::sagemakerheadlessexecution-*"
               ]
           },
           {
               "Sid": "SagemakerJobs",
               "Effect": "Allow",
               "Action": [
                   "sagemaker:DescribeTrainingJob",
                   "sagemaker:StopTrainingJob",
                   "sagemaker:DescribePipeline",
                   "sagemaker:CreateTrainingJob",
                   "sagemaker:DeletePipeline",
                   "sagemaker:CreatePipeline"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/sagemaker:is-scheduling-notebook-job": "true"
                   }
               }
           },
           {
               "Sid": "AllowSearch",
               "Effect": "Allow",
               "Action": "sagemaker:Search",
               "Resource": "*"
           },
           {
               "Sid": "SagemakerTags",
               "Effect": "Allow",
               "Action": [
                   "sagemaker:ListTags",
                   "sagemaker:AddTags"
               ],
               "Resource": [
                   "arn:aws:sagemaker:*:*:pipeline/*",
                   "arn:aws:sagemaker:*:*:space/*",
                   "arn:aws:sagemaker:*:*:training-job/*",
                   "arn:aws:sagemaker:*:*:user-profile/*"
               ]
           },
           {
               "Sid": "ECRImage",
               "Effect": "Allow",
               "Action": [
                   "ecr:GetAuthorizationToken",
                   "ecr:BatchGetImage"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

**AWS KMS 权限策略（可选）**

默认情况下，输入和输出 Amazon S3 存储桶使用服务器端加密进行加密，但您可以指定自定义 KMS 密钥来加密输出 Amazon S3 存储桶和附加到笔记本作业的存储卷中的数据。

如果要使用自定义 KMS 密钥，请重复前面的说明，附加以下策略，并提供自己的 KMS 密钥 ARN。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
         "Effect":"Allow",
         "Action":[
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey",
            "kms:CreateGrant"
         ],
         "Resource":"arn:aws:kms:us-east-1:111122223333:key/key-id"
      }
   ]
}
```

------

## 作业执行角色权限
<a name="scheduled-notebook-policies-other-job"></a>

**信任关系**

要修改作业执行角色信任关系，请完成以下步骤：

1. 打开 [IAM 控制台](https://console.aws.amazon.com/iam/)。

1. 在左侧面板中选择**角色**。

1. 找到笔记本作业的作业执行角色并选择角色名称。

1. 选择**信任关系**选项卡。

1. 选择**编辑信任策略**。

1. 复制并粘贴以下策略：

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

****  

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

------

**其他权限**

提交后，笔记本作业需要访问资源的权限。以下说明向您介绍如何添加一组最低限度的权限。如果需要，您可根据笔记本作业的需求添加更多权限。要为作业执行角色添加权限，请完成以下步骤：

1. 打开 [IAM 控制台](https://console.aws.amazon.com/iam/)。

1. 在左侧面板中选择**角色**。

1. 找到笔记本作业的作业执行角色并选择角色名称。

1. 选择**添加权限**，然后从下拉菜单中选择**创建内联策略**。

1. 选择 **JSON** 选项卡。

1. 复制并粘贴以下策略：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "PassroleForJobCreation",
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::*:role/*",
               "Condition": {
                   "StringLike": {
                       "iam:PassedToService": "sagemaker.amazonaws.com"
                   }
               }
           },
           {
               "Sid": "S3ForStoringArtifacts",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:GetObject",
                   "s3:ListBucket",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::sagemaker-automated-execution-*"
           },
           {
               "Sid": "S3DriverAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::sagemakerheadlessexecution-*"
               ]
           },
           {
               "Sid": "SagemakerJobs",
               "Effect": "Allow",
               "Action": [
                   "sagemaker:StartPipelineExecution",
                   "sagemaker:CreateTrainingJob"
               ],
               "Resource": "*"
           },
           {
               "Sid": "ECRImage",
               "Effect": "Allow",
               "Action": [
                   "ecr:GetDownloadUrlForLayer",
                   "ecr:BatchGetImage",
                   "ecr:GetAuthorizationToken",
                   "ecr:BatchCheckLayerAvailability"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 添加对笔记本作业访问的其他资源的权限。

1. 选择**查看策略**。

1. 输入策略的名称。

1. 选择**创建策略**。