本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
访问亚马逊MWAA环境
要使用适用于 Apache Airflow 的亚马逊托管工作流程,您必须使用具有必要权限的账户和IAM实体。本主题介绍您可以为适用于 Apache Airflow 的亚马逊托管工作流环境的 Apache Airflow 开发团队和 Apache Airflow 用户附加的访问策略。
我们建议使用临时凭证并使用群组和角色配置联合身份来访问您的 Amazon MWAA 资源。最佳做法是避免将策略直接附加到您的IAM用户,而是定义群组或角色以提供对 Amazon 资源的临时访问权限。
IAM角色是您可以在账户中创建的具有特定权限的IAM身份。IAM角色与IAM用户的相似之处在于,它是一个 Amazon 身份,其权限策略决定了该身份可以做什么和不能做什么 Amazon。但是,角色旨在让需要它的任何人代入,而不是唯一地与某个人员关联。此外,角色没有关联的标准长期凭证(如密码或访问密钥)。相反,当您代入角色时,它会为您提供角色会话的临时安全凭证。
要向联合身份分配权限,您可以创建角色并为角色定义权限。当联合身份进行身份验证时,该身份将与角色相关联并被授予由此角色定义的权限。有关用于联合身份验证的角色的信息,请参阅《IAM用户指南》中的为第三方身份提供商(联合)创建角色。
您可以使用账户中的IAM角色授予其他访问您账户资源的 Amazon Web Services 账户 权限。有关示例,请参阅《IAM用户指南》中的教程: Amazon Web Services 账户 使用IAM角色委派访问权限。
Sections
- 工作方式
- 完整的控制台访问策略:A mazonMWAAFull ConsoleAccess
- 完全访问API和控制台访问策略:A mazonMWAAFull ApiAccess
- 只读控制台访问策略:A mazonMWAARead OnlyAccess
- Apache Airflow 用户界面访问策略:A mazonMWAAWeb ServerAccess
- Apache Airflow Rest API 访问策略:A mazonMWAARest APIAccess
- Apache Airflow CLI 策略:A mazonMWAAAirflow CliAccess
- 创建JSON策略
- 将策略附加到开发者群组的示例用例
- 接下来做什么?
工作方式
并非所有 Amazon Identity and Access Management (IAM) 实体都无法访问在 Amazon MWAA 环境中使用的资源和服务。您必须创建一个策略,授予 Apache Airflow 用户访问这些资源的权限。例如,您需要向 Apache Airflow 开发团队授予访问权限。
Amazon MWAA 使用这些策略来验证用户是否具有在 Amazon 控制台上或通过环境APIs使用的执行操作所需的权限。
您可以使用本主题中的JSON策略为您的 Apache Airflow 用户创建策略IAM,然后将该策略附加到中的用户、组或角色。IAM
-
答 mazonMWAAFull ConsoleAccess — 使用此策略授予在 Amazon MWAA 控制台上配置环境的权限。
-
答 mazonMWAAFull ApiAccess — 使用此政策向所有MWAAAPIs用于管理环境的 Amazon 授予访问权限。
-
答 mazonMWAARead OnlyAccess — 使用此策略授予访问权限,以便在 Amazon MWAA 控制台上查看环境使用的资源。
-
答 mazonMWAAWeb ServerAccess — 使用此策略授予对 Apache Airflow Web 服务器的访问权限。
-
A mazonMWAAAirflow CliAccess — 使用此策略授予运行 Apache Airflow CLI 命令的访问权限。
要提供访问权限,请为您的用户、组或角色添加权限:
-
IAM通过身份提供商管理的用户:
创建适用于身份联合验证的角色。按照《IAM用户指南》中为第三方身份提供商创建角色(联合)中的说明进行操作。
-
IAM用户:
-
创建您的用户可以担任的角色。按照《用户指南》中为IAM用户创建角色中的IAM说明进行操作。
-
(不推荐使用)将策略直接附加到用户或将用户添加到用户组。按照《用户指南》中向用户(控制台)添加权限中的IAM说明进行操作。
-
完整的控制台访问策略:A mazonMWAAFull ConsoleAccess
如果用户需要在 Amazon MWAA 控制台上配置环境,则可能需要访问AmazonMWAAFullConsoleAccess
权限策略。
注意
完整控制台访问策略必须包含执行 iam:PassRole
的权限。这允许用户将与服务相关的角色和执行角色传递给 Amazon MWAA。Amazon MWAA 承担每个角色都是为了代表您拨打其他 Amazon 服务。以下示例使用iam:PassedToService
条件键将 Amazon MWAA 服务委托人 (airflow.amazonaws.com
) 指定为可以向其传递角色的服务。
有关的更多信息iam:PassRole
,请参阅《用户指南》中的授予IAM用户向 Amazon 服务传递角色的权限。
如果您想使用静态加密来创建和管理您的 Amazon MWAA 环境,请使用以下策略。Amazon 拥有的密钥
{ "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委托人必须有权使用存储在您账户中的密钥访问 Amazon 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和控制台访问策略:A mazonMWAAFull ApiAccess
如果用户需要访问MWAAAPIs用于管理环境的所有 Amazon,则可能需要访问AmazonMWAAFullApiAccess
权限策略。它不授予访问 Apache Airflow UI 的权限。
注意
完全API访问策略必须包含执行权限iam:PassRole
。这允许用户将与服务相关的角色和执行角色传递给 Amazon MWAA。Amazon MWAA 承担每个角色都是为了代表您拨打其他 Amazon 服务。以下示例使用iam:PassedToService
条件键将 Amazon MWAA 服务委托人 (airflow.amazonaws.com
) 指定为可以向其传递角色的服务。
有关的更多信息iam:PassRole
,请参阅《用户指南》中的授予IAM用户向 Amazon 服务传递角色的权限。
如果您想使用静态加密来创建和管理您的 Amazon MWAA 环境,请使用以下策略。 Amazon 拥有的密钥
{ "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委托人必须有权使用存储在您账户中的密钥访问 Amazon 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
只读控制台访问策略:A mazonMWAARead OnlyAccess
如果用户需要在 Amazon MWAA 控制台环境详情页面上查看环境使用的资源,则可能需要访问AmazonMWAAReadOnlyAccess
权限策略。它不允许用户创建新环境、编辑现有环境或允许用户查看 Apache Airflow UI。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "airflow:ListEnvironments", "airflow:GetEnvironment", "airflow:ListTagsForResource" ], "Resource": "*" } ] }
Apache Airflow 用户界面访问策略:A mazonMWAAWeb ServerAccess
如果用户需要访问 Apache Airflow UI,则可能需要访问 AmazonMWAAWebServerAccess
权限策略。它不允许用户在亚马逊MWAA控制台上查看环境或使用亚马逊MWAAAPIs执行任何操作。在 {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}
" ] } ] }
注意
-
亚马逊MWAA提供与五个默认的 Apache Airflow 基于角色的访问控制 () RBAC
角色的IAM集成。有关使用自定义 Apache Airflow 角色的更多信息,请参阅 教程:限制 Amazon MWAA 用户对部分 DAG 的访问权限。 -
此策略中的
Resource
字段可用于为亚马逊环境指定基于 Apache Airflow 角色的访问控制角色。MWAA但是,在政策Resource
领域,它不支持亚马逊MWAA环境ARN(亚马逊资源名称)。
Apache Airflow Rest API 访问策略:A mazonMWAARest APIAccess
要访问 Apache Airflow RESTAPI,您必须在策略中授予airflow:InvokeRestApi
权限。IAM在以下策略示例中,在 {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 服务器时,无法从虚拟私有云外部调用该
InvokeRestApi
操作 (VPC)。您可以使用aws:SourceVpc
键对此操作执行更精细的访问控制。有关更多信息,请参阅 aw s:SourceVpc-
此策略中的
Resource
字段可用于为亚马逊环境指定基于 Apache Airflow 角色的访问控制角色。MWAA但是,在政策Resource
领域,它不支持亚马逊MWAA环境ARN(亚马逊资源名称)。
Apache Airflow CLI 策略:A mazonMWAAAirflow CliAccess
如果用户需要运行 Apache Airflow CLI 命令(例如trigger_dag
),则可能需要访问AmazonMWAAAirflowCliAccess
权限策略。它不允许用户在亚马逊MWAA控制台上查看环境或使用亚马逊MWAAAPIs执行任何操作。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "airflow:CreateCliToken" ], "Resource": "arn:aws:airflow:${Region}:${Account}:environment/${EnvironmentName}" } ] }
创建JSON策略
您可以创建JSON策略,然后在IAM控制台上将该策略附加到您的用户、角色或群组。以下步骤介绍如何在中创建JSON策略IAM。
创建 JSON 策略
-
在IAM控制台上打开 “策略” 页面
。 -
选择创建策略。
-
选择JSON选项卡。
-
添加您的JSON保单。
-
选择查看策略。
-
在名称和描述(可选)文本字段中各输入一个值。
例如,您可以将策略命名为
AmazonMWAAReadOnlyAccess
。 -
选择创建策略。
将策略附加到开发者群组的示例用例
假设您正在使用IAM名为AirflowDevelopmentGroup
的群组向 Apache Airflow 开发团队中的所有开发人员应用权限。这些用户需要访问 AmazonMWAAFullConsoleAccess
、AmazonMWAAAirflowCliAccess
和 AmazonMWAAWebServerAccess
权限策略。本节介绍如何在中创建群组IAM、创建和附加这些策略以及如何将该群组与IAM用户关联。这些步骤假设您使用的是 Amazon 自有密钥。
创建 A mazonMWAAFull ConsoleAccess 策略
-
在IAM控制台上打开 “策略” 页面
。 -
选择创建策略。
-
选择JSON选项卡。
-
粘贴JSON政策
AmazonMWAAFullConsoleAccess
。 -
替换以下值:
-
{your-account-id}
— 您的 Amazon 账户 ID(例如0123456789
) -
{your-kms-id}
— 客户托管密钥的唯一标识符,仅当您使用客户托管密钥进行静态加密时才适用。
-
-
选择查看策略。
-
在名称中键入
AmazonMWAAFullConsoleAccess
。 -
选择创建策略。
创建 A mazonMWAAWeb ServerAccess 策略
-
在IAM控制台上打开 “策略” 页面
。 -
选择创建策略。
-
选择JSON选项卡。
-
粘贴JSON政策
AmazonMWAAWebServerAccess
。 -
替换以下值:
-
{your-region}
— 您的 Amazon MWAA 环境所在的地区(例如us-east-1
) -
{your-account-id}
— 您的 Amazon 账户 ID(例如0123456789
) -
{your-environment-name}
— 您的亚马逊MWAA环境名称(例如MyAirflowEnvironment
) -
{airflow-role}
—Admin
Apache 气流默认角色
-
-
选择查看策略。
-
在名称中键入
AmazonMWAAWebServerAccess
。 -
选择创建策略。
创建 A mazonMWAAAirflow CliAccess 策略
-
在IAM控制台上打开策略页面
。 -
选择创建策略。
-
选择JSON选项卡。
-
粘贴JSON政策
AmazonMWAAAirflowCliAccess
。 -
选择查看策略。
-
在名称中键入
AmazonMWAAAirflowCliAccess
。 -
选择创建策略。
要创建群组,执行以下操作
-
在IAM控制台上打开群组页面
。 -
键入
AirflowDevelopmentGroup
的名称。 -
选择下一步。
-
在筛选中键入
AmazonMWAA
来筛选结果。 -
选择您创建的三个策略。
-
选择下一步。
-
选择创建组。
要与用户关联,请执行以下操作
-
在IAM控制台上打开 “用户” 页面
。 -
选择一个用户。
-
选择组。
-
选择将用户添加到各群组。
-
选择AirflowDevelopmentGroup。
-
然后选择添加到组。
接下来做什么?
-
要了解如何生成令牌以访问 Apache Airflow UI,请参阅 访问 Apache Airflow。
-
要详细了解如何创建IAM策略,请参阅创建IAM策略。