跳至内容

如何限制从 Amazon VPC 或公司网络访问我的 SageMaker AI Notebook 实例?

4 分钟阅读
0

我想限制从 Amazon Virtual Private Cloud (Amazon VPC) 或公司网络访问我的 Amazon SageMaker AI Notebook 实例。

解决方法

要限制从 Amazon VPC 或公司网络访问您的 SageMaker AI Notebook 实例,请使用以下方法之一。

使用 IAM 策略限制身份启动 Notebook 实例

当系统启动 SageMaker AI Notebook 实例时,系统会调用 CreatePresignedNotebookInstanceUrl API。要限制身份启动 Notebook 实例,您必须使用 AWS Identity and Access Management (IAM) 策略。将其设置为限制对此 API 调用的访问权限。

完成以下步骤:

  1. 打开 IAM 控制台
  2. 在导航窗格中,选择 Access Management(访问管理),然后选择 Roles(角色)。
  3. 选择您在 SageMaker AI Notebook 实例中使用的角色。
  4. 在角色详细信息的 Permissions(权限)部分中,选择 Add Permissions(添加权限),然后选择 Create inline policy(创建内联策略)。
  5. 选择 JSON
  6. 要拒绝访问 SageMaker API 调用,请使用以下策略示例:
    {
    "Version": "2012-10-17",
        "Statement": [
    
            {
                "Effect": "Deny",
                "Action": "sagemaker:CreatePresignedNotebookInstanceUrl",
                "Resource": "*"
             }
        ]
    }
    **注意:**此策略限制系统访问权限以启动任何 SageMaker AI Notebook 实例。如果要求该角色仅拒绝创建选定资源,请将 * 更改为相关的 SageMaker AI Notebook 实例 Amazon 资源名称 (ARN)。

使用 SCP

使用服务控制策略 (SCP) 限制对 API 调用的访问权限。您可以使用与前一程序步骤 6 中提到的策略类似的策略,并使用在 AWS Organizations 中附加组织策略中的步骤。

您还可以更新 VPC 端点策略来锁定 Notebook。这样,只有在关闭互联网和根访问选项时,Notebook 才会运行。

使用 VPC 端点策略

您可以使用 VPC 配置来设置 Notebook 实例的访问级别。

假设您尝试通过 Amazon Elastic Compute Cloud (Amazon EC2) 实例访问 Notebook 实例。此 Amazon EC2 实例通常在 VPC 内创建,以维持企业环境中的安全架构。在这种情况下,完成以下步骤:

  1. 打开 Amazon VPC 控制台
  2. 选择 PrivateLink and Lattice(PrivateLink 和 Lattice),然后选择 Endpoints(端点)。
  3. 选择要用于访问具有所需限制的 Notebook 的 VPC 端点。
  4. 要编辑 VPC 端点策略,请选择 Actions(操作),然后选择 Manage Access(管理访问权限)。
  5. 在 VPC 端点上应用 VPC 端点策略,允许您连接到 Notebook 实例。
    示例:
    {
    "Statement": [
        {
            "Action": "sagemaker:CreatePresignedNotebookInstanceUrl",
            "Effect": "Allow",
            "Resource": "arn:aws:sagemaker:us-west-2:123456789012:notebook-instance/myNotebookInstance",
            "Principal": "*"
        }
        ]
    }
    这仅允许通过 VPC 端点访问此 Notebook 实例:“arn:aws:sagemaker:us-west-2:123456789012:notebook-instance/myNotebookInstance”。
  6. 使用以下命令访问您限制访问的 Notebook 实例。当您提供 VPC_Endpoint_ID 时,该策略将生效并根据您的要求限制对资源的访问:
    aws sagemaker describe-notebook-instance \
                        --notebook-instance-name myNotebookInstance
    
    {
       "NotebookInstanceArn":
       "arn:aws:sagemaker:us-west-2:123456789023:notebook-instance/mynotebookinstance",
       "NotebookInstanceName": "myNotebookInstance",
       "NotebookInstanceStatus": "InService",
       "Url": "mynotebookinstance.notebook.us-west-2.sagemaker.aws",
       "InstanceType": "ml.m4.xlarge",
       "RoleArn":
       "arn:aws:iam::123456789023:role/service-role/AmazonSageMaker-ExecutionRole-12345678T123456",
       "LastModifiedTime": 1540334777.501,
       "CreationTime": 1523050674.078,
       "DirectInternetAccess": "Disabled"
    }
    

使用 Notebook 执行角色

要限制仅访问来自 VPC 内部的连接,请创建一个 IAM 策略,将访问权限限制为来自您的 VPC 内部的调用。当您创建 Notebook 实例时,您以身份登录的 IAM 用户会调用 CreatePresignedNotebookInstanceUrl。您可以使用以下权限集更新此身份。完成以下步骤:

  1. 打开 IAM 控制台
  2. 选择 Access management(访问管理),选择 Users(用户),然后输入用于登录 IAM 控制台的用户名。
  3. 使用角色名称打开角色。然后,转到 Permissions(权限),选择 Add Permissions(添加权限),然后选择 Create Inline Policy(创建内联策略)。
  4. 使用策略编辑器页面上的 JSON 编辑器附加以下策略示例:
    {
    "Id": "notebook-example-1",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable Notebook Access",
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreatePresignedNotebookInstanceUrl",
                "sagemaker:DescribeNotebookInstance"
            ],
            "Resource": "*",
            "Condition": {
            "StringEquals": {
                "aws:SourceVpc": "vpc-111bbaaa"
                            }
                         }
        }
                ]
    }

