访问 Amazon MWAA 环境
要使用 Amazon MWAA,您必须使用账户和具有必要权限的 IAM 实体。本页介绍了您可以为 Amazon MWAA 环境的 Apache Airflow 开发团队和 Apache Airflow 用户附加的访问策略。
我们建议使用临时凭证并使用群组和角色配置联合身份来访问 Amazon MWAA 资源。最佳实践是,避免将策略直接附加到 IAM 用户,而是定义群组或角色以提供对 AWS 资源的临时访问权限。
IAM 角色是可在账户中创建的一种具有特定权限的 IAM 身份。IAM 角色类似于 IAM 用户,因为它是一个 AWS 身份,具有确定其在 AWS 中可执行和不可执行的操作的权限策略。但是,角色旨在让需要它的任何人代入,而不是唯一地与某个人员关联。此外,角色没有关联的标准长期凭证(如密码或访问密钥)。相反,当您代入角色时,它会为您提供角色会话的临时安全凭证。
要向联合身份分配权限,您可以创建角色并为角色定义权限。当联合身份进行身份验证时,该身份将与角色相关联并被授予由此角色定义的权限。有关联合身份验证的角色的信息,请参阅《IAM 用户指南》中的为第三方身份提供商创建角色。如果您使用 IAM Identity Center,则需要配置权限集。为控制您的身份在进行身份验证后可以访问的内容,IAM Identity Center 将权限集与 IAM 中的角色相关联。有关权限集的信息,请参阅《AWS IAM Identity Center 用户指南》中的权限集。
您可以使用账户中的 IAM 角色授予另一个 AWS 账户 对您账户资源的访问权限。有关示例,请参阅《IAM 用户指南》中的教程:使用 IAM 角色委派跨 AWS 账户 的访问权限。
Sections
工作方式
并非所有 AWS Identity and Access Management (IAM) 实体都无法访问 Amazon MWAA 环境中使用的资源和服务。您必须创建一个策略,授予 Apache Airflow 用户访问这些资源的权限。例如,您需要向 Apache Airflow 开发团队授予访问权限。
Amazon MWAA 使用这些策略来验证用户是否具有在 AWS 控制台上或通过环境使用的 API 执行操作所需的权限。
您可以使用本主题中的 JSON 策略在 IAM 中为 Apache Airflow 用户创建一个策略,然后将该策略附加到 IAM 中的用户、群组或角色。
-
AmazonMWAAFullConsoleAccess — 使用此策略授予在 Amazon MWAA 控制台上配置环境的权限。
-
AmazonMWAAFullApiAccess— 使用此策略授予访问用于管理环境的所有Amazon MWAA API 的权限。
-
AmazonMWAAReadOnlyAccess — 使用此策略授予在 Amazon MWAA 控制台上查看环境使用的资源的访问权限。
-
AmazonMWAAWebServerAccess — 使用此策略授予对 Apache Airflow Web 服务器的访问权限。
-
AmazonMWAAAirflowCliAccess — 使用此策略授予运行 Apache Airflow CLI 命令的访问权限。
要提供访问权限,请为用户、组或角色添加权限:
-
AWS IAM Identity Center 中的用户和群组:
创建权限集合。按照《AWS IAM Identity Center 用户指南》中创建权限集的说明进行操作。
-
通过身份提供商在 IAM 中托管的用户:
创建适用于身份联合验证的角色。按照《IAM 用户指南》中为第三方身份提供商创建角色(联合身份验证)的说明进行操作。
-
IAM 用户:
-
创建您的用户可以担任的角色。按照《IAM 用户指南》中为 IAM 用户创建角色的说明进行操作。
-
(不推荐使用)将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》中向用户添加权限(控制台)中的说明进行操作。
-
完整控制台访问策略:AmazonMWAAFullConsoleAccess
如果用户需要在 Amazon MWAA 控制台上配置环境,则可能需要访问 AmazonMWAAFullConsoleAccess
权限策略。
注意
完整控制台访问策略必须包含执行 iam:PassRole
的权限。这允许用户将与服务相关的角色和执行角色传递给 Amazon MWAA。Amazon MWAA 担任每个角色以代表您调用其他 AWS 服务。以下示例使用 iam:PassedToService
条件键将 Amazon MWAA 服务主体 (airflow.amazonaws.com
) 指定为可将角色传递到的服务。
有关 iam:PassRole
的更多信息,请参阅《IAM 用户指南》中的向用户授予将角色传递给 AWS 服务的权限。
如果您想使用静态加密的 AWS 拥有的密钥 来创建和管理 Amazon MWAA 环境,请使用以下策略。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"airflow:*", "Resource":"*" }, { "Effect":"Allow", "Action":[ "iam:PassRole" ], "Resource":"*", "Condition":{ "StringLike":{ "iam:PassedToService":"airflow.amazonaws.com" } } }, { "Effect":"Allow", "Action":[ "iam:ListRoles" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "iam:CreatePolicy" ], "Resource":"arn:aws:iam::
YOUR_ACCOUNT_ID
:policy/service-role/MWAA-Execution-Policy*" }, { "Effect":"Allow", "Action":[ "iam:AttachRolePolicy", "iam:CreateRole" ], "Resource":"arn:aws:iam::YOUR_ACCOUNT_ID
:role/service-role/AmazonMWAA*" }, { "Effect":"Allow", "Action":[ "iam:CreateServiceLinkedRole" ], "Resource":"arn:aws:iam::*:role/aws-service-role/airflow.amazonaws.com/AWSServiceRoleForAmazonMWAA" }, { "Effect":"Allow", "Action":[ "s3:GetBucketLocation", "s3:ListAllMyBuckets", "s3:ListBucket", "s3:ListBucketVersions" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "s3:CreateBucket", "s3:PutObject", "s3:GetEncryptionConfiguration" ], "Resource":"arn:aws:s3:::*" }, { "Effect":"Allow", "Action":[ "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeRouteTables" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "ec2:AuthorizeSecurityGroupIngress", "ec2:CreateSecurityGroup" ], "Resource":"arn:aws:ec2:*:*:security-group/airflow-security-group-*" }, { "Effect":"Allow", "Action":[ "kms:ListAliases" ], "Resource":"*" }, { "Effect":"Allow", "Action":"ec2:CreateVpcEndpoint", "Resource":[ "arn:aws:ec2:*:*:vpc-endpoint/*", "arn:aws:ec2:*:*:vpc/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Effect":"Allow", "Action":[ "ec2:CreateNetworkInterface" ], "Resource":[ "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:network-interface/*" ] } ] }
如果您想使用静态加密的由客户托管的密钥来创建和管理 Amazon MWAA 环境,请使用以下策略。要使用由客户托管的密钥,IAM 主体必须有权使用存储在您账户中的密钥访问 AWS KMS 资源。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"airflow:*", "Resource":"*" }, { "Effect":"Allow", "Action":[ "iam:PassRole" ], "Resource":"*", "Condition":{ "StringLike":{ "iam:PassedToService":"airflow.amazonaws.com" } } }, { "Effect":"Allow", "Action":[ "iam:ListRoles" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "iam:CreatePolicy" ], "Resource":"arn:aws:iam::
YOUR_ACCOUNT_ID
:policy/service-role/MWAA-Execution-Policy*" }, { "Effect":"Allow", "Action":[ "iam:AttachRolePolicy", "iam:CreateRole" ], "Resource":"arn:aws:iam::YOUR_ACCOUNT_ID
:role/service-role/AmazonMWAA*" }, { "Effect":"Allow", "Action":[ "iam:CreateServiceLinkedRole" ], "Resource":"arn:aws:iam::*:role/aws-service-role/airflow.amazonaws.com/AWSServiceRoleForAmazonMWAA" }, { "Effect":"Allow", "Action":[ "s3:GetBucketLocation", "s3:ListAllMyBuckets", "s3:ListBucket", "s3:ListBucketVersions" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "s3:CreateBucket", "s3:PutObject", "s3:GetEncryptionConfiguration" ], "Resource":"arn:aws:s3:::*" }, { "Effect":"Allow", "Action":[ "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeRouteTables" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "ec2:AuthorizeSecurityGroupIngress", "ec2:CreateSecurityGroup" ], "Resource":"arn:aws:ec2:*:*:security-group/airflow-security-group-*" }, { "Effect":"Allow", "Action":[ "kms:ListAliases" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "kms:DescribeKey", "kms:ListGrants", "kms:CreateGrant", "kms:RevokeGrant", "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*", "kms:ReEncrypt*" ], "Resource":"arn:aws:kms:*:YOUR_ACCOUNT_ID
:key/YOUR_KMS_ID
" }, { "Effect":"Allow", "Action":"ec2:CreateVpcEndpoint", "Resource":[ "arn:aws:ec2:*:*:vpc-endpoint/*", "arn:aws:ec2:*:*:vpc/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Effect":"Allow", "Action":[ "ec2:CreateNetworkInterface" ], "Resource":[ "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:network-interface/*" ] } ] }
完整的 API 和控制台访问策略:AmazonMWAAFullApiAccess
如果用户需要访问用于管理环境的所有 Amazon MWAA API,则可能需要访问 AmazonMWAAFullApiAccess
权限策略。它不授予访问 Apache Airflow UI 的权限。
注意
完整 API 访问策略必须包含执行 iam:PassRole
的权限。这允许用户将与服务相关的角色和执行角色传递给 Amazon MWAA。Amazon MWAA 担任每个角色以代表您调用其他 AWS 服务。以下示例使用 iam:PassedToService
条件键将 Amazon MWAA 服务主体 (airflow.amazonaws.com
) 指定为可将角色传递到的服务。
有关 iam:PassRole
的更多信息,请参阅《IAM 用户指南》中的向用户授予将角色传递给 AWS 服务的权限。
如果您想使用静态加密的 AWS 拥有的密钥 来创建和管理 Amazon MWAA 环境,请使用以下策略。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"airflow:*", "Resource":"*" }, { "Effect":"Allow", "Action":[ "iam:PassRole" ], "Resource":"*", "Condition":{ "StringLike":{ "iam:PassedToService":"airflow.amazonaws.com" } } }, { "Effect":"Allow", "Action":[ "iam:CreateServiceLinkedRole" ], "Resource":"arn:aws:iam::*:role/aws-service-role/airflow.amazonaws.com/AWSServiceRoleForAmazonMWAA" }, { "Effect":"Allow", "Action":[ "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeRouteTables" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "s3:GetEncryptionConfiguration" ], "Resource":"arn:aws:s3:::*" }, { "Effect":"Allow", "Action":"ec2:CreateVpcEndpoint", "Resource":[ "arn:aws:ec2:*:*:vpc-endpoint/*", "arn:aws:ec2:*:*:vpc/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Effect":"Allow", "Action":[ "ec2:CreateNetworkInterface" ], "Resource":[ "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:network-interface/*" ] } ] }
如果您想使用静态加密的由客户托管的密钥来创建和管理 Amazon MWAA 环境,请使用以下策略。要使用由客户托管的密钥,IAM 主体必须有权使用存储在您账户中的密钥访问 AWS KMS 资源。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"airflow:*", "Resource":"*" }, { "Effect":"Allow", "Action":[ "iam:PassRole" ], "Resource":"*", "Condition":{ "StringLike":{ "iam:PassedToService":"airflow.amazonaws.com" } } }, { "Effect":"Allow", "Action":[ "iam:CreateServiceLinkedRole" ], "Resource":"arn:aws:iam::*:role/aws-service-role/airflow.amazonaws.com/AWSServiceRoleForAmazonMWAA" }, { "Effect":"Allow", "Action":[ "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeRouteTables" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "kms:DescribeKey", "kms:ListGrants", "kms:CreateGrant", "kms:RevokeGrant", "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*", "kms:ReEncrypt*" ], "Resource":"arn:aws:kms:*:
:key/
YOUR_ACCOUNT_ID
" }, { "Effect":"Allow", "Action":[ "s3:GetEncryptionConfiguration" ], "Resource":"arn:aws:s3:::*" }, { "Effect":"Allow", "Action":"ec2:CreateVpcEndpoint", "Resource":[ "arn:aws:ec2:*:*:vpc-endpoint/*", "arn:aws:ec2:*:*:vpc/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Effect":"Allow", "Action":[ "ec2:CreateNetworkInterface" ], "Resource":[ "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:network-interface/*" ] } ] }
YOUR_KMS_ID
只读控制台访问策略:AmazonMWAAReadOnlyAccess
如果用户需要查看在 Amazon MWAA 控制台上所用的资源,则可能需要访问 AmazonMWAAReadOnlyAccess
权限策略。它不允许用户创建新环境、编辑现有环境或允许用户查看 Apache Airflow UI。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "airflow:ListEnvironments", "airflow:GetEnvironment", "airflow:ListTagsForResource" ], "Resource": "*" } ] }
Apache Airflow UI 访问策略:AmazonMWAAWebServerAccess
如果用户需要访问 Apache Airflow UI,则可能需要访问 AmazonMWAAWebServerAccess
权限策略。它不允许用户在 Amazon MWAA 控制台上查看环境或使用 Amazon MWAA API 执行任何操作。在 {airflow-role}
中指定 Admin
、Op
、User
、Viewer
或 Public
角色以自定义 Web 令牌用户的访问级别。有关更多信息,请参阅《Apache Airflow 参考指南》中的默认角色
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "airflow:CreateWebLoginToken", "Resource": [ "arn:aws:airflow:
{your-region}
::role/
YOUR_ACCOUNT_ID
{your-environment-name}
/{airflow-role}
" ] } ] }
注意
-
Amazon MWAA 将 IAM 集成到五个默认 Amazon Airflow 基于角色的访问控制 (RBAC) 角色
。有关使用自定义 Apache Airflow 角色的更多信息,请参阅 教程:限制 Amazon MWAA 用户对部分 DAG 的访问权限。 -
此策略中的
Resource
字段可用于为 Amazon MWAA 环境指定 Apache Airflow 基于角色的访问控制角色。但不支持在策略的Resource
字段中使用 Amazon MWAA 环境 ARN(Amazon 资源名称)。
Apache Airflow Rest API 访问策略:AmazonMWAARestAPIAccess
要访问 Apache Airflow REST API,您必须在 IAM 策略中授予 airflow:InvokeRestApi
权限。在以下策略示例中,在 {airflow-role}
中指定 Admin
、Op
、User
、Viewer
或 Public
角色以自定义用户访问权限级别。有关更多信息,请参阅《Apache Airflow 参考指南》中的默认角色
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowMwaaRestApiAccess", "Effect": "Allow", "Action": "airflow:InvokeRestApi", "Resource": [ "arn:aws:airflow:{your-region}:YOUR_ACCOUNT_ID:role/{your-environment-name}/{airflow-role}" ] } ] }
注意
配置私有 Web 服务器时,无法从虚拟私有云(VPC)之外调用
InvokeRestApi
操作。您可以使用aws:SourceVpc
键对此操作执行更精细的访问控制。有关更多信息,请参阅 aws:SourceVpc-
此策略中的
Resource
字段可用于为 Amazon MWAA 环境指定 Apache Airflow 基于角色的访问控制角色。但不支持在策略的Resource
字段中使用 Amazon MWAA 环境 ARN(Amazon 资源名称)。
Apache Airflow CLI 策略:AmazonMWAAAirflowCliAccess
如果用户需要运行 Apache Airflow CLI 命令(例如 trigger_dag
),则可能需要访问 AmazonMWAAAirflowCliAccess
权限策略。它不允许用户在 Amazon MWAA 控制台上查看环境或使用 Amazon MWAA API 执行任何操作。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "airflow:CreateCliToken" ], "Resource": "arn:aws:airflow:${Region}:${Account}:environment/${EnvironmentName}" } ] }
创建 JSON 策略
您可以创建 JSON 策略,并将策略附加到 IAM 控制台上的用户、角色或群组。以下步骤介绍如何在 IAM 中创建 JSON 策略。
要创建 JSON 策略,请执行以下操作
-
在 IAM 控制台中打开策略页面
。 -
选择创建策略。
-
选择 JSON 选项卡。
-
添加 JSON 策略。
-
选择查看策略。
-
在名称和描述(可选)文本字段中各输入一个值。
例如,您可以将策略命名为
AmazonMWAAReadOnlyAccess
。 -
选择创建策略。
将策略附加到开发者群组的示例用例
假设您在 IAM 中使用一个名为 AirflowDevelopmentGroup
的群组来向 Apache Airflow 开发团队中的所有开发人员授予权限。这些用户需要访问 AmazonMWAAFullConsoleAccess
、AmazonMWAAAirflowCliAccess
和 AmazonMWAAWebServerAccess
权限策略。本节介绍如何在 IAM 中创建群组、创建和附加这些策略以及如何将该群组关联到 IAM 用户。这些步骤假设您使用的是 AWS 自有密钥。
要创建 AmazonMWAAFullConsoleAccess 策略,请执行以下操作
-
在 IAM 控制台中打开策略页面
。 -
选择创建策略。
-
选择 JSON 选项卡。
-
为
AmazonMWAAFullConsoleAccess
粘贴相应的 JSON 策略。 -
替换以下值:
-
{your-account-id}
— AWS 账户 ID(例如0123456789
) -
{your-kms-id}
— 由客户托管的密钥的唯一标识符,仅当您使用由客户托管的密钥进行静态加密时才适用。
-
-
选择查看策略。
-
在名称中键入
AmazonMWAAFullConsoleAccess
。 -
选择创建策略。
要创建 AmazonMWAAWebServerAccess 策略,请执行以下操作
-
在 IAM 控制台中打开策略页面
。 -
选择创建策略。
-
选择 JSON 选项卡。
-
为
AmazonMWAAWebServerAccess
粘贴相应的 JSON 策略。 -
替换以下值:
-
{your-region}
— Amazon MWAA 环境所在的区域(例如us-east-1
) -
{your-account-id}
— AWS 账户 ID(例如0123456789
) -
{your-environment-name}
— Amazon MWAA 环境名称(例如MyAirflowEnvironment
) -
{airflow-role}
—Admin
Apache Airflow 默认角色
-
-
选择查看策略。
-
在名称中键入
AmazonMWAAWebServerAccess
。 -
选择创建策略。
创建 Amazon mwaairflow CLI 访问策略
-
下载 AmazonmwaaaAirflowcliA ccess 访问策略。
-
在 IAM 控制台中打开策略页面
。 -
选择创建策略。
-
选择 JSON 选项卡。
-
为
AmazonMWAAAirflowCliAccess
粘贴相应的 JSON 策略。 -
选择查看策略。
-
在名称中键入
AmazonMWAAAirflowCliAccess
。 -
选择创建策略。
要创建群组,执行以下操作
-
在 IAM 控制台中打开群组页面
。 -
键入
AirflowDevelopmentGroup
的名称。 -
选择下一步。
-
在筛选中键入
AmazonMWAA
来筛选结果。 -
选择您创建的三个策略。
-
选择下一步。
-
选择创建组。
要与用户关联,请执行以下操作
-
在 IAM 控制台中打开用户页面
。 -
选择一个用户。
-
选择组。
-
选择将用户添加到各群组。
-
选择 AirflowDevelopmentGroup。
-
然后选择添加到组。
接下来做什么?
-
要了解如何生成令牌以访问 Apache Airflow UI,请参阅 访问 Apache Airflow。
-
要详细了解有关创建 IAM 策略,请参阅创建 IAM 策略。