将 Amazon MWAA 与 Microsoft Entra ID 集成,使用 SAML 身份验证
实现 Amazon MWAA 与 Microsoft Entra ID 的 SAML 认证集成
作者:Satya Chikkala 和 Vijay Velpula 日期:2024年7月30日在 Amazon 管理工作流Amazon MWAA 和 技术如何做
永久链接 评论
关键要点
Amazon MWAA 提供了支持通过 SAML 认证的 AWS 无服务器数据处理。Microsoft Entra ID 作为身份提供方,使企业用户可以无缝登录。本文提供了详细的部署步骤,涵盖基础设施构建和 SSO 集成。Amazon 管理工作流 for Apache AirflowAmazon MWAA提供了一种完全托管的解决方案,用于在云中编排和自动化复杂工作流。用户通常以私有模式部署 Amazon MWAA,并希望利用现有的登录认证机制和单点登录SSO功能,以便能够与企业的 Active DirectoryAD无缝集成。此外,最终用户不需要登录到 AWS 管理控制台 来访问 Airflow 用户界面。
本文将介绍如何配置在私有网络访问模式下部署 Amazon MWAA 环境,使用客户管理的 VPC 端点,通过 Microsoft Entra ID 和 应用负载均衡器ALB 认证用户。用户可以使用企业凭据无缝登录 Airflow 用户界面并访问 DAG。该解决方案同样可以修改以适用于 Amazon MWAA 公有网络访问模式。
解决方案概述
使用 SAML SSO 对 Amazon MWAA 环境进行鉴权的架构组件如图所示。基础设施组件包括两个公有子网和三个私有子网。公有子网是为了支持与互联网相连的 ALB。两个私有子网用于设置 Amazon MWAA 环境,第三个私有子网则用于托管 AWS Lambda 授权者功能。此子网将附加一个 NAT 网关,因为该功能需要验证签名,以确认 JWT 标头具有预期的 负载均衡器 ARN。
魔方加速器免费正版工作流程包括以下步骤:
Microsoft Entra ID 作为身份提供方IdP进行 SAML 配置。Amazon Cognito 作为服务提供方SP。ALB 内置支持 Amazon Cognito 并进行请求认证。认证后,ALB 将请求转发到 Lambda 授权者功能。Lambda 函数解码用户的 JWT 令牌并验证用户的 AD 组是否映射到相关的 AWS 身份与访问管理IAM角色。如果有效,函数创建一个 Web 登录令牌,并重定向到 Amazon MWAA 环境以完成登录。以下是部署该解决方案的高级步骤:
创建一个 Amazon 简单存储服务Amazon S3存储桶以存放构件。创建一个 SSL 证书并将其上传到 AWS 证书管理器ACM。使用 AWS CloudFormation 部署 Amazon MWAA 基础设施堆栈。配置 Microsoft Entra ID 服务并集成 Amazon Cognito 用户池。部署 ALB CloudFormation 堆栈。使用 Microsoft Entra ID 用户凭证登录 Amazon MWAA。前提条件
在开始之前,请确保您具备以下前提条件:
一个有效的 AWS 账户有权限部署 AWS CloudFormation 堆栈资源的 IAM 权限一个 Microsoft Azure 账户,用于创建 Microsoft Entra ID 应用IdP 配置和 Microsoft Entra ID P2。在部署基础设施的 AWS 区域内拥有 ALB 的公有证书和相关的自定义域名。创建 S3 存储桶
此步骤我们创建一个 S3 存储桶来存放 Airflow DAG、pluginszip 文件中的自定义插件和 requirementstxt 文件中的 Python 依赖项。该存储桶由 Amazon MWAA 环境用来获取 DAG 和依赖文件。
在 Amazon S3 控制台中,选择要创建存储桶的区域。在导航面板中选择 存储桶。选择 创建存储桶。对于 存储桶类型,选择 一般目的。在 存储桶名称中输入您的存储桶名称在此帖子中我们使用 mwaassoblog。选择 创建存储桶。导航到存储桶,选择 创建文件夹。在 文件夹名称中,输入一个名称在本帖中我们将文件夹命名为 dags。选择 创建文件夹。将证书导入 ACM
ACM 与弹性负载均衡ALB集成。在此步骤中,您可以使用 ACM 请求一个 公有证书 或 将证书导入 到 ACM。要将与自定义 DNS 关联的组织证书导入 ACM,必须提供证书及其私钥。要导入非 AWS 证书颁发机构CA签名的证书,您也必须包含证书的私钥和公钥。
在 ACM 控制台上,选择导航面板中的 导入证书。在 证书主体中,输入 certpem 文件的内容。在 证书私钥中,输入 privatekeypem 文件的内容。选择 下一步。选择 审核 和 导入。查看证书的元数据并选择 导入。导入成功后,导入证书的状态将显示为 已签发。
创建 Azure AD 服务、用户、组和企业应用
对于与 Azure 的 SSO 集成,需要创建一个企业应用,它作为 SAML 流的 IdP。我们为该应用添加相关用户和组,并配置 SPAmazon Cognito详细信息。
Airflow 提供五个默认角色:Public、Admin、Op、User、Viewer。在本帖子中,我们重点关注三种角色:Admin、User 和 Viewer。我们创建这三种角色和相应的用户,并进行适当的成员分配。
登录 Azure 门户。导航到 企业应用 并选择 新应用。输入应用名称例如 mwaaenvironment并选择创建。您现在可以查看应用的详细信息。
接下来创建两个组。
在搜索栏中,搜索 Microsoft Entra ID。在 添加 菜单上,选择 组。对于 组类型,选择一个类型本帖使用 安全。输入组名称例如 airflowadmins和描述。选择 创建。重复上述步骤创建另外两个组,命名为 airflowusers 和 airflowviewers。记下每个组的对象 ID稍后将需要。接下来创建用户。
在 概述 页面,选择 添加 菜单,选择 用户 和 创建新用户。输入用户名称例如 mwaauser、显示名称和密码。选择 审核 创建。重复上述步骤创建名为 mwaaadmin 的用户。在 airflowusers 组的详细页面中,选择导航面板中的 成员。选择 添加成员。搜索并选择您创建的用户,然后选择 选择。重复上述步骤将用户添加到每个组。导航到您的应用并选择分配用户和组。选择 添加用户/组。搜索并选择您创建的组,然后选择 选择。部署 Amazon MWAA 环境堆栈
对于该解决方案,我们提供两个 CloudFormation 模板,用于设置架构中展示的服务。部署 CloudFormation 堆栈会产生 AWS 使用费用。
第一个 CloudFormation 堆栈创建以下资源:
一个 VPC,包含两个公有子网和三个私有子网及相关路由表、NAT 网关、互联网网关和安全组Amazon MWAA 环境所需的 VPC 端点一个 Amazon Cognito 用户池和用户池域名应用负载均衡器按照以下步骤部署堆栈:
选择 启动堆栈 启动 CloudFormation 堆栈。
对于 堆栈名称,输入一个名称例如 ssoblogmwaainfrastack。
输入以下参数:
对于 MWAAEnvironmentName,输入环境名称。
对于 MwaaS3Bucket,输入您创建的 S3 构件存储桶。
对于 VpcCIDR,输入此 VPC 指定的 IP 范围CIDR 表示法。
对于 PrivateSubnet1CIDR,输入第一个可用区的私有子网 IP 范围CIDR 表示法。
对于 PrivateSubnet2CIDR,输入第二个可用区的私有子网 IP 范围CIDR 表示法。
对于 PrivateSubnet3CIDR,输入第三个可用区的私有子网 IP 范围CIDR 表示法。
对于 PublicSubnet1CIDR,输入第一个可用区的公有子网 IP 范围CIDR 表示法。
对于 PublicSubnet2CIDR,输入第二个可用区的公有子网 IP 范围CIDR 表示法。
选择 下一步。
审核模板并选择 创建堆栈。堆栈成功部署后,您可以在 AWS CloudFormation 控制台的堆栈输出选项卡上查看资源。注意 ALB URL、Amazon Cognito 用户池 ID 和域名。

将 Amazon MWAA 应用与 Azure 企业应用集成
接下来,通过添加 SP 详细信息和重定向 URL在此情况下是 Amazon Cognito 详细信息和 ALB URL配置企业应用中的 SAML 配置。
在 Azure 门户中,导航到您的环境。选择设置 单点登录。对于 标识符,输入 urnamazoncognitosplt你的 cognito useridgt。对于 回复 URL,输入 https//lt你的用户池域名gt/saml2/idpresponse。对于 单点登录 URL,输入 https//lt你的应用负载均衡器 DNSgt