通过 Amazon S3 访问授权控制从 Amazon SageMaker Studio 对 Ama
控制 Amazon SageMaker Studio 中对 Amazon S3 的数据访问
重要收获
在这篇文章中,我们将介绍如何使用 Amazon S3 存取授权来控制从 Amazon SageMaker Studio 访问 Amazon S3 的数据。这种方法不仅能简化数据访问管理,还能带来更灵活的权限控制,特别是对于不同用户角色的需求。
Amazon SageMaker Studio 提供了一个基于 Web 的可视界面,数据科学家、机器学习工程师和开发人员可以在此构建、训练、调试、部署和监控他们的机器学习模型。这些用户依赖于访问 Amazon Simple Storage Service (S3) 中的数据来执行数据探索和模型训练等任务。本文主要集中于如何使用 S3 存取授权来优化 S3 数据的访问控制。
方案概览
本文将展示如何利用 S3 存取授权简化 Amazon S3 的数据访问,特别是针对使用 IAM 原则的不同用户角色。

假设有一个产品团队,包括用户 A 和用户 B,两人共享一个 S3 存储桶,并且在其中实施以下访问要求:
团队的所有成员都应该能访问 S3 存储桶中的 Product 文件夹。用户 A 只能访问名为 UserA 的文件夹。用户 B 只能访问名为 UserB 的文件夹。用户 A 将运行一个 Amazon SageMaker Processing 工作,使用 S3 存取授权从 S3 存储桶中获取数据。以下图示显示了解决方案架构和工作流程:
接下来,我们将根据需求创建 SageMaker Studio 环境,包括建立 SageMaker Studio 域、设置用户资料、配置 S3 存储桶以及设置 S3 存取授权。
前置条件
在设置 SageMaker Studio 环境和配置 S3 存取授权之前,您需要拥有 AWS 帐户的管理员权限。我们假设您拥有创建 SageMaker Studio 域、创建 S3 存储桶和配置 S3 存取授权的必要权限。如果没有这些权限,请咨询您的 AWS 管理员或帐户拥有者以获得帮助。
使用 AWS CloudFormation 部署解决方案资源
为了简化资源的部署过程,我们提供了一个 AWS CloudFormation 模板,自动化所需服务的配置。部署 CloudFormation 堆叠将产生 AWS 使用费用。
CloudFormation 堆叠将创建以下资源:
资源类型描述VPC附有私有子网及相关路由表、NAT 网关和安全组IAM 执行角色用于 SageMaker 的访问控制S3 存取授权实例负责管理 S3 数据的访问授权AWS Lambda 函数将 Abalone 数据集 加载至 S3SageMaker 域提供 SageMaker Studio 的运行环境SageMaker Studio 用户资料用于识别和管理用户请按照以下步骤部署堆叠:
点击 启动堆叠。
在 创建堆叠 页面上,保持默认选项,点击 下一步。
在指定堆叠详细信息页面中,为堆叠名称输入名称例如 blogsagemakers3accessgrants。在 参数 中提供以下信息:对于 PrivateSubnetCIDR,输入私有子网的 CIDR 表示的 IP 地址范围。对于 ProjectName,输入 sagemakerblog。对于 VpcCIDR,输入将要创建的 VPC 的 CIDR 表示的 IP 地址范围。点击 下一步。在 配置堆叠选项 页面上,保持默认选项并点击 下一步。在 审查和创建 页面上,选择 我确认 AWS CloudFormation 可能会创建具有自定义名称的 IAM 资源。审核模板后,选择 创建堆叠。堆叠成功部署后,您可以在 AWS CloudFormation 控制台的 输出选项卡 中查看创建的资源。
验证 S3 存储桶中的数据
为了验证对 S3 存储桶的访问,我们使用 Abalone 数据集。作为 CloudFormation 堆叠部署过程的一部分,会调用 Lambda 函数将数据加载到 Amazon S3 中。完成后,您应该能在 S3 存储桶中的三个文件夹Product、UserA 和 UserB中找到 abalonecsv 文件。
验证 SageMaker 域及相关用户资料
完成以下步骤以验证 SageMaker 资源:
在 SageMaker 控制台中,选择导航窗格中的 域。选择 ProductDomain 进入域详细信息页面。
在 用户资料 部分,确认存在 userA 和 userB 资料。
选择一个用户资料名进入该用户资料的详细信息。
验证每个用户资料是否与其相应的 IAM 角色相关联:userA 关联 sagemakeruserarole,而 userB 关联 sagemakeruserbrole。验证 S3 存取授权设置
完成以下步骤以验证您的 S3 存取授权配置:
在 Amazon S3 控制台中,选择导航窗格中的 存取授权。选择 查看详细信息 进入 S3 存取授权的详细信息页面。
在 位置 标签上,确认创建的 S3 存储桶的 URI 已在 S3 存取授权实例中注册。
在 授权 标签上,确认以下信息:
sagemakeruserarole 被授予对 S3 前缀 Product/ 和 UserA/ 的读取/写入权限sagemakeruserbrole 被授予对 S3 前缀 Product/ 和 UserB/ 的读取/写入权限从 SageMaker Studio 环境验证访问
为验证我们设置的访问授权,我们将使用 SageMaker Processing 工作和 PySpark 在 Abalone 数据集上运行分布式数据处理作业。
请按照以下步骤操作:
在 SageMaker 控制台中,选择导航窗格中的 域。选择域 ProductDomain 进入该域的详细信息页面。在 用户资料 中选择 userA。在 用户详细信息页面 中,选择 启动 并选择 Studio。
在 SageMaker Studio 控制台中,选择导航窗格中的 JupyterLab。
选择 创建 JupyterLab 空间。
对于 名称,输入 useraspace。
bear小熊加速器下载对于 共享,选择 私有。点击 创建空间。
空间创建后,选择 运行该空间。
当状态显示为 正在运行 时,选择 打开 JupyterLab,这将重定向您到 SageMaker JupyterLab 体验。
在 启动器 页面,选择 Python 3 下的 Notebook。这将打开一个新的 Python 笔记本,我们将在其中运行 PySpark 脚本。
接下来,我们使用 SageMaker Processing 工作运行分布式作业以验证访问授权,因为我们通常需要在数据用于训练机器学习模型之前进行处理。SageMaker 是允许在处理作业中使用您之前设置的访问授权来运行分布式数据处理工作负载。
将以下 PySpark 脚本复制到 SageMaker Studio 笔记本的一个单元格中。writefile 指令将脚本保存到本地。该脚本用于生成使用访问授权的临时凭证并配置 Spark 以使用这些凭证访问 Amazon S3 中的数据。它执行对 Abalone 数据集的一些基本特征工程,包括字符串索引,独热编码和向量组合,并将它们组合成一个管道。然后,它进行 80/20 的分割,输出训练和验证数据集,并将这些数据集保存到 Amazon S3 中。确保在脚本中将 regionname 替换为您正在使用的 AWS 区域。pythonwritefile /preprocesspyfrom pysparksql import SparkSessionfrom pysparksqltypes import StructType StructField StringType DoubleTypefrom pysparkml import Pipelinefrom pysparkmlfeature import StringIndexer OneHotEncoder VectorAssemblerimport argparseimport subprocessimport sys
def installpackages() subprocesscheckcall([sysexecutable m pip install boto3==1351 botocoregt=1350])
installpackages()import boto3print(flogs boto3 version in the processing job {boto3version})import botocoreprint(flogs botocore version in the processing job {botocoreversion})
def gettemporarycredentials(accountid bucketname objectkeyprefix) regionname = s3controlclient = boto3client(s3control regionname=regionname) response = s3controlclientgetdataaccess( AccountId=accountid Target=fs3//{bucketname}/{objectkeyprefix}/ Permission=READWRITE ) return response[Credentials]
def configuresparkwiths3a(credentials) spark = SparkSessionbuilder appName(PySparkApp) config(sparkhadoopfss3aaccesskey credentials[AccessKeyId]) config(sparkhadoopfss3asecretkey credentials[SecretAccessKey]) config(sparkhadoopfss3asessiontoken credentials[SessionToken]) config(sparkhadoopfss3aimpl orgapachehadoopfss3aS3AFileSystem) config(sparkhadoopfss3aawscredentialsprovider orgapachehadoopfss3aT
确保生成性人工智能的安全:数据、合规性和隐私考虑事项 安全博客
保障生成式 AI 的安全性:数据、安全合规与隐私考虑关键要点在本篇文章中,我们将探讨如何保障生成式人工智能AI的安全性,尤其是关注于数据治理、合规性与隐私风险。随着生成式 AI 的快速普及,我们需要认真考虑用户数据的存储、处理和共享方式,因此,建立相应的治理策略尤为重要。本文将提供有关在部署与建设生...