访问亚马逊MWAA环境 - Amazon Managed Workflows for Apache Airflow
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

访问亚马逊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角色委派访问权限

工作方式

并非所有 Amazon Identity and Access Management (IAM) 实体都无法访问在 Amazon MWAA 环境中使用的资源和服务。您必须创建一个策略,授予 Apache Airflow 用户访问这些资源的权限。例如,您需要向 Apache Airflow 开发团队授予访问权限。

Amazon MWAA 使用这些策略来验证用户是否具有在 Amazon 控制台上或通过环境APIs使用的执行操作所需的权限。

您可以使用本主题中的JSON策略为您的 Apache Airflow 用户创建策略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:*:YOUR_ACCOUNT_ID:key/YOUR_KMS_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/*" ] } ] }

只读控制台访问策略: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} 中指定 AdminOpUserViewerPublic 角色以自定义 Web 令牌用户的访问级别。有关更多信息,请参阅《Apache Airflow 参考指南》中的默认角色

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "airflow:CreateWebLoginToken", "Resource": [ "arn:aws:airflow:{your-region}:YOUR_ACCOUNT_ID:role/{your-environment-name}/{airflow-role}" ] } ] }
注意

Apache Airflow Rest API 访问策略:A mazonMWAARest APIAccess

要访问 Apache Airflow RESTAPI,您必须在策略中授予airflow:InvokeRestApi权限。IAM在以下策略示例中,在 {airflow-role} 中指定 AdminOpUserViewerPublic 角色以自定义用户访问权限级别。有关更多信息,请参阅《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 策略
  1. 在IAM控制台上打开 “策略” 页面

  2. 选择创建策略

  3. 选择JSON选项卡。

  4. 添加您的JSON保单。

  5. 选择查看策略

  6. 名称描述(可选)文本字段中各输入一个值。

    例如,您可以将策略命名为 AmazonMWAAReadOnlyAccess

  7. 选择创建策略

将策略附加到开发者群组的示例用例

假设您正在使用IAM名为AirflowDevelopmentGroup的群组向 Apache Airflow 开发团队中的所有开发人员应用权限。这些用户需要访问 AmazonMWAAFullConsoleAccessAmazonMWAAAirflowCliAccessAmazonMWAAWebServerAccess 权限策略。本节介绍如何在中创建群组IAM、创建和附加这些策略以及如何将该群组与IAM用户关联。这些步骤假设您使用的是 Amazon 自有密钥

创建 A mazonMWAAFull ConsoleAccess 策略
  1. 下载 A mazonMWAAFull ConsoleAccess 访问策略

  2. 在IAM控制台上打开 “策略” 页面

  3. 选择创建策略

  4. 选择JSON选项卡。

  5. 粘贴JSON政策AmazonMWAAFullConsoleAccess

  6. 替换以下值:

    1. {your-account-id} — 您的 Amazon 账户 ID(例如0123456789

    2. {your-kms-id} — 客户托管密钥的唯一标识符,仅当您使用客户托管密钥进行静态加密时才适用。

  7. 选择查看策略

  8. 名称中键入 AmazonMWAAFullConsoleAccess

  9. 选择创建策略

创建 A mazonMWAAWeb ServerAccess 策略
  1. 下载 A mazonMWAAWeb ServerAccess 访问策略

  2. 在IAM控制台上打开 “策略” 页面

  3. 选择创建策略

  4. 选择JSON选项卡。

  5. 粘贴JSON政策AmazonMWAAWebServerAccess

  6. 替换以下值:

    1. {your-region} — 您的 Amazon MWAA 环境所在的地区(例如us-east-1

    2. {your-account-id} — 您的 Amazon 账户 ID(例如0123456789

    3. {your-environment-name} — 您的亚马逊MWAA环境名称(例如MyAirflowEnvironment

    4. {airflow-role} Admin Apache 气流默认角色

  7. 选择查看策略

  8. 名称中键入 AmazonMWAAWebServerAccess

  9. 选择创建策略

创建 A mazonMWAAAirflow CliAccess 策略
  1. 下载 A mazonMWAAAirflow CliAccess 访问策略

  2. 在IAM控制台上打开策略页面

  3. 选择创建策略

  4. 选择JSON选项卡。

  5. 粘贴JSON政策AmazonMWAAAirflowCliAccess

  6. 选择查看策略

  7. 名称中键入 AmazonMWAAAirflowCliAccess

  8. 选择创建策略

要创建群组,执行以下操作
  1. 在IAM控制台上打开群组页面

  2. 键入 AirflowDevelopmentGroup 的名称。

  3. 选择下一步

  4. 筛选中键入 AmazonMWAA 来筛选结果。

  5. 选择您创建的三个策略。

  6. 选择下一步

  7. 选择创建组

要与用户关联,请执行以下操作
  1. 在IAM控制台上打开 “用户” 页面

  2. 选择一个用户。

  3. 选择

  4. 选择将用户添加到各群组

  5. 选择AirflowDevelopmentGroup

  6. 然后选择添加到组

接下来做什么?