本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
安全和权限
当您从 Athena 或 Amazon Redshift 查询数据时,查询的数据集会自动存储在您使用 Studio 的Amazon地区的默认 SageMaker S3 存储桶中。此外,当您从 Amazon SageMaker Data Wrangler 导出 Jupyter 笔记本并运行它时,您的数据流或.flow 文件将保存到同一个默认存储桶中,前缀为 d ata_wrangler_ flows。
对于高级安全需求,您可以配置存储桶策略,限制有权访问此默认 SageMaker S3 存储桶的Amazon角色。使用以下部分将此类策略添加到 S3 存储桶。要按照此页面上的说明进行操作,请使用Amazon Command Line Interface (Amazon CLI)。要了解操作方法,请参阅 IAM 用户指南中的配置Amazon CLI。
此外,您需要向每个使用 Data Wrangler 的 IAM 角色授予访问所需资源的权限。如果您不需要用于访问 Data Wrangler 的 IAM 角色的精细权限,则可以将 IAM 托管策略添加到用于创建 Studio 用户的 IAM 角色中。AmazonSageMakerFullAccess
添加存储段策略以限制对导入到 Data Wrangler 的数据集的访问权限
您可以使用 Amazon S3 存储桶策略向包含您的 Data Wrangler 资源的 S3 存储桶添加策略。Data Wrangler 上传到您使用 StudioAmazon 所在区域的默认 SageMaker S3 存储桶的资源包括以下内容:
-
已查询Amazon Redshift ft 结果。它们存储在 redshift/ 前缀下。
-
查询Athena 结果。它们存储在 athena/ 前缀下。
-
运行导出的 Jupyter 笔记本 Data Wrangler 生成的.flow 文件时上传到 Amazon S3。它们存储在 data_wrangler_flows/ 前缀下。
使用以下过程创建 S3 存储桶策略,您可以添加该策略以限制 IAM 角色访问该存储桶。要了解如何将策略添加到 S3 存储桶,请参阅如何添加 S3 存储桶策略? 。
要在存储您的 Data Wrangler 资源的 S3 存储桶上设置存储桶策略,请执行以下操作:
-
配置要能够访问 Data Wrangler 的一个或多个 IAM 角色。
-
打开命令提示符或 shell。对于您创建的每个角色,将
角色名称
替换为角色名称并运行以下命令:$ aws iam get-role --role-name
role-name
在响应中,你会看到一个以开头的
RoleId
字符串AROA
。复制这个字符串。 -
将以下策略添加到您使用 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 用户界面运行 Data Wrangler 时,他们都会调用 SageMaker 应用程序编程接口 (API) 来创建 Data Wrangler 应用程序。
默认情况下,您的组织可能不会向您的用户提供进行这些 API 调用的权限。要提供权限,您必须使用以下策略模板创建策略并将其附加到用户的 IAM 角色:Data Wrangler 允许列表示例
注意
前面的策略示例仅允许您的用户访问 Data Wrangler 应用程序。
有关创建策略的信息,请参阅在 “JSON” 选项卡上创建策略。创建策略时,将来自 Data Wrangler 允许列表示例
重要
使用模板创建策略后,将其附加到用户的 IAM 角色。有关附加策略的信息,请参阅添加 IAM 身份权限(控制台)。
授予 IAM 角色使用 Data Wrangler 的权限
您可以通过通用 IAM 托管策略授予 IAM 角色使用 Data Wrangler 的权限AmazonSageMakerFullAccess
AmazonSageMakerFullAccess
予访问权限时,您应注意以下事项:
-
如果您从 Amazon Redshift 导入数据,则数据库用户名必须带有前缀
sagemaker_access
。 -
此托管策略仅授予访问名称中包含以下内容之一的存储段的权限:
SageMaker
SageMaker
、sagemaker
、或aws-glue
。如果要使用 Data Wrangler 从 S3 存储桶导入名称中不包含这些短语,请参阅本页的最后一节,了解如何向 IAM 实体授予访问您的 S3 存储桶的权限。
如果您有高安全需求,可以将本节中的策略附加到 IAM 实体,以授予使用 Data Wrangler 所需的权限。
如果您在 Amazon Redshift 或 Athena 中有数据集,IAM 角色需要从 Data Wrangler 导入,则必须向该实体添加策略才能访问这些资源。以下策略是您可以用来授予 IAM 角色从 Amazon Redshift 和 Athena 导入数据的权限的最严格的政策。
要了解如何将自定义策略附加到 IAM 角色,请参阅 IAM 用户指南中的管理 IAM 策略。
授予 Athena 数据集导入访问权限的策略示例
以下策略假定 IAM 角色有权访问通过单独的 IAM 策略存储数据的基础 S3 存储桶。
{ "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 ft 数据集导入访问权限的策略示例
以下政策允许使用名称中带有前缀的数据库用户建立 Amazon Redshift 与 Data Wranglersagemaker_access
的连接。要授予使用其他数据库用户进行连接的权限,请在以下策略"Resources"
下添加其他条目。以下策略假定 IAM 角色有权访问通过单独的 IAM 策略存储数据的基础 S3 存储桶(如果适用)。
{ "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 角色访问此存储桶的权限。此示例授予对名为 t es
t 的存储桶的编程读写访问权限。
{ "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 角色访问正在使用的 Region Data Wrangler 中默认 Amazon S3 存储桶下的以下前缀的权限:athena/
,redshift/
。Amazon如果Amazon该区域尚不存在默认 Amazon S3 存储桶,则您还必须向 IAM 角色授予在该区域创建存储桶的权限。
此外,如果您希望 IAM 角色能够使用 Amazon F SageMaker eature Store、 SageMaker Pipelines 和 Data Wrangler 任务导出选项,则必须授予对此存储段data_wrangler_flows/
中前缀的访问权限。
Data Wrangler 使用athena/
和redshift/
前缀来存储预览文件和导入的数据集。要了解更多信息,请参阅 导入的数据存储。
当你运行从 Data Wrangler 导出的 Jupyter 笔记本时,Data Wrangler 使用data_wrangler_flows/
前缀来存储.flow 文件。要了解更多信息,请参阅 Export。
使用与以下类似的策略授予前面段落中描述的权限。
{ "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
/*" ] } } } ] }
访问存储段的用户(不是存储段所有者)必须向其用户添加与以下示例类似的策略。请注意,TestUser
以下AccountX
和分别指存储段所有者及其用户。
{ "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 实例的 IAM 执行角色。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreatePresignedDomainUrl", "sagemaker:DescribeDomain", "sagemaker:ListDomains", "sagemaker:DescribeUserProfile", "sagemaker:ListUserProfiles", "sagemaker:*App", "sagemaker:ListApps" ], "Resource": "*" } ] }
雪花和数据牧马者
所有Amazon资源权限均通过您附加到 Studio 实例的 IAM 角色进行管理。Snowflake 管理员管理 Snowflake 特定的权限,因为他们可以向每个 Snowflake 用户授予精细的权限和权限。这包括数据库、架构、表、仓库和存储集成对象。您必须确保在 Data Wrangler 之外设置了正确的权限。
请注意,默认情况下,SnowflakeCOPY INTO Amazon S3
命令通过公共互联网将数据从 Snowflake 移动到 Amazon S3,但传输中的数据使用 SSL 进行保护。Amazon S3 中的静态数据使用默认值使用 SSE-KMS 加密Amazon KMS key。
关于 Snowflake 凭据存储,Data Wrangler 不存储客户凭证。作为最佳实践安全计划的一部分,Data Wrangler 使用 Secrets Manager 将凭据存储在密钥中,并轮换密钥。Snowflake 或 Studio 管理员需要确保向数据科学家的 Studio 执行角色授予权限,以执行GetSecretValue
存储凭据的密钥。如果已附加到 Studio 执行角色,则该AmazonSageMakerFullAccess
策略具有读取 Data Wrangler 创建的密钥以及按照上述说明中的命名和标记约定创建的机密所需的权限。必须单独授予不遵守惯例的密钥访问权限。我们建议使用Secrets Manager 来防止通过不安全的渠道共享凭据;但是,请注意,登录的用户可以通过在 Studio 中启动终端或 Python 笔记本,然后从Secrets Manager API 调用 API 来检索纯文本密码。
使用以下方式进行数据加密Amazon KMS
在 Data Wrangler 中,你可以解密加密文件并将其添加到 Data Wrangler 流程中。您也可以使用默认密Amazon KMS钥或您提供的密钥对转换的输出进行加密。
如果文件具有以下内容,则可以导入文件:
-
服务器端加密
-
SSE-KMS 作为加密类型
要解密文件并导入 Data Wrangler 流程,必须添加您用作密钥用户的 SageMaker Studio 用户。
以下屏幕截图显示了作为密钥用户添加的 Studio 用户角色。要进行此更改,请参阅左侧面板下方的 IAM 角色

Data Wrangler 导入的数据存储的 Amazon S3 客户托管密钥设置
默认情况下,Data Wrangler 使用具有以下命名约定的 Amazon S3 存储桶:sagemaker-region-account number
。例如,如果您的账号是,111122223333
并且您在 us-east-1 中使用 Studio,则导入的数据集将按以下命名约定存储:sagemaker-us-east-1-111122223333
。
以下说明说明如何为您的默认 Amazon S3 存储桶设置客户托管密钥。
-
要启用服务器端加密并为默认 S3 存储桶设置客户托管密钥,请参阅使用 KMS 加密。
-
完成第 1 步后Amazon KMS,导航到Amazon Web Services Management Console。找到您在上一步的步骤 1 中选择的客户管理密钥,然后将 Studio 角色添加为密钥用户。为此,请按照允许密钥用户使用客户管理的密钥中的说明进行操作。
加密您导出的数据
您可以使用下列方法之一对导出的数据加密:
-
指定您的 Amazon S3 存储桶包含对象使用 SSE-KMS 加密。
-
指定密Amazon KMS钥来加密您从 Data Wrangler 导出的数据。
在导出数据页面上,为Amazon KMS密钥 ID 或 ARN 指定一个值。
有关使用Amazon KMS密钥的更多信息,请参阅使用具有 SE-KMS 的Amazon KMS服务器端加密,保护数据。AmazonAmazon Key Management Service
亚马逊 AppFlow 权限
在执行转移时,必须指定有权执行转移的 IAM 角色。您可以使用有权使用 Data Wrangler 的同一 IAM 角色。默认情况下,您访问 Data Wrangler 时使用的 IAM 角色是SageMakerExecutionRole
。
IAM 角色必须具有以下权限:
-
对亚马逊的权限 AppFlow
-
对Amazon Glue数据目录的权限
-
发现可用数据源的权限Amazon Glue
当您进行传输时,亚马逊会将传输的元数据 AppFlow 存储在Amazon Glue数据目录中。Data Wrangler 使用目录中的元数据来确定它是否可供您查询和导入。
要向 Amazon 添加权限 AppFlow,请将AmazonAppFlowFullAccess
Amazon托管策略添加到 IAM 角色。有关添加策略的更多信息,请参阅添加或删除 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,请参阅 [link-to-appflow-page]。
亚马逊 AppFlow 需要访问Amazon Glue和 Data Wrangler 才能导入您传输的数据。要授予亚马逊 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 中显示亚马逊 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 笔记本电脑和终端的环境和内核的访问权限。Data Wrangler 应用程序是运行 Data Wrangler 的 UI 应用程序。不是 Data Wrangler 实例的 Amazon EC2 实例需要修改其生命周期配置才能运行 Data Wrangler。生命周期配置是可自动自定义您的 Amazon SageMaker Studio 环境的 shell 脚本。
有关生命周期配置的更多信息,请参阅在亚马逊 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 域或用户配置文件。有关创建和附加生命周期配置的更多信息,请参阅创建和关联生命周期配置。
以下说明向您展示如何将生命周期配置附加到 Studio 域或用户配置文件。
在创建或附加生命周期配置时,可能会遇到错误。有关调试生命周期配置错误的信息,KernelGateway 应用程序失败。