本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
当您查询来自 Athena 或 Amazon Redshift 的数据时,查询的数据集会自动存储在您使用 Studio Classic 的地区的 SageMaker 默认 AI S3 存储桶中。 AWS 此外,当您从 Amazon Data Wrangler 导出 Jupyter 笔记本并运行它时,您的 SageMaker 数据流或.flow 文件将保存到同一个默认存储桶中,前缀为 data_wrangler_flows。
为了满足高级安全需求,您可以配置存储桶策略,限制有权访问此默认 SageMaker AI S3 存储桶的 AWS 角色。可使用以下部分将此策略类型添加到 S3 存储桶。要按照本页上的说明进行操作,请使用 AWS Command Line Interface (AWS CLI)。要了解如何操作,请参阅IAM用户指南 AWS CLI中的配置。
此外,您需要向每个使用 Data Wrangler 的IAM角色授予访问所需资源的权限。如果您对用于访问 Data Wrangler 的IAM角色不需要精细权限,则可以将IAM托管策略添加到用于创建 Studio Classic 用户的IAM角色中。AmazonSageMakerFullAccess
添加存储桶策略以限制对导入到 Data Wrangler 的数据集的访问
您可以使用 Amazon S3 存储桶策略,向包含 Data Wrangler 资源的 S3 存储桶添加策略。在您使用 Studio Classic 的 AWS 区域中,Data Wrangler 上传到默认 SageMaker AI 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 Wrangl AWS er 的地区的 SageMaker AI 默认存储桶。
region
替换为存储桶所在的 AWS 区域和您的 AWS 账户 ID。account-id
将以开头的userId
s 替换为要向其授予使用 Data Wrangler 权限的 AWS 角色。AROAEXAMPLEID
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 AI 应用程序编程接口 (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 AI
、SageMaker AI
、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访问正在使用的区域数据管理器 AWS 中默认 Amazon S3 存储桶下的以下前缀的权限:,。athena/
redshift/
如果 AWS 该地区尚不存在默认 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 存储桶,从其他 AWS 账户访问您的 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 AI 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
AWS 资源的所有权限均通过附加到 Studio Classic 实例的IAM角色进行管理。特定于 Snowflake 的权限将由 Snowflake 管理员管理,因为他们可以向每个 Snowflake 用户授予精细权限/特权。包括数据库、架构、表、仓库和存储集成对象。您必须确保在 Data Wrangler 外部设置了正确的权限。
请注意,默认情况下,Snowf COPY INTO Amazon S3
lake 命令通过公共互联网将数据从 Snowflake 移动到 Amazon S3,但传输中的数据是使用保护的。SSLAmazon S3 中的静态数据KMS使用默认值加密 SSE- AWS 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
使用数据加密 AWS KMS
在 Data Wrangler 中,您可以对加密的文件进行解密,并将其添加到 Data Wrangler 流中。您也可以使用默认密 AWS 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 后,导航到 AWS KMS AWS Management Console。找到上一步步骤 1 中选择的客户托管式密钥,并将 Studio Classic 角色添加为键用户。为此,请按照允许密钥用户使用客户托管密钥中的说明进行操作。
加密导出的数据
您可以使用以下方法之一,对导出的数据进行加密:
-
指定您的 Amazon S3 存储桶具有对象用途 SSE-KMS 加密。
-
指定 AWS KMS 密钥来加密您从 Data Wrangler 导出的数据。
在导出数据页面上,为AWS KMS 密钥 ID 或指定一个值ARN。
有关使用 AWS KMS 密钥的更多信息,请参阅使用存储在 AWSAWS Key Management Service (SSE-KMS) 中的 AWS KMS 密钥使用服务器端加密保护数据。
亚马逊 AppFlow 权限
执行转移时,必须指定有权执行转移的IAM角色。你可以使用具有使用 Data Wrangler 权限的同一个IAM角色。默认情况下,您用于访问 Data Wrangler 的IAM角色是。SageMakerExecutionRole
该IAM角色必须具有以下权限:
-
Amazon 权限 AppFlow
-
对 AWS Glue 数据目录的权限
-
发现可用数据源的权限 AWS Glue
当您进行传输时,Amazon 会将传输的元数据 AppFlow 存储在 AWS Glue 数据目录中。Data Wrangler 使用目录中的元数据来确定是否可供您查询和导入。
要向 Amazon 添加权限 AppFlow,请向IAM角色添加AmazonAppFlowFullAccess
AWS
托管策略。有关添加策略的更多信息,请参阅添加或删除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": "*"
}
]
}
要添加 AWS Glue 权限,请向IAM角色添加AWSGlueConsoleFullAccess
托管策略。有关 Amazon AWS Glue 权限的更多信息 AppFlow,请参阅 [link-to-appflow-page]。
亚马逊 AppFlow 需要访问 AWS 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 应用程序。Kernel Gateway 应用程序可以访问运行 Studio Classic 笔记本和终端的环境和内核。Data Wrangler 应用程序是运行 Data Wrangler 的用户界面应用程序。不是 Data Wrangler 实例的 Amazon EC2 实例需要修改其生命周期配置才能运行 Data Wrangler。生命周期配置是用于自动自定义 Amazon SageMaker Studio Classic 环境的 shell 脚本。
有关生命周期配置的更多信息,请参阅使用生命周期配置自定义 Studio Classic。
实例的默认生命周期配置不支持使用 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 应用程序失败。