在此策略示例中,仅当访问 Notebook 实例的调用从“vpc-111bbaaa”发出时,才允许进行 API 调用。否则,调用将被拒绝。

**注意:**调用者必须位于通过接口端点连接到 Notebook 的子网中。

您可以使用 VPC 接口端点来设置连接,而不是通过 VPC。

示例:

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

此策略是针对您用来创建 Notebook 实例的 IAM 用户设置的。如果用户担任此角色并尝试访问 Notebook,则只有在使用“vpce-111bbccc”或“vpce-111bbddd”接口端点时才允许他们访问。

创建 IAM 策略后,使用以下命令通过 VPC 端点访问 Notebook 实例:

aws sagemaker create-presigned-notebook-instance-url
    --notebook-instance-name myNotebookInstance --endpoint-url
    VPC_Endpoint_ID.api.sagemaker.Region.vpce.amazonaws.com

您可以使用类似的 VPC 子网配置来限制对 Notebook 实例(而不是 VPC 端点或 VPC)的访问。为此,请在条件块中使用“sagemaker:VpcSubnets”标签并指定相应的子网 ID。

使用专用网络

要连接到位于 VPC 中的 Notebook 实例,您可以执行以下操作:

  • 通过 VPC 内支持的资源进行连接。
  • 使用 AWS VPN 或 AWS Direct Connect 将专用网络连接到 VPC。

有关如何使用专用网络设置 Notebook 的信息,请参阅将您的专用网络连接到 VPC

使用资源标签

您可以使用资源标签设置 IAM 策略来建立访问控制,也称为基于属性的访问控制 (ABAC)。使用标签限制对特定用户组的访问。

场景示例: 团队 1 负责项目 A。团队 2 负责项目 B。您是公司管理员,出于保密和安全原因,不希望任何一个团队访问另一个团队的 Notebook 实例。要针对这种情况建立基础架构,请完成以下步骤:

  1. 向团队 A 使用的 SageMaker AI Notebook 实例添加具有以下键值对的标签:{"Project":"A"}

  2. 向团队 B 使用的 SageMaker AI Notebook 实例添加具有以下键值对的标签:{"Project":"B"}

  3. 为团队 1 和团队 2 分配不同的角色以访问 SageMaker AI。

  4. 对于团队 A 用来访问 Notebook 实例的角色,使用以下 IAM 策略限制对项目 B 的访问:

    {
          "Effect": "Deny",
          "Action": "sagemaker:CreatePresignedNotebookInstanceUrl",
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "sagemaker:ResourceTag/Project": "B"
            }
          }
    }
  5. 对于团队 B 用来访问 Notebook 实例的角色,使用以下 IAM 策略限制对项目 A 的访问:

    {
          "Effect": "Deny",
          "Action": "sagemaker:CreatePresignedNotebookInstanceUrl",
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "sagemaker:ResourceTag/Project": "A"
            }
          }
    }

    **注意:**如果您想限制不同用户对 Notebook 实例的访问,请使用用户的 aws:username 资源标签来设置限制。
    以下策略示例拒绝对特定用户的访问,因此他们无法启动、停止或描述 Notebook 实例。它还限制用户生成预签名的 URL。有关详细信息,请参阅使用标签控制对 SageMaker AI 资源的访问权限

    { "Version": "2012-10-17",
      "Statement": [
      {
        "Sid": "VisualEditor0",
        "Effect": "Deny",
        "Action": [
                   "sagemaker:StartNotebookInstance",
                   "sagemaker:StopNotebookInstance",
                   "sagemaker:DescribeNotebookInstance",
                   "sagemaker:CreatePresignedNotebookInstanceUrl"
                   ],
        "Resource": "*",
        "Condition": {
                    "StringNotEquals": {
                    "sagemaker:ResourceTag/owner": "${aws:username}"
                     }
                     }
       } ]
    }

    对 IP 地址使用允许列表和代理设置

    假设您使用代理来设置允许连接公司网络的 IP 地址。在这种情况下,使用允许列表为要访问不同资源的 Notebook 设置 IP 地址。

    例如,如果您在 172.31.0.0 到 172.31.0.16 的 CIDR 范围内创建 Notebook,则在代理中仅允许此 CIDR 数据块。

    Notebook 的 IP 地址是动态的,是根据连接到 Notebook 实例的子网分配的。要查找 Notebook 的 IP 地址,请使用 route -n 命令。有关详细信息,请参阅 Understanding Amazon SageMaker notebook instance networking configurations and advanced routing options(了解 Amazon SageMaker Notebook 实例联网配置和高级路由选项)

    **注意:**只有将子网连接到 Notebook 时,这种情况才有可能。

AWS 官方已更新 8 个月前