安全性和权限 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

安全性和权限

当您查询来自 Athena 或 Amazon Redshift 的数据时,查询的数据集会自动存储在您使用 Studio Classic 的 Amazon 地区的 SageMaker 默认 S3 存储桶中。此外,当您从 Amazon Data Wrangler 导出 Jupyter 笔记本并运行它时,您的 SageMaker 数据流或.flow 文件将保存到同一个默认存储桶中,前缀为 data_wrangler_flows。

为了满足高级安全需求,您可以配置存储桶策略,限制有权访问此默认 SageMaker S3 存储桶的 Amazon 角色。可使用以下部分将此策略类型添加到 S3 存储桶。要按照本页上的说明进行操作,请使用 Amazon Command Line Interface (Amazon CLI)。要了解如何操作,请参阅 IAM 用户指南中的配置 Amazon CLI

此外,您需要授予每个使用 Data Wrangler 的 IAM 角色,访问所需资源的权限。如果您对用于访问 Data Wrangler 的 IAM 角色不需要精细权限,则可以将 IAM 托管策略添加到用于创建 Studio Classic 用户的 IAM 角色中。AmazonSageMakerFullAccess此策略授予您使用 Data Wrangler 的完全权限。如果您需要更精细的权限,请参阅以下部分:授予 IAM 角色使用 Data Wrangler 的权限

添加存储桶策略以限制对导入到 Data Wrangler 的数据集的访问

您可以使用 Amazon S3 存储桶策略,向包含 Data Wrangler 资源的 S3 存储桶添加策略。在您使用 Studio Classic 的 Amazon 区域中,Data Wrangler 上传到默认 SageMaker S3 存储桶的资源包括以下内容:

  • 查询的 Amazon Redshift 结果。这些结果存储在 redshift/ 前缀下。

  • 查询的 Athena 结果。这些结果存储在 athena/ 前缀下。

  • 在运行 Data Wrangler 所生成的导出的 Jupyter 笔记本时,上传至 Amazon S3 的 .flow 文件。这些文件存储在 data_wrangler_flow/ 前缀下。

可使用以下过程创建 S3 存储桶策略,您可以添加此策略以限制 IAM 角色对该存储桶的访问。要了解如何向 S3 存储桶添加策略,请参阅如何添加 S3 存储桶策略

