本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
安全性和权限
当您查询来自 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 的数据集的访问
您可以使用 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 存储桶设置存储桶策略,请执行以下操作:
-
配置一个或多个你希望能够访问 Data Wrangler 的IAM角色。
-
打开命令提示符或 Shell。对于您创建的每个角色,替换
role-name
使用角色的名称并运行以下命令:$ aws iam get-role --role-name
role-name
在回复中,您会看到以
AROA
开头的RoleId
字符串。复制此字符串。 -
将以下策略添加到您使用 Data Wrangler 的 Amazon 地区的 SageMaker 默认存储桶。Replace(替换)
region
以及存储桶所在的 Amazon 区域,以及account-id
使用您的 Amazon 账户 ID。替换userId
以开头的 sAROAEXAMPLEID
与你想要授予使用 Data Wrangler 权限的 Amazon 角色相同。IDs{ "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角色:D ata Wrangler 允许列表
注意
上述策略示例仅为用户提供访问 Data Wrangler 应用程序的权限。
有关创建策略的信息,请参阅JSON选项卡上的创建策略。创建策略时,复制并粘贴选项卡中 Data Wrangler 允许列表示例
重要
使用模板创建策略后,将其附加到用户的IAM角色。有关附加策略的信息,请参阅添加IAM身份权限(控制台)。
向IAM角色授予使用 Data Wrangler 的权限
您可以授予IAM角色使用带有通用IAM托管策略的 Data Wrangler 的权限。AmazonSageMakerFullAccess
AmazonSageMakerFullAccess
授予 Data Wrangler 访问权限时,应该知晓以下事项:
-
如果从 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 数据集导入访问权限的策略示例
以下策略授予如下权限:使用名称中具有 sagemaker_access
前缀的数据库用户,设置 Amazon Redshift 与 Data Wrangler 的连接。要授权使用其他数据库用户进行连接,可在以下策略的 "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角色授予访问此存储桶的权限。此示例授予对名为的存储桶的编程读写访问权限 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、Pipelines 和 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 存储桶,从其他 Amazon 账户访问您的 Amazon S3 存储桶中的数据URI。为此,授予其他账户中 Amazon S3 存储桶访问权限的策略应使用类似于以下示例的策略,其中BucketFolder
是用户存储桶中的特定目录UserBucket
。IAM此策略应添加到授权其他用户访问其存储桶的用户。
{ "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
/*" ] } } } ] }
访问存储桶的用户(非存储桶所有者)必须向其用户添加类似以下示例的策略。请注意,下面的 AccountX
和 TestUser
分别代表存储桶所有者和其用户。
{ "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 外部设置了正确的权限。
请注意,默认情况下,Snowf COPY INTO Amazon S3
lake 命令通过公共互联网将数据从 Snowflake 移动到 Amazon S3,但传输中的数据是使用保护的。SSLAmazon S3 中的静态数据KMS使用默认值加密 SSE- Amazon KMS key。
在 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 存储桶设置客户托管密钥。
-
要启用服务器端加密并为默认 S3 存储桶设置客户托管密钥,请参阅使用KMS加密。
-
完成步骤 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 权限,请向IAM角色添加AWSGlueConsoleFullAccess
托管策略。有关 Amazon Amazon Glue 权限的更多信息 AppFlow,请参阅 [link-to-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 脚本。
有关生命周期配置的更多信息,请参阅使用生命周期配置自定义 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 应用程序失败。