In 部分1 在本系列中,我们演示了如何解决 亚马逊SageMaker Studio 使用 Amazon 私有 VPC 终端节点的企业网络中的预签名 URL,无需遍历 Internet。 在这篇文章中,我们将继续在之前的解决方案之上构建,以演示如何通过以下方式构建私有 API 网关 Amazon API网关 作为代理接口生成和访问 亚马逊SageMaker 预签名的 URL。 此外,我们添加了一个额外的防护机制,以确保仅为企业网络中经过身份验证的最终用户生成和访问预签名 URL。
解决方案概述
下图说明了该解决方案的体系结构。
该过程包括以下步骤:
- 在 亚马逊Cognito 用户池,首先设置一个名称与他们的 Studio 用户配置文件匹配的用户,并将 Studio 注册为用户池中的应用程序客户端。
- 用户与其企业身份提供商 (IdP) 联合,并通过 Amazon Cognito 用户池进行身份验证以访问 Studio。
- Amazon Cognito 向授权访问 Studio 应用程序的用户返回一个令牌。
- 用户调用
createStudioPresignedUrl
API Gateway 上的 API 以及标头中的令牌。 - API Gateway 调用自定义 AWS Lambda 授权者并验证令牌。
- 当令牌有效时,Amazon Cognito 将带有工作室用户配置文件 ID 的访问授权策略返回到 API Gateway。
- API 网关调用
createStudioPresignedUrl
用于创建工作室预签名 URL 的 Lambda 函数。 -
createStudioPresignedUrl
函数使用 SageMaker API VPC 端点创建预签名 URL 并返回给调用者。 - 用户从通过 Studio VPC 终端节点解析的公司网络访问预签名 URL。
- 函数的 AWS身份和访问管理 (IAM) 策略确保预签名 URL 创建和访问是通过 VPC 终端节点执行的。
以下部分将引导您完成 API Gateway 私有 API 的解决方案部署、配置和验证,以使用 VPC 终端节点从公司网络创建和解析 Studio 预签名 URL。
- 部署解决方案
- 配置 Amazon Cognito 用户
- 使用 JSON Web 令牌对预签名 URL 的私有 API 进行身份验证
- 配置企业 DNS 服务器以访问私有 API
- 为来自公司网络的预签名 URL 测试 API Gateway 私有 API
- 预签名 URL Lambda 身份验证策略
- 净化
部署解决方案
您可以通过以下任一方式部署解决方案 AWS管理控制台 或者 AWS无服务器应用程序模型 (AWS SAM)。
要通过控制台部署解决方案,请启动以下命令 AWS CloudFormation 在您的帐户中选择模板 启动堆栈. CloudFormation 堆栈大约需要 10 分钟才能完成。
要使用 AWS SAM 部署解决方案,您可以在 aws-samples GitHub 存储库,您还可以在其中贡献示例代码。 以下命令显示如何使用 AWS SAM CLI 部署解决方案。 如果当前未安装, 安装 AWS SAM CLI.
- 在 https://github.com/aws-samples/secure-sagemaker-studio-presigned-url 克隆存储库。
- 克隆存储库后,导航到源并运行以下代码:
配置 Amazon Cognito 用户
要配置您的 Amazon Cognito 用户,请完成以下步骤:
- 创建一个与 SageMaker 用户配置文件同名的 Amazon Cognito 用户:
- 设置用户密码:
- 获取访问令牌:
使用 JSON Web 令牌对预签名 URL 的私有 API 进行身份验证
当您部署用于创建 SageMaker 预签名 URL 的私有 API 时,您添加了一个防护机制以限制公司网络和 VPC 终端节点之外的任何人访问预签名 URL。 但是,如果不对企业网络中的私有 API 实施其他控制,企业网络中的任何内部用户都可以为 SageMaker 用户配置文件传递未经身份验证的参数并访问任何 SageMaker 应用程序。
为了缓解这个问题,我们建议将经过身份验证的调用者的 JSON Web 令牌 (JWT) 传递给 API 网关,并使用 JWT 授权方验证该令牌。 有多种选项可用于为私有 API 网关实现授权方,使用自定义 Lambda 授权人 or 亚马逊Cognito.
使用自定义 Lambda 授权方,您可以在返回的策略中嵌入 SageMaker 用户配置文件名称。 这可以防止公司网络中的任何用户发送任何 SageMaker 用户配置文件名称来创建他们无权创建的预签名 URL。 我们使用 Amazon Cognito 生成我们的令牌和自定义 Lambda 授权方来验证并返回适当的策略。 有关详细信息,请参阅 使用 Amazon Cognito、API Gateway 和 IAM 构建细粒度授权. Lambda 授权方使用 Amazon Cognito 用户名作为用户配置文件名称。
如果您无法使用 Amazon Cognito,您可以开发一个自定义应用程序来进行身份验证并将最终用户令牌传递给 Lambda 授权方。 有关详细信息,请参阅 使用 API Gateway Lambda 授权方.
配置企业 DNS 服务器以访问私有 API
要配置您的公司 DNS 服务器,请完成以下步骤:
- 点击 亚马逊弹性计算云 (Amazon EC2) 控制台,选择您的本地 DNSA EC2 实例并通过 系统管理器会话管理器.
- 在
/etc/named.conf
用于通过您的解析到 API Gateway 的 DNS 名称的文件 亚马逊路线53 入站解析器,如下代码所示: - 使用以下命令重新启动命名服务:
验证从 API Gateway 私有 API 为授权用户请求预签名 URL
在实际场景中,您将实现一个前端接口,该接口将使用自定义解决方案或利用为经过身份验证和授权的资源传递适当的授权标头 AWS放大. 为简洁起见,以下步骤利用 Postman 快速验证我们部署的解决方案实际上限制了为内部用户请求预签名 URL,除非获得授权。
要使用 Postman 验证解决方案,请完成以下步骤:
- 在 WINAPP EC2 实例上安装 Postman。 查看说明 相关信息
- 打开 Postman 并将访问令牌添加到您的
Authorization
标头: - 修改 API Gateway URL 以从您的内部 EC2 实例访问它:
- 将 VPC 终端节点添加到您的 API Gateway URL:
- 添加
Host
带有 API 网关 URL 值的标头: - 首先,改变
EMPLOYEE_ID
到您的 Amazon Cognito 用户和 SageMaker 用户配置文件名称。 确保您收到授权的预签名 URL。 - 然后更改
EMPLOYEE_ID
给不属于您的用户,并确保您收到访问失败。
- 在 Amazon EC2 控制台上,选择您的本地 WINAPP 实例并通过您的 RDP 客户端进行连接。
- 打开 Chrome 浏览器并导航到您的授权预签名 URL 以启动 Studio。
Studio 通过 VPC 端点启动,远程地址作为 Studio VPC 端点 IP。
如果在公司网络之外访问预签名 URL,则解析失败,因为预签名 URL 的 IAM 策略条件强制从 VPC 终端节点创建和访问。
预签名 URL Lambda 身份验证策略
上述解决方案为生成预签名 URL 以访问 SageMaker Studio 的 Lambda 创建了以下身份验证策略。
结论
在这篇博文中,我们演示了如何使用 Amazon 私有 VPC 终端节点从企业网络使用私有 API 网关访问 Studio,防止访问企业网络外部的预签名 URL,以及使用 Amazon Cognito 和自定义 Lambda 通过 JWT 授权方保护 API 网关授权人。
尝试使用此解决方案并尝试将其与您的公司门户集成,并在评论中留下您的反馈!
作者简介
拉姆·维塔尔 是 AWS 的机器学习解决方案架构师。 他在架构和构建分布式、混合和云应用程序方面拥有 20 多年的经验。 他热衷于构建安全且可扩展的 AI/ML 和大数据解决方案,以帮助企业客户进行云采用和优化之旅,从而改善他们的业务成果。 在业余时间,他喜欢网球、摄影和动作片。
乔纳森·阮 是 AWS 的共享交付团队高级安全顾问。 他的背景是 AWS 安全,专注于威胁检测和事件响应。 如今,他帮助企业客户制定全面的 AWS 安全战略,大规模部署安全解决方案,并就 AWS 安全最佳实践培训客户。
克里斯柴尔德斯 是 AWS 专业服务领域的云基础设施架构师。 他与 AWS 客户合作设计和自动化他们的云基础设施,并改进他们对 DevOps 文化和流程的采用。
- "
- 10
- 100
- a
- 关于
- ACCESS
- 访问
- 账号管理
- 操作
- 添加
- 额外
- 地址
- 采用
- Amazon
- 另一个
- 任何人
- API
- 应用
- 应用领域
- 应用领域
- 适当
- 约
- 架构
- 认证
- 认证
- 认证
- 授权
- 自动化
- AWS
- 背景
- 因为
- 作为
- 最佳
- 最佳实践
- 大数据运用
- 博客
- 边界
- 浏览器
- 建立
- 建筑物
- 商业
- 呼叫者
- 更改
- 收费
- 铬系列
- chrome浏览器
- 云端技术
- 云基础设施
- 码
- 完成
- 全面
- 计算
- 流程条件
- 配置
- 分享链接
- 安慰
- 顾问
- 继续
- 贡献
- 控制
- 公司
- 创建信息图
- 创建
- 创建
- 创造
- 创建
- 文化塑造
- 目前
- 习俗
- 合作伙伴
- data
- 交货
- 演示
- 证明
- 部署
- 部署
- 部署
- 设计
- 检测
- 开发
- 分布
- DNS
- 效果
- 端点
- 企业
- 体验
- 实验
- 失败
- 反馈
- (名字)
- 专注焦点
- 以下
- 向前
- 止
- 功能
- 此外
- 网关
- 生成
- 产生
- GitHub上
- 帮助
- 帮助
- 创新中心
- How To
- 但是
- HTTPS
- 杂交种
- 身分
- 实施
- 实施
- 改善
- 包括
- 信息
- 基础设施
- 例
- 接口
- 网络
- IP
- 问题
- IT
- 旅程
- 最新
- 发射
- 推出
- 学习
- 离开
- 杠杆作用
- 杠杆
- 机
- 机器学习
- 使
- 制作
- 颠覆性技术
- 经理
- 匹配
- 更多
- 电影
- 多
- 导航
- 网络
- 正在进行
- 优化
- 附加选项
- 部分
- 通过
- 多情
- 密码
- 摄影
- 政策
- 池
- 门户网站
- 预防
- 以前
- 私立
- 过程
- 过程
- 所以专业
- 本人简介
- 提供
- 提供者
- 代理
- 很快
- 接收
- 记录
- 寄存器
- 远程
- 知识库
- 资源
- 资源
- 响应
- 回报
- 回报
- 路线
- 运行
- 同
- 可扩展性
- 鳞片
- 安全
- 保安
- 系列
- 无服务器
- 服务
- 特色服务
- 集
- 共用的,
- 显示
- 如图
- So
- 固体
- 方案,
- 解决方案
- 堆
- 个人陈述
- 策略
- 工作室
- 团队
- 三
- 通过
- 次
- 今晚
- 象征
- 令牌
- 最佳
- 培训
- 使用
- 用户
- 验证
- 折扣值
- 版本
- 卷筒纸
- 中
- 也完全不需要
- 合作
- 将
- 年
- 您一站式解决方案