要对存储 Data Wrangler 资源的 S3 存储桶设置存储桶策略,请执行以下操作:
  1. 配置一个或多个您希望能访问 Data Wrangler 的 IAM 角色。

  2. 打开命令提示符或 Shell。对于创建的每个角色,将 role-name 替换为角色名称,并运行以下命令:

    $ aws iam get-role --role-name role-name

    在回复中,您会看到以 AROA 开头的 RoleId 字符串。复制此字符串。

  3. 将以下策略添加到您使用 Data Wrangler 的 Amazon 地区的 SageMaker 默认存储桶。将区域替换为存储桶所在的 Amazon 区域,将账户 ID 替换为您的 Amazon 账户 ID。将以 AROAEXAMPLEID 开头的 userId s 替换为要向其授予使用 Data Wrangler 权限的 Amazon 角色的 ID。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::sagemaker-region-account-id/data_wrangler_flows/", "arn:aws:s3:::sagemaker-region-account-id/data_wrangler_flows/*", "arn:aws:s3:::sagemaker-region-account-id/athena", "arn:aws:s3:::sagemaker-region-account-id/athena/*", "arn:aws:s3:::sagemaker-region-account-id/redshift", "arn:aws:s3:::sagemaker-region-account-id/redshift/*" ], "Condition": { "StringNotLike": { "aws:userId": [ "AROAEXAMPLEID_1:*", "AROAEXAMPLEID_2:*" ] } } } ] }

为 Data Wrangler 创建允许列表

每当用户开始从 Amazon SageMaker Studio Classic 用户界面运行 Data Wrangler 时,他们都会调用 SageMaker 应用程序编程接口 (API) 来创建 Data Wrangler 应用程序。

默认情况下,您的组织可能不会向用户提供调用这些 API 的权限。要提供权限,必须使用以下策略模板创建策略并附加到用户的 IAM 角色:Data Wrangler 允许列表示例

注意

上述策略示例仅为用户提供访问 Data Wrangler 应用程序的权限。

有关创建策略的信息,请参阅在 JSON 选项卡中创建策略。创建策略时,可将 JSON 策略从 Data Wrangler 允许列表示例中复制并粘贴到 JSON 选项卡中。

重要

删除阻止用户运行以下操作的任何 IAM 策略:

如果不删除这些政策,用户仍可能受其影响。

使用模板创建策略后,将其附加到用户的 IAM 角色。有关附加策略的信息,请参阅添加 IAM 身份权限(控制台)

授予 IAM 角色使用 Data Wrangler 的权限

您可以通过一般 IAM 托管策略 AmazonSageMakerFullAccess,授予 IAM 角色使用 Data Wrangler 的权限。这是一项通用政策,包括使用所有 SageMaker 服务所需的权限。此策略授予 IAM 角色对 Data Wrangler 的完全访问权限。在使用 AmazonSageMakerFullAccess 授予 Data Wrangler 访问权限时,应该知晓以下事项:

  • 如果从 Amazon Redshift 导入数据,数据库用户名称必须具有前缀 sagemaker_access

  • 此托管策略仅授予名称中包含以下词组之一的存储桶的访问权限:SageMakerSageMakersagemakeraws-glue。如果要使用 Data Wrangler,从名称中不含以上词组的 S3 存储桶导入,那么请参阅本页最后一部分,了解如何向 IAM 实体授予访问 S3 存储桶的权限。

如果您有高安全性需求,可以将本部分中的策略附加到 IAM 实体,以授予使用 Data Wrangler 所需的权限。

如果 IAM 角色需要从 Data Wrangler 导入 Amazon Redshift 或 Athena 中的数据集,那么必须向该实体添加策略才能访问这些资源。以下策略是可用于授予 IAM 角色从 Amazon Redshift 和 Athena 导入数据的权限最严格的策略。

要了解如何将自定义策略附加到 IAM 角色,请参阅《IAM 用户指南》中的管理 IAM 策略

授予 Athena 数据集导入访问权限的策略示例

以下策略假定 IAM 角色有权访问底层 S3 存储桶,数据通过单独的 IAM 策略存储在此存储桶中。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:ListDataCatalogs", "athena:ListDatabases", "athena:ListTableMetadata", "athena:GetQueryExecution", "athena:GetQueryResults", "athena:StartQueryExecution", "athena:StopQueryExecution" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Resource": [ "arn:aws:glue:*:*:table/*/sagemaker_tmp_*", "arn:aws:glue:*:*:table/sagemaker_featurestore/*", "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/*" ] }, { "Effect": "Allow", "Action": [ "glue:DeleteTable" ], "Resource": [ "arn:aws:glue:*:*:table/*/sagemaker_tmp_*", "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/*" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabases", "glue:GetTable", "glue:GetTables" ], "Resource": [ "arn:aws:glue:*:*:table/*", "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:GetDatabase" ], "Resource": [ "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/sagemaker_featurestore", "arn:aws:glue:*:*:database/sagemaker_processing", "arn:aws:glue:*:*:database/default", "arn:aws:glue:*:*:database/sagemaker_data_wrangler" ] } ] }

授予 Amazon Redshift 数据集导入访问权限的策略示例

以下策略授予如下权限:使用名称中具有 sagemaker_access 前缀的数据库用户,设置 Amazon Redshift 与 Data Wrangler 的连接。要授权使用其他数据库用户进行连接,可在以下策略的 "Resources" 下添加其他条目。以下策略假定 IAM 角色有权访问底层 S3 存储桶,数据通过单独的 IAM 策略存储在此存储桶中(如果适用)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "redshift-data:ExecuteStatement", "redshift-data:DescribeStatement", "redshift-data:CancelStatement", "redshift-data:GetStatementResult", "redshift-data:ListSchemas", "redshift-data:ListTables" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials" ], "Resource": [ "arn:aws:redshift:*:*:dbuser:*/sagemaker_access*", "arn:aws:redshift:*:*:dbname:*" ] } ] }

授予 S3 存储桶访问权限的策略

如果数据集存储在 Amazon S3 中,那么可以通过类似以下的策略,授予 IAM 角色访问此存储桶的权限。此示例授予对名为 test 的存储桶的可编程读写访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::test"] }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": ["arn:aws:s3:::test/*"] } ] }

要从 Athena 和 Amazon Redshift 导入数据,您必须授予 IAM 角色访问正在使用的区域数据管理器 Amazon 中默认 Amazon S3 存储桶下的以下前缀的权限:,。athena/ redshift/如果 Amazon 该地区尚不存在默认 Amazon S3 存储桶,则您还必须向 IAM 角色授予在此区域创建存储桶的权限。

此外,如果您希望 IAM 角色能够使用 Amazon F SageMaker eature Store、Pipelin SageMaker es 和 Data Wrangler 任务导出选项,则必须向该存储桶data_wrangler_flows/中的前缀授予访问权限。

Data Wrangler 使用 athena/redshift/ 前缀存储预览文件和导入的数据集。要了解更多信息,请参阅导入的数据存储

当您运行从 Data Wrangler 导出的 Jupyter 笔记本时,Data Wrangler 使用 data_wrangler_flows/ 前缀存储 .flow 文件。要了解更多信息,请参阅导出

可以使用类似以下的策略授予上文中所述的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::sagemaker-region-account-id/data_wrangler_flows/", "arn:aws:s3:::sagemaker-region-account-id/data_wrangler_flows/*", "arn:aws:s3:::sagemaker-region-account-id/athena", "arn:aws:s3:::sagemaker-region-account-id/athena/*", "arn:aws:s3:::sagemaker-region-account-id/redshift", "arn:aws:s3:::sagemaker-region-account-id/redshift/*" ] }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:ListBucket" ], "Resource": "arn:aws:s3:::sagemaker-region-account-id" }, { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Resource": "*" } ] }

您还可以通过指定 Amazon S3 存储桶 URI 从其他 Amazon 账户访问您的 Amazon S3 存储桶中的数据。为此,授予对另一账户中 Amazon S3 存储桶的访问权限的 IAM 策略,应使用类似以下示例的策略,其中 BucketFolder 是用户存储桶 UserBucket 中的特定目录。此策略应添加到授权其他用户访问其存储桶的用户。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::UserBucket/BucketFolder/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::UserBucket", "Condition": { "StringLike": { "s3:prefix": [ "BucketFolder/*" ] } } } ] }

访问存储桶的用户(非存储桶所有者)必须向其用户添加类似以下示例的策略。请注意,下面的 AccountXTestUser 分别代表存储桶所有者和其用户。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountX:user/TestUser" }, "Action": [ "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::UserBucket/BucketFolder/*" ] }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountX:user/TestUser" }, "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::UserBucket" ] } ] }

授予使用 SageMaker Studio 权限的策略示例

使用类似于以下的策略创建可用于设置 Studio Classic 实例的 IAM 执行角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreatePresignedDomainUrl", "sagemaker:DescribeDomain", "sagemaker:ListDomains", "sagemaker:DescribeUserProfile", "sagemaker:ListUserProfiles", "sagemaker:*App", "sagemaker:ListApps" ], "Resource": "*" } ] }

Snowflake 和 Data Wrangler

所有 Amazon 资源权限均通过附加到 Studio Classic 实例的 IAM 角色进行管理。特定于 Snowflake 的权限将由 Snowflake 管理员管理,因为他们可以向每个 Snowflake 用户授予精细权限/特权。包括数据库、架构、表、仓库和存储集成对象。您必须确保在 Data Wrangler 外部设置了正确的权限。

请注意,默认情况下 Snowflake COPY INTO Amazon S3 命令通过公共互联网将数据从 Snowflake 移动到 Amazon S3,但传输中数据使用 SSL 进行保护。Amazon S3 中的静态数据使用默认的 Amazon KMS key,用 SSE-KMS 进行加密。

在 Snowflake 凭证存储方面,Data Wrangler 不存储客户凭证。Data Wrangler 使用 Secrets Manager 将凭证存储在密钥中,并将密钥轮换作为最佳实践安全计划的一部分。Snowflake 或 Studio Classic 管理员需要确保数据科学家的 Studio Classic 执行角色被授予GetSecretValue对存储凭据的密钥执行的权限。如果该策略已附加到 Studio Classic 执行角色,则该AmazonSageMakerFullAccess策略具有读取 Data Wrangler 创建的机密以及按照上述说明中的命名和标记约定创建的密钥的必要权限。未遵守约定的密钥必须单独授权。我们建议使用 Secrets Manager 来防止通过不安全的渠道共享凭据;但是,请注意,登录用户可以通过在 Studio Classic 中启动终端或 Python 笔记本,然后从 Secrets Manager API 调用 API 来检索纯文本密码。

使用数据加密 Amazon KMS

在 Data Wrangler 中,您可以对加密的文件进行解密,并将其添加到 Data Wrangler 流中。您也可以使用默认密 Amazon KMS 钥或您提供的密钥对转换的输出进行加密。

您可以导入具以下特点的文件:

  • 服务器端加密

  • 采用 SSE-KMS 作为加密类型

要解密文件并导入到 Data Wrangler 流程,您必须添加要用作密钥用户的 SageMaker Studio Classic 用户。

以下屏幕截图显示了作为关键用户添加的 Studio Classic 用户角色。请参阅 IAM 角色,访问左侧面板下的用户以进行此更改。

适用于 Data Wrangler 导入的数据存储的 Amazon S3 客户托管密钥设置

默认情况下,Data Wrangler 使用具以下命名约定的 Amazon S3 存储桶:sagemaker-region-account number。例如,如果您的账号为,111122223333并且您使用的是 us-east-1 中的 Studio Classic,则导入的数据集将按以下命名约定存储:。sagemaker-us-east-1-111122223333

以下说明阐释了如何为默认 Amazon S3 存储桶设置客户托管密钥。

  1. 要启用服务器端加密并为默认 S3 存储桶设置客户托管密钥,请参阅使用 KMS 加密

  2. 完成步骤 1 后,导航到 Amazon KMS Amazon Web Services Management Console。找到您在上一步的步骤 1 中选择的客户托管密钥,然后将 Studio Classic 角色添加为密钥用户。为此,请按照允许密钥用户使用客户托管密钥中的说明进行操作。

加密导出的数据

您可以使用以下方法之一,对导出的数据进行加密:

  • 指定 Amazon S3 存储桶包含使用 SSE-KMS 加密的对象。

  • 指定 Amazon KMS 密钥来加密您从 Data Wrangler 导出的数据。

导出数据页面中,为Amazon KMS 密钥 ID 或 ARN 指定值。

有关使用 Amazon KMS 密钥的更多信息,请参阅使用存储在 AmazonAmazon Key Management Service (SSE-KMS) 中的 Amazon KMS 密钥的服务器端加密保护数据

亚马逊 AppFlow 权限

执行传输时,必须指定有权执行传输的 IAM 角色。您可以使用有权使用 Data Wrangler 的同一 IAM 角色。默认情况下,用于访问 Data Wrangler 的 IAM 角色是 SageMakerExecutionRole

IAM 角色必须具有以下权限:

  • 对 Amazon 的权限 AppFlow

  • 对 Amazon Glue 数据目录的权限

  • 发现可用数据源的权限 Amazon Glue

当您进行传输时,Amazon 会将传输的元数据 AppFlow 存储在 Amazon Glue 数据目录中。Data Wrangler 使用目录中的元数据来确定是否可供您查询和导入。

要向 Amazon 添加权限 AppFlow,请向 IAM 角色添加AmazonAppFlowFullAccess Amazon 托管策略。有关添加策略的更多信息,请参阅添加或删除 IAM 身份权限

如果要将数据传输到 Amazon S3,那么还必须附加以下策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:GetBucketTagging", "s3:ListBucketVersions", "s3:CreateBucket", "s3:ListBucket", "s3:GetBucketPolicy", "s3:PutEncryptionConfiguration", "s3:GetEncryptionConfiguration", "s3:PutBucketTagging", "s3:GetObjectTagging", "s3:GetBucketOwnershipControls", "s3:PutObjectTagging", "s3:DeleteObject", "s3:DeleteBucket", "s3:DeleteObjectTagging", "s3:GetBucketPublicAccessBlock", "s3:GetBucketPolicyStatus", "s3:PutBucketPublicAccessBlock", "s3:PutAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:PutBucketOwnershipControls", "s3:PutObjectVersionTagging", "s3:DeleteObjectVersionTagging", "s3:GetBucketVersioning", "s3:GetBucketAcl", "s3:PutObject", "s3:GetObject", "s3:GetAccountPublicAccessBlock", "s3:ListAllMyBuckets", "s3:GetAnalyticsConfiguration", "s3:GetBucketLocation" ], "Resource": "*" } ] }

要添加 Amazon Glue 权限,请将AWSGlueConsoleFullAccess托管策略添加到 IAM 角色。有关亚马逊 Amazon Glue 权限的更多信息 AppFlow,请参阅 [链接到appflow-page]。

亚马逊 AppFlow 需要访问 Amazon Glue 并且 Data Wrangler 才能导入您传输的数据。要向 Amazon 授予 AppFlow 访问权限,请向 IAM 角色添加以下信任策略。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root", "Service": [ "appflow.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

要在 Data Wrangler 中显示 Amazon AppFlow 数据,请向 IAM 角色添加以下策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:SearchTables", "Resource": [ "arn:aws:glue:*:*:table/*/*", "arn:aws:glue:*:*:database/*", "arn:aws:glue:*:*:catalog" ] } ] }

在 Data Wrangler 中使用生命周期配置

您可能有一个 Amazon EC2 实例,配置为运行内核网关应用程序,而不是 Data Wrangler 应用程序。内核网关应用程序提供对环境和用于运行 Studio Classic 笔记本电脑和终端的内核的访问权限。Data Wrangler 应用程序是运行 Data Wrangler 的用户界面应用程序。非 Data Wrangler 实例的 Amazon EC2 实例,需要修改其生命周期配置才能运行 Data Wrangler。生命周期配置是用于自动自定义 Amazon SageMaker Studio Classic 环境的 shell 脚本。

有关生命周期配置的更多信息,请参阅在 Amazon SageMaker Studio 经典版中使用生命周期配置

实例的默认生命周期配置不支持使用 Data Wrangler。您可以对默认配置进行以下修改,以便在实例中使用 Data Wrangler。

#!/bin/bash set -eux STATUS=$( python3 -c "import sagemaker_dataprep" echo $? ) if [ "$STATUS" -eq 0 ]; then echo 'Instance is of Type Data Wrangler' else echo 'Instance is not of Type Data Wrangler' # Replace this with the URL of your git repository export REPOSITORY_URL="https://github.com/aws-samples/sagemaker-studio-lifecycle-config-examples.git" git -C /root clone $REPOSTIORY_URL fi

可以将脚本另存为 lifecycle_configuration.sh

您可以将生命周期配置附加到您的 Studio Classic 域或用户配置文件中。有关创建和附加生命周期配置的更多信息,请参阅创建并关联生命周期配置

以下说明说明如何将生命周期配置附加到 Studio Classic 域或用户配置文件。

在创建或附加生命周期配置时,可能会遇到错误。有关生命周期配置错误调试的信息,请参阅KernelGateway 应用程序失败