

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

# 管理对 Amazon MWAA 环境的访问
<a name="manage-access"></a>

需要允许适用于 Apache Airflow 的亚马逊托管工作流程使用 AWS 环境使用的其他服务和资源。您还需要获得访问亚马逊 MWAA 环境和您的 Apache Airflow 用户界面的权限 (IAM)。 AWS Identity and Access Management 本节介绍用于授予环境 AWS 资源访问权限的执行角色以及如何添加权限，以及访问您的 Amazon MWAA 环境和 Apache Airflow AWS 账户 用户界面所需的权限。

**Topics**
+ [访问 Amazon MWAA 环境](access-policies.md)
+ [Amazon ECS 的服务相关角色](mwaa-slr.md)
+ [Amazon MWAA 执行角色](mwaa-create-role.md)
+ [防止跨服务混淆座席](cross-service-confused-deputy-prevention.md)
+ [Apache Airflow 访问模式](configuring-networking.md)

# 访问 Amazon MWAA 环境
<a name="access-policies"></a>

要使用 Amazon MWAA，您必须使用账户和具有必要权限的 IAM 实体。本主题介绍了您可以为 Amazon MWAA 环境的 Apache Airflow 开发团队和 Apache Airflow 用户附加的访问策略。

我们建议使用临时凭证并使用群组和角色配置联合身份来访问 Amazon MWAA 资源。最佳实践是，避免将策略直接附加到 IAM 用户。相反，可以定义组或角色以提供对 AWS 资源的临时访问权限。

 IAM [角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)是可在账户中创建的一种具有特定权限的 IAM 身份。IAM 角色与 IAM 用户类似，因为它是一个具有权限策略的 AWS 身份，该策略决定了该身份可以做什么和不能做什么 AWS。但是，角色旨在让需要它的任何人代入，而不是唯一地与某个人员关联。此外，角色没有关联的标准长期凭证（如密码或访问密钥）。相反，当你担任角色时，它会为你的角色会话提供临时安全证书。

 要向联合身份分配权限，您可以创建角色并为角色定义权限。当联合身份进行身份验证时，该身份将与角色相关联并被授予由此角色定义的权限。有关用于联合身份验证的角色的信息，请参阅《IAM 用户指南》**中的[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp.html)。如果您使用 IAM Identity Center，则需要配置权限集。为控制您的身份在进行身份验证后可以访问的内容，IAM Identity Center 将权限集与 IAM 中的角色相关联。有关权限集的信息，请参阅《AWS IAM Identity Center 用户指南》**中的[权限集](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)。

 您可以使用账户中的 IAM 角色授予其他访问您账户资源的 AWS 账户 权限。有关示例，请参阅 [IAM *用户指南中的 IAM 教程： AWS 账户 使用 IAM* 角色委派访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)。

**Topics**
+ [工作原理](#access-policies-how)
+ [完整的主机访问政策：Amazon MWAAFull ConsoleAccess](#console-full-access)
+ [完整的 API 和控制台访问政策：Amazon MWAAFull ApiAccess](#full-access-policy)
+ [只读控制台访问策略：Amazon MWAARead OnlyAccess](#mwaa-read-only)
+ [Apache Airflow 用户界面访问策略：亚马逊 MWAAWeb ServerAccess](#web-ui-access)
+ [Apache Airflow Rest API 访问政策：亚马逊 MWAARest APIAccess](#rest-api-access)
+ [Apache Airflow CLI 政策：亚马逊 MWAAAirflow CliAccess](#cli-access)
+ [创建 JSON 策略](#access-policy-iam-console-create)
+ [将策略附加到开发者群组的示例用例](#access-policy-use-case)
+ [接下来做什么？](#access-policy-next-up)

## 工作原理
<a name="access-policies-how"></a>

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

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

您可以使用本主题中的 JSON 策略在 IAM 中为 Apache Airflow 用户创建一个策略，然后将该策略附加到 IAM 中的用户、群组或角色。
+ [亚马逊 MWAAFull ConsoleAccess](#console-full-access) — 使用此策略授予在 Amazon MWAA 控制台上配置环境的权限。
+ [亚马逊 MWAAFull ApiAccess](#full-access-policy) — 使用此政策授予访问 APIs 用于管理环境的所有 Amazon MWAA 的权限。
+ [亚马逊 MWAARead OnlyAccess](#mwaa-read-only) — 使用此策略授予对亚马逊 MWAA 控制台上环境使用的资源的访问权限。
+ [亚马逊 MWAAWeb ServerAccess](#web-ui-access) — 使用此政策授予对 Apache Airflow 网络服务器的访问权限。
+ [亚马逊 MWAAAirflow CliAccess](#cli-access) — 使用此策略授予运行 Apache Airflow CLI 命令的访问权限。

要提供访问权限，请为您的用户、组或角色添加权限：
+ 中的用户和群组 AWS IAM Identity Center：

  创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

## 完整的主机访问政策：Amazon MWAAFull ConsoleAccess
<a name="console-full-access"></a>

如果用户需要在 Amazon MWAA 控制台上配置环境，则可能需要访问 `AmazonMWAAFullConsoleAccess` 权限策略。

**注意**  
完整控制台访问策略必须包含执行 `iam:PassRole` 的权限。这允许用户将[与服务相关的角色](mwaa-slr.md)和[执行角色](mwaa-create-role.md)传递给 Amazon MWAA。Amazon MWAA 扮演每个角色代表您呼叫其他 AWS 服务。以下示例使用 `iam:PassedToService` 条件键将 Amazon MWAA 服务主体 (`airflow.amazonaws.com`) 指定为可将角色传递到的服务。  
有关更多信息`iam:PassRole`，请参阅 *IAM 用户指南中的授予用户*[向 AWS 服务传递角色的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。

如果您想使用[静态加密](encryption.md#encryption-at-rest)的 [AWS 拥有的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) 来创建和管理 Amazon MWAA 环境，请使用以下策略。

### 使用 AWS 拥有的密钥
<a name="collapsible-full-console-access-aws-owned-key"></a>

------
#### [ JSON ]

****  

```
{
    "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::111122223333:policy/service-role/MWAA-Execution-Policy*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreateRole"
            ],
            "Resource": "arn:aws:iam::111122223333: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/*"
            ]
        }
    ]
}
```

------

如果您想使用静态加密的[由客户托管的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)来创建和管理 Amazon MWAA 环境，请使用以下策略。要使用客户托管密钥，IAM 委托人必须有权使用存储在您账户中的密钥访问 AWS KMS 资源。

### 使用由客户托管的密钥。
<a name="collapsible-full-console-access-cust-key"></a>

------
#### [ JSON ]

****  

```
{
    "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::111122223333:policy/service-role/MWAA-Execution-Policy*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreateRole"
            ],
            "Resource": "arn:aws:iam::111122223333: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:*:111122223333: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 和控制台访问政策：Amazon MWAAFull ApiAccess
<a name="full-access-policy"></a>

如果用户需要访问 APIs 用于管理环境的所有 Amazon MWAA，则可能需要访问`AmazonMWAAFullApiAccess`权限策略。它不授予访问 Apache Airflow UI 的权限。

**注意**  
完整 API 访问策略必须包含执行 `iam:PassRole` 的权限。这允许用户将[与服务相关的角色](mwaa-slr.md)和[执行角色](mwaa-create-role.md)传递给 Amazon MWAA。Amazon MWAA 扮演每个角色代表您呼叫其他 AWS 服务。以下示例使用 `iam:PassedToService` 条件键将 Amazon MWAA 服务主体 (`airflow.amazonaws.com`) 指定为可将角色传递到的服务。  
有关更多信息`iam:PassRole`，请参阅 *IAM 用户指南中的授予用户*[向 AWS 服务传递角色的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。

如果您想使用静态加密来创建和管理您的 Amazon MWAA 环境，请使用以下策略。 AWS 拥有的密钥 

### 使用 AWS 拥有的密钥
<a name="collapsible-full-api-access-cust-key"></a>

------
#### [ JSON ]

****  

```
{
   "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 资源。

### 使用由客户托管的密钥。
<a name="collapsible-full-api-access-cust-key"></a>

------
#### [ JSON ]

****  

```
{
    "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:*:111122223333: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/*"
            ]
        }
    ]
}
```

------

## 只读控制台访问策略：Amazon MWAARead OnlyAccess
<a name="mwaa-read-only"></a>

如果用户需要访问 Amazon MWAA 控制台环境详情页面上环境所用的资源，则可能需要访问 `AmazonMWAAReadOnlyAccess` 权限策略。它不允许用户创建新环境、编辑现有环境或允许用户访问 Apache Airflow UI。

------
#### [ JSON ]

****  

```
{
        "Version":"2012-10-17",		 	 	 
        "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "airflow:ListEnvironments",
                "airflow:GetEnvironment",
                "airflow:ListTagsForResource"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## Apache Airflow 用户界面访问策略：亚马逊 MWAAWeb ServerAccess
<a name="web-ui-access"></a>

如果用户需要访问 Apache Airflow UI，则可能需要访问 `AmazonMWAAWebServerAccess` 权限策略。它不允许用户访问亚马逊 MWAA 控制台上的环境或使用 Amazon MWAA APIs 执行任何操作。在 `{airflow-role}` 中指定 `Admin`、`Op`、`User`、`Viewer` 或 `Public` 角色以自定义 Web 令牌用户的访问级别。有关更多信息，请参阅*《Apache Airflow 参考指南》*中的[默认角色](https://airflow.apache.org/docs/apache-airflow/1.10.6/security.html?highlight=ldap#default-roles)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "airflow:CreateWebLoginToken",
            "Resource": [
             "arn:aws:airflow:us-east-1:111122223333:role/{your-environment-name}/{airflow-role}"
            ]
        }
    ]
}
```

------

**注意**  
Amazon MWAA 将 IAM 集成到五个[默认 Amazon Airflow 基于角色的访问控制 (RBAC) 角色](https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html?highlight=roles)。有关使用自定义 Apache Airflow 角色的更多信息，请参阅。[教程：限制 Amazon MWAA 用户访问其中的一个子集 DAGs](limit-access-to-dags.md)
此策略中的 `Resource` 字段可用于为 Amazon MWAA 环境指定 Apache Airflow 基于角色的访问控制角色。但不支持在策略的 `Resource` 字段中使用 Amazon MWAA 环境 ARN（Amazon 资源名称）。


## Apache Airflow Rest API 访问政策：亚马逊 MWAARest APIAccess
<a name="rest-api-access"></a>

要访问 Apache Airflow REST API，您必须在 IAM 策略中授予 `airflow:InvokeRestApi` 权限。在以下策略示例中，在 `{airflow-role}` 中指定 `Admin`、`Op`、`User`、`Viewer` 或 `Public` 角色以自定义用户访问权限级别。有关更多信息，请参阅*《Apache Airflow 参考指南》*中的[默认角色](https://airflow.apache.org/docs/apache-airflow/1.10.6/security.html?highlight=ldap#default-roles)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowMwaaRestApiAccess",
            "Effect": "Allow",
            "Action": "airflow:InvokeRestApi",
            "Resource": [
            "arn:aws:airflow:us-east-1:111122223333:role/{your-environment-name}/{airflow-role}"
            ]
        }
    ]
}
```

------

**注意**  
配置私有 Web 服务器时，无法从虚拟私有云 (VPC) 之外调用 `InvokeRestApi` 操作。您可以使用 `aws:SourceVpc` 键对此操作执行更精细的访问控制。有关更多信息，请参阅 a [ws：SourceVpc](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpc)
此策略中的 `Resource` 字段可用于为 Amazon MWAA 环境指定 Apache Airflow 基于角色的访问控制角色。但不支持在策略的 `Resource` 字段中使用 Amazon MWAA 环境 ARN（Amazon 资源名称）。

## Apache Airflow CLI 政策：亚马逊 MWAAAirflow CliAccess
<a name="cli-access"></a>

如果用户需要运行 Apache Airflow CLI 命令（例如 `trigger_dag`），则可能需要访问 `AmazonMWAAAirflowCliAccess` 权限策略。它不允许用户访问亚马逊 MWAA 控制台上的环境或使用 Amazon MWAA APIs 执行任何操作。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "airflow:CreateCliToken"
            ],
            "Resource": "arn:aws:airflow:us-east-1:111122223333:environment/${EnvironmentName}"
        }
    ]
}
```

------

## 创建 JSON 策略
<a name="access-policy-iam-console-create"></a>

您可以创建 JSON 策略，并将策略附加到 IAM 控制台上的用户、角色或群组。以下步骤介绍如何在 IAM 中创建 JSON 策略。

**要创建 JSON 策略，请执行以下操作**

1. 在 IAM 控制台中打开[策略页面](https://console.aws.amazon.com/iam/home#/policies)。

1. 选择**创建策略**。

1. 选择 **JSON** 选项卡。

1. 添加 JSON 策略。

1. 选择**查看策略**。

1. 在**名称**和**描述**（可选）文本字段中各输入一个值。

   例如，您可以将策略命名为 `AmazonMWAAReadOnlyAccess`。

1. 选择**创建策略**。

## 将策略附加到开发者群组的示例用例
<a name="access-policy-use-case"></a>

假设您在 IAM 中使用一个名为 `AirflowDevelopmentGroup` 的群组来向 Apache Airflow 开发团队中的所有开发人员授予权限。这些用户需要访问 `AmazonMWAAFullConsoleAccess`、`AmazonMWAAAirflowCliAccess` 和 `AmazonMWAAWebServerAccess` 权限策略。本节介绍如何在 IAM 中创建群组、创建和附加这些策略以及如何将该群组关联到 IAM 用户。这些步骤假设您使用的是 [AWS自有密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)。

**创建 Amazon MWAAFull ConsoleAccess 政策**

1. 下载[亚马逊MWAAFullConsoleAccess 访问政策](./samples/AmazonMWAAFullConsoleAccess.zip)。

1. 在 IAM 控制台中打开[策略页面](https://console.aws.amazon.com/iam/home#/policies)。

1. 选择**创建策略**。

1. 选择 **JSON** 选项卡。

1. 为 `AmazonMWAAFullConsoleAccess` 粘贴相应的 JSON 策略。

1. 替换以下值：

   1. *123456789012*— 您的 AWS 账户 身份证（例如`0123456789`）

   1. *\$1your-kms-id\$1*— 客户托管密钥的唯一标识符，仅在您使用客户托管密钥进行静态加密时才适用。

1. 选择**查看策略**。

1. 在**名称**中键入 `AmazonMWAAFullConsoleAccess`。

1. 选择**创建策略**。

**创建 Amazon MWAAWeb ServerAccess 政策**

1. 下载[亚马逊MWAAWebServerAccess 访问政策](./samples/AmazonMWAAWebServerAccess.zip)。

1. 在 IAM 控制台中打开[策略页面](https://console.aws.amazon.com/iam/home#/policies)。

1. 选择**创建策略**。

1. 选择 **JSON** 选项卡。

1. 为 `AmazonMWAAWebServerAccess` 粘贴相应的 JSON 策略。

1. 替换以下值：

   1. *us-east-1*— 您的亚马逊 MWAA 环境所在的地区（例如）`us-east-1`

   1. *123456789012*— 你的 AWS 账户 身份证（例如`0123456789`）

   1. *\$1your-environment-name\$1*— 您的亚马逊 MWAA 环境名称（例如）`MyAirflowEnvironment`

   1. *\$1airflow-role\$1*[— `Admin` Apache Airflow 默认角色](https://airflow.apache.org/docs/apache-airflow/1.10.6/security.html?highlight=ldap#default-roles)

1. 选择**查看策略**。

1. 在**名称**中键入 `AmazonMWAAWebServerAccess`。

1. 选择**创建策略**。

**创建 Amazon MWAAAirflow CliAccess 政策**

1. 下载[亚马逊MWAAAirflowCliAccess 访问政策](./samples/AmazonMWAAAirflowCliAccess.zip)。

1. 在 IAM 控制台中打开[策略页面](https://console.aws.amazon.com/iam/home#/policies)。

1. 选择**创建策略**。

1. 选择 **JSON** 选项卡。

1. 为 `AmazonMWAAAirflowCliAccess` 粘贴相应的 JSON 策略。

1. 选择**查看策略**。

1. 在**名称**中键入 `AmazonMWAAAirflowCliAccess`。

1. 选择**创建策略**。

**要创建群组，执行以下操作**

1. 在 IAM 控制台中打开[群组页面](https://console.aws.amazon.com/iam/home#/groups)。

1. 输入 `AirflowDevelopmentGroup` 的名称。

1. 选择**下一步**。

1. 在**筛选**中键入 `AmazonMWAA` 来筛选结果。

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

1. 选择**下一步**。

1. 选择**创建组**。

**要与用户关联，请执行以下操作**

1. 在 IAM 控制台中打开[用户页面](https://console.aws.amazon.com/iam/home#/users)。

1. 选择一个用户。

1. 选择**组**。

1. 选择**将用户添加到各群组**。

1. 选择 **AirflowDevelopmentGroup**。

1. 然后选择**添加到组**。

## 接下来做什么？
<a name="access-policy-next-up"></a>
+ 要了解如何生成令牌以访问 Apache Airflow UI，请参阅 [访问 Apache Airflow](access-airflow-ui.md)。
+ 要详细了解有关创建 IAM 策略，请参阅[创建 IAM 策略](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_create.html)。

# Amazon ECS 的服务相关角色
<a name="mwaa-slr"></a>

[适用于 Apache Airflow 的亚马逊托管工作流程 AWS Identity and Access Management 使用 (IAM) 服务相关角色。](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)服务相关角色是一种独特类型的 IAM 角色，与 Amazon MWAA 直接相关。服务相关角色由 Amazon MWAA 预定义，包括该服务代表您调用其他 AWS 服务所需的所有权限。

服务相关角色可让您更轻松地设置 Amazon MWAA，因为您不必手动添加所需权限。Amazon MWAA 定义其服务相关角色的权限，除非另外定义，否则只有 Amazon MWAA 可以担任该角色。定义的权限包括信任策略和权限策略，以及不能附加到任何其他 IAM 实体的权限策略。

只有在首先删除相关资源后，您才能删除服务关联角色。这将保护 Amazon MWAA 资源，因为您不会无意中删除对资源的访问权限。

有关支持服务相关角色的其他服务的信息，请参阅[与 IAM 配合使用的AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)，并搜索**服务相关角色**列中显示为**是**的服务。选择**是**和链接，访问该服务的服务相关角色文档。

## Amazon MWAA 的服务相关角色权限
<a name="mwaa-slr-iam-policy"></a>

Amazon MWAA 使用名为的服务相关角色 `AWSServiceRoleForAmazonMWAA` — 在您的账户中创建的服务相关角色授予亚马逊 MWAA 访问以下服务的权限： AWS 
+ 亚马逊 CloudWatch 日志（日CloudWatch 志）-为 Apache Airflow 日志创建日志组。
+ Amazon CloudWatch (CloudWatch)-向您的账户发布与您的环境及其底层组件相关的指标。
+ Amazon Elastic Compute Cloud（Amazon EC2）— 创建以下资源：
  + 您的 VPC 中的亚马逊 VPC 终端节点，用于 AWS托管的 Amazon Aurora PostgreSQL 数据库集群，供 Apache Airflow 计划程序和工作人员使用。
  + 如果您为 Apache Airflow Web 服务器选择[私有网络](configuring-networking.md)选项，则需要一个额外的 Amazon VPC 端点，用于允许对 Web 服务器进行网络访问。
  + 您的 Amazon VPC 中的@@ [弹性网络接口 (ENIs)](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ElasticNetworkInterfaces.html)，用于通过网络访问您的亚马逊 VPC 中托管的 AWS 资源。

以下信任策略允许服务主体担任服务相关角色。Amazon MWAA 的服务主体是 `airflow.amazonaws.com`，如策略所示。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "airflow.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

名为 `AmazonMWAAServiceRolePolicy` 的角色权限策略允许 Amazon MWAA 对指定资源完成以下操作：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:CreateLogGroup",
                "logs:DescribeLogGroups"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:airflow-*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:AttachNetworkInterface",
                "ec2:CreateNetworkInterface",
                "ec2:CreateNetworkInterfacePermission",
                "ec2:DeleteNetworkInterface",
                "ec2:DeleteNetworkInterfacePermission",
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcEndpoints",
                "ec2:DescribeVpcs",
                "ec2:DetachNetworkInterface"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateVpcEndpoint",
            "Resource": "arn:aws:ec2:*:*:vpc-endpoint/*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": "AmazonMWAAManaged"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:ModifyVpcEndpoint",
                "ec2:DeleteVpcEndpoints"
            ],
            "Resource": "arn:aws:ec2:*:*:vpc-endpoint/*",
            "Condition": {
                "Null": {
                    "aws:ResourceTag/AmazonMWAAManaged": false
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVpcEndpoint",
                "ec2:ModifyVpcEndpoint"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:vpc/*",
                "arn:aws:ec2:*:*:security-group/*",
                "arn:aws:ec2:*:*:subnet/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "arn:aws:ec2:*:*:vpc-endpoint/*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "CreateVpcEndpoint"
                },
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": "AmazonMWAAManaged"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "cloudwatch:PutMetricData",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": [
                        "AWS/MWAA"
                    ]
                }
            }
        }
    ]
}
```

------

您必须配置权限，允许 IAM 实体（如用户、组或角色）创建、编辑或删除服务关联角色。有关更多信息，请参阅*《IAM 用户指南》*中的[服务相关角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 为 Amazon MWAA 创建服务相关角色
<a name="mwaa-slr-create-slr"></a>

您无需手动创建服务关联角色。当您使用 AWS 管理控制台、或 AWS API 创建新的 Amazon MWAA 环境时 AWS CLI，Amazon MWAA 会为您创建服务相关角色。

如果您删除该服务关联角色，然后需要再次创建，您可以使用相同流程在账户中重新创建此角色。当您创建另一个环境时，Amazon MWAA 会再次为您创建服务相关角色。

## 编辑 Amazon MWAA 的服务相关角色
<a name="mwaa-slr-edit-slr"></a>

Amazon MWAA 不允许编辑 AWSService RoleForAmazon MWAA 服务相关角色。创建服务关联角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。但是可以使用 IAM 编辑角色描述。有关更多信息，请参阅*《IAM 用户指南》* 中的[编辑服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 删除 Amazon MWAA 的服务相关角色
<a name="mwaa-slr-delete-slr"></a>

如果不再需要使用某个需要服务关联角色的功能或服务，我们建议您删除该角色。这样就没有未被主动监控或维护的未使用实体。

当您删除 Amazon MWAA 环境时，Amazon MWAA 会删除其作为服务一部分使用的所有关联资源。但是，您必须等到 Amazon MWAA 完成环境删除之前，然后才能尝试删除服务相关角色。如果您在 Amazon MWAA 删除环境之前删除服务相关角色，则 Amazon MWAA 可能无法删除该环境的所有关联资源。

**使用 IAM 手动删除服务关联角色**

使用 IAM 控制台 AWS CLI、或 AWS API 删除 AWSService RoleForAmazon MWAA 服务相关角色。有关更多信息，请参阅*《IAM 用户指南》*中的[删除服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

## Amazon ECS 服务相关角色支持的区域
<a name="mwaa-slr-regions"></a>

Amazon ECS 支持在服务可用的所有区域中使用服务相关角色。有关更多信息，请参阅 [Amazon MWAA 端点和配额](https://docs.aws.amazon.com/general/latest/gr/mwaa.html)。

## 策略更新
<a name="mwaa-slr-policies-updates"></a>


| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
|  Amazon MWAA 更新了其服务相关角色权限策略  |  [`AmazonMWAAServiceRolePolicy`](#mwaa-slr-iam-policy) — Amazon MWAA 更新了其服务相关角色的权限策略，授予 Amazon MWAA 向客户账户发布与该服务底层资源相关的其他指标的权限。这些新指标发布在 `AWS/MWAA` 中  |  2022 年 11 月 18 日  | 
|  Amazon MWAA 已开始跟踪更改  |  Amazon MWAA 开始跟踪其 AWS托管服务相关角色权限策略的更改。  |  2022 年 11 月 18 日  | 

# Amazon MWAA 执行角色
<a name="mwaa-create-role"></a>

执行角色是一个 AWS Identity and Access Management (IAM) 角色，其权限策略授予亚马逊托管工作流程 Apache Airflow 代表您调用 AWS 其他服务资源的权限。这可能包括诸如您的 Amazon S3 存储桶、[AWS自有密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)和 CloudWatch 日志之类的资源。Amazon MWAA 环境需要每个环境配备一个执行角色。本主题介绍如何使用和配置环境的执行角色，以允许 Amazon MWAA 访问您的环境使用的其他 AWS 资源。

**Contents**
+ [执行角色概述](#mwaa-create-role-how)
  + [默认情况下附加的权限](#mwaa-create-role-how-create-role)
  + [如何添加使用其他 AWS 服务的权限](#mwaa-create-role-how-adding)
  + [如何关联新的执行角色](#mwaa-create-role-how-associating)
+ [创建新角色](#mwaa-create-role-mwaa-onconsole)
+ [访问和更新执行角色策略](#mwaa-create-role-update)
  + [附加 JSON 策略以使用其他 AWS 服务](#mwaa-create-role-attach-json-policy)
+ [使用账户级公有访问阻止授予对 Amazon S3 存储桶的访问权限](#mwaa-create-role-s3-publicaccessblock)
+ [使用 Apache Airflow 连接](#mwaa-create-role-airflow-connections)
+ [执行角色的 JSON 策略示例](#mwaa-create-role-json)
  + [由客户托管的密钥的示例策略](#mwaa-create-role-cmk)
  + [AWS自有密钥的策略示例](#mwaa-create-role-aocmk)
+ [接下来做什么？](#mwaa-create-role-next-up)

## 执行角色概述
<a name="mwaa-create-role-how"></a>

Amazon MWAA 使用您的环境使用的其他 AWS 服务的权限来自执行角色。Amazon MWAA 执行角色需要获得环境使用的以下 AWS 服务的权限：
+ 亚马逊 CloudWatch (CloudWatch) — 发送 Apache Airflow 指标和日志。
+ Amazon Simple Storage Service（Amazon S3）— 用于解析环境的 DAG 代码和支持文件（例如，`requirements.txt`）。
+ Amazon Simple Queue Service（Amazon SQS）— 将环境的 Amazon Airflow 任务在 Amazon MWAA 所拥有的 Amazon SQS 队列中排队。
+ AWS Key Management Service (AWS KMS) — 用于环境的数据加密（使用[AWS自有密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)或[客户管理的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)）。
**注意**  
如果您选择让 Amazon MWAA 使用 AWS 拥有的 KMS 密钥来加密您的数据，则必须在附加到您的 Amazon MWAA 执行角色的策略中定义权限，该策略允许通过 Amazon SQS 访问存储在您账户之外的任意 KMS 密钥。环境的执行角色需要满足以下两个条件才能访问任意 KMS 密钥：  
第三方账户中的 KMS 密钥需要通过其资源策略允许跨账户访问。
DAG 代码需要访问在第三方账户中以 `airflow-celery-` 开头的 Amazon SQS 队列，该队列使用相同的 KMS 密钥进行加密。
为了降低与跨账户访问资源相关的风险，我们建议您查看您的代码，确保您的 DAGs工作流程不会访问您账户之外的任意 Amazon SQS 队列。此外，您可以使用存储在您自己账户中的由客户托管的 KMS 密钥来管理 Amazon MWAA 上的加密。这将环境的执行角色限制为只能访问您账户中的 KMS 密钥。  
请记住，在选择加密选项后，您无法更改现有环境的选择。

执行角色还需要获得以下 IAM 操作的权限：
+ `airflow:PublishMetrics` — 允许 Amazon MWAA 监控环境的运行状况。

### 默认情况下附加的权限
<a name="mwaa-create-role-how-create-role"></a>

您可以使用 Amazon MWAA 控制台上的默认选项来创建执行角色和 [AWS自有的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)，然后使用本页上的步骤将权限策略添加到执行角色。
+ 当您在控制台上选择**创建新角色**选项时，Amazon MWAA 会将环境所需的最低权限附加到执行角色。
+ 在某些情况下，Amazon MWAA 会附加最高权限。例如，我们建议您在创建环境时在 Amazon MWAA 控制台上选择创建执行角色的选项。Amazon MWAA 通过在执行角色中使用正则表达式模式自动为所有 CloudWatch 日志组添加权限策略。`"arn:aws:logs:us-east-1:111122223333:log-group:airflow-your-environment-name-*"`

### 如何添加使用其他 AWS 服务的权限
<a name="mwaa-create-role-how-adding"></a>

创建环境后，Amazon MWAA 无法向现有执行角色添加或编辑权限策略。您必须使用环境所需的其他权限策略来更新执行角色。例如，如果您的 DAG 需要访问权限 AWS Glue，则 Amazon MWAA 无法自动检测到您的环境需要这些权限，也无法将这些权限添加到您的执行角色中。

您可以通过两种方式为执行角色添加权限：
+ 通过内联修改执行角色的 JSON 策略。您可以使用本页上的 [JSON 策略文档](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html)在 IAM 控制台上添加或替换执行角色的 JSON 策略。
+ 为 AWS 服务创建 JSON 策略并将其附加到您的执行角色。您可以使用此页面上的步骤在 IAM 控制台上将 AWS 服务的新的 JSON 策略文档与您的执行角色关联起来。

假设执行角色已关联到环境，Amazon MWAA 可以立即开始使用添加的权限策略。这也意味着，如果您从执行角色中删除任何必需的权限，则 DAGs 可能会失败。

### 如何关联新的执行角色
<a name="mwaa-create-role-how-associating"></a>

您可以随时更改环境的执行角色。如果新的执行角色尚未与环境关联，请使用本页上的步骤创建新的执行角色策略，并将该角色与环境相关联。

## 创建新角色
<a name="mwaa-create-role-mwaa-onconsole"></a>

默认情况下，Amazon MWAA 会代表您创建用于数据加密的 [AWS自有密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)和执行角色。创建环境时，您可以在 Amazon MWAA 控制台上选择默认选项。下图显示了为环境创建执行角色的默认选项。

![\[这是一张带有创建新角色的默认选项的镜像。\]](http://docs.aws.amazon.com/zh_cn/mwaa/latest/userguide/images/mwaa-console-permissions.png)


**重要**  
创建新的执行角色时，请勿重复使用已删除的执行角色的名称。唯一的名称可以帮助防止冲突并确保正确的资源管理。

## 访问和更新执行角色策略
<a name="mwaa-create-role-update"></a>

您可以在 Amazon MWAA 控制台上访问环境的执行角色，并在 IAM 控制台上更新该角色的 JSON 策略。

**要更新执行角色策略，请执行以下操作**

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.aws.amazon.com/mwaa/home#/environments)。

1. 选择环境。

1. 在**权限**窗格上选择执行角色以在 IAM 中打开权限页面。

1. 选择执行角色名称以打开权限策略。

1. 选择**编辑策略**。

1. 选择 **JSON** 选项卡。

1. 更新 JSON 策略。

1. 选择**查看策略**。

1. 选择**保存更改**。

### 附加 JSON 策略以使用其他 AWS 服务
<a name="mwaa-create-role-attach-json-policy"></a>

您可以为 AWS 服务创建 JSON 策略并将其附加到您的执行角色。例如，您可以附加以下 JSON 策略，以授予对 AWS Secrets Manager中所有资源的只读访问权限。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "secretsmanager:GetResourcePolicy",
            "secretsmanager:GetSecretValue",
            "secretsmanager:DescribeSecret",
            "secretsmanager:ListSecretVersionIds"
         ],
         "Resource":[
            "*"
         ]
      }
   ]
}
```

------

**要将该策略附加到执行角色，请执行以下操作**

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.aws.amazon.com/mwaa/home#/environments)。

1. 选择环境。

1. 在**权限**窗格上选择执行角色。

1. 选择**附加策略**。

1. 选择**创建策略**。

1. 选择 **JSON**。

1. 粘贴 JSON 策略。

1. 选择**下一步：标签**，然后选择**下一步：审核**。

1. 输入策略的描述性名称（例如 `SecretsManagerReadPolicy`）和策略的描述。

1. 选择**创建策略**。

## 使用账户级公有访问阻止授予对 Amazon S3 存储桶的访问权限
<a name="mwaa-create-role-s3-publicaccessblock"></a>

您可能需要使用 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutPublicAccessBlock.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutPublicAccessBlock.html) Amazon S3 操作来阻止访问您账户中的所有存储桶。当您阻止访问您账户中的所有存储桶时，环境执行角色必须在权限策略中包含该 `s3:GetAccountPublicAccessBlock` 操作。

以下示例演示了在阻止访问您账户中的所有 Amazon S3 存储桶时必须附加到执行角色的策略。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
     {
       "Effect": "Allow",
       "Action": "s3:GetAccountPublicAccessBlock",
       "Resource": "*"
     }
  ]
}
```

------

关于限制对 Amazon S3 存储桶的访问权限的更多信息，请参阅 *《Amazon Simple Storage Service 用户指南》*中的[阻止对 Amazon S3 存储的公有访问](https://docs.aws.amazon.com/)。

## 使用 Apache Airflow 连接
<a name="mwaa-create-role-airflow-connections"></a>

您还可以创建 Apache Airflow 连接，并在 Apache Airflow 连接对象中指定执行角色及其 ARN。要了解更多信息，请参阅 [管理与 Apache Airflow 的连接](manage-connections.md)。

## 执行角色的 JSON 策略示例
<a name="mwaa-create-role-json"></a>

您可以使用本节中的两个示例权限策略替换用于现有执行角色的权限策略，或者创建新的执行角色并用于环境。这些策略包含 Apache Airflow 日志组的[资源 ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html) 占位符、[Amazon S3 存储桶](mwaa-s3-bucket.md)和 [Amazon MWAA 环境](create-environment.md)。

我们建议复制示例策略，替换示例 ARNs 或占位符，然后使用 JSON 策略创建或更新执行角色。

### 由客户托管的密钥的示例策略
<a name="mwaa-create-role-cmk"></a>

以下示例显示了可用于[由客户托管的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)的执行角色策略。

------
#### [ JSON ]

****  

```
{
 "Version":"2012-10-17",		 	 	 
 "Statement": [
  { 
   "Effect": "Deny",
   "Action": "s3:ListAllMyBuckets",
   "Resource": [
     "arn:aws:s3:::amzn-s3-demo-bucket",
	   "arn:aws:s3:::amzn-s3-demo-bucket/*"
   ]
  }, 
  { 
   "Effect": "Allow",
   "Action": [ 
    "s3:GetObject*",
    "s3:GetBucket*",
    "s3:List*"
   ],
   "Resource": [
     "arn:aws:s3:::amzn-s3-demo-bucket",
	   "arn:aws:s3:::amzn-s3-demo-bucket/*"
   ]
  },
  {
   "Effect": "Allow",
   "Action": [
    "logs:CreateLogStream",
    "logs:CreateLogGroup",
    "logs:PutLogEvents",
    "logs:GetLogEvents",
    "logs:GetLogRecord",
    "logs:GetLogGroupFields",
    "logs:GetQueryResults"
   ],
   "Resource": [
    "arn:aws:logs:us-east-1:111122223333:log-group:airflow-your-environment-name:*"
   ]
  },
  {
   "Effect": "Allow",
   "Action": [
    "logs:DescribeLogGroups"
   ],
   "Resource": [
    "*"
   ]
  },
  {
   "Effect": "Allow",
   "Action": [
    "s3:GetAccountPublicAccessBlock"
   ],
   "Resource": [
    "*"
   ]
  },
  {
   "Effect": "Allow",
   "Action": "cloudwatch:PutMetricData",
   "Resource": "*"
  },
  {
   "Effect": "Allow",
   "Action": [
    "sqs:ChangeMessageVisibility",
    "sqs:DeleteMessage",
    "sqs:GetQueueAttributes",
    "sqs:GetQueueUrl",
    "sqs:ReceiveMessage",
    "sqs:SendMessage"
   ],
   "Resource": "arn:aws:sqs:us-east-1:*:airflow-celery-*"
  },
  {
   "Effect": "Allow",
   "Action": [
    "kms:Decrypt",
    "kms:DescribeKey",
    "kms:GenerateDataKey*",
    "kms:Encrypt"
   ],
   "Resource": "arn:aws:kms:us-east-1:111122223333:key/your-kms-cmk-id",
   "Condition": {
    "StringLike": {
     "kms:ViaService": [
      "sqs.us-east-1.amazonaws.com",
      "s3.us-east-1.amazonaws.com"
     ]
    }
   }
  }
 ]
}
```

------

接下来，您需要允许 Amazon MWAA 担任此角色以代表您执行操作。为此，可以[使用 IAM 控制台](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)将 `"airflow.amazonaws.com"` 和 `"airflow-env.amazonaws.com"` 服务主体添加到该执行角色的可信实体列表中，或者使用 AWS CLI通过 IAM [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) 命令将这些服务主体放入该执行角色的代入角色策略文档中。请参阅以下代入角色策略文档示例：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
            "Service": ["airflow.amazonaws.com","airflow-env.amazonaws.com"]
        },
        "Action": "sts:AssumeRole"
      }
   ]
}
```

------

然后将以下 JSON 策略附加到[由客户托管的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)中。此策略使用[https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context)条件键前缀来允许访问日志中的 Apache Airflow 日志组。 CloudWatch 

```
{
  "Sid": "Allow logs access",
  "Effect": "Allow",
  "Principal": {
    "Service": "logs.us-east-1.amazonaws.com"
  },
  "Action": [
    "kms:Encrypt*",
    "kms:Decrypt*",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:Describe*"
  ],
  "Resource": "*",
  "Condition": {
    "ArnLike": {
      "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:us-east-1:111122223333:*"
    }
  }
}
```

### AWS自有密钥的策略示例
<a name="mwaa-create-role-aocmk"></a>

以下示例显示了您可用于[AWS自有密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)的执行角色策略。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "airflow:PublishMetrics",
            "Resource": "arn:aws:airflow:us-east-1:111122223333:environment/{your-environment-name}"
        },
        { 
            "Effect": "Deny",
            "Action": "s3:ListAllMyBuckets",
            "Resource": [
								"arn:aws:s3:::amzn-s3-demo-bucket",
								"arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        { 
            "Effect": "Allow",
            "Action": [ 
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:List*"
            ],
            "Resource": [
								"arn:aws:s3:::amzn-s3-demo-bucket",
								"arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:CreateLogGroup",
                "logs:PutLogEvents",
                "logs:GetLogEvents",
                "logs:GetLogRecord",
                "logs:GetLogGroupFields",
                "logs:GetQueryResults"
            ],
            "Resource": [
            "arn:aws:logs:us-east-1:111122223333:log-group:airflow-{your-environment-name}-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogGroups"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetAccountPublicAccessBlock"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "cloudwatch:PutMetricData",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sqs:ChangeMessageVisibility",
                "sqs:DeleteMessage",
                "sqs:GetQueueAttributes",
                "sqs:GetQueueUrl",
                "sqs:ReceiveMessage",
                "sqs:SendMessage"
            ],
            "Resource": "arn:aws:sqs:us-east-1:*:airflow-celery-*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey*",
                "kms:Encrypt"
            ],
            "NotResource": "arn:aws:kms:*:111122223333:key/*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                    "sqs.us-east-1.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

## 接下来做什么？
<a name="mwaa-create-role-next-up"></a>
+ 要了解您和 Apache Airflow 用户访问环境所需的权限，请参阅 [访问 Amazon MWAA 环境](access-policies.md)。
+ 了解 [使用由客户托管的密钥进行加密](custom-keys-certs.md)。
+ 浏览更多[客户管理型策略示例](https://docs.aws.amazon.com/kms/latest/developerguide/customer-managed-policies.html)。

# 防止跨服务混淆座席
<a name="cross-service-confused-deputy-prevention"></a>

混淆代理问题是一个安全性问题，即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在中 AWS，跨服务模仿可能会导致混乱的副手问题。一个服务（*呼叫服务*）调用另一项服务（*所谓的服务*）时，可能会发生跨服务模拟。可以操纵调用服务以使用其权限对另一个客户的资源进行操作，否则该服务没有访问权限。为了防止这种情况，我们 AWS 提供了一些工具，帮助您保护所有服务的数据，这些服务委托人已被授予对您账户中资源的访问权限。

我们建议在环境的执行角色中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件上下文键，以限制 Amazon MWAA 为另一个服务访问资源提供的权限。如果您只希望将一个资源与跨服务访问相关联，请使用。`aws:SourceArn`如果您想允许该账户中的任何资源与跨服务使用操作相关联，请使用。`aws:SourceAccount`

防范混淆代理问题最有效的方法是使用 `aws:SourceArn` 全局条件上下文键和资源的完整 ARN。如果不知道资源的完整 ARN，或者正在指定多个资源，请针对 ARN 未知部分使用带有通配符字符（`*`）的 `aws:SourceArn` 全局上下文条件键。例如 `arn:aws:airflow:*:123456789012:environment/*`。

`aws:SourceArn` 的值必须是您正在为其创建执行角色的 Amazon MWAA 环境 ARN。

根据以下示例使用环境的执行角色信任策略中的 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文键来防范混淆代理问题。在创建新的执行角色时，您可以使用以下信任策略。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "airflow.amazonaws.com",
                    "airflow-env.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:airflow:us-east-1:123456789012:environment/your-environment-name"
                },
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                }
            }
        }
    ]
}
```

------

# Apache Airflow 访问模式
<a name="configuring-networking"></a>

Amazon MWAA 控制台包含内置选项，用于在环境中配置到 Apache Airflow Web 服务器的私有或公有路由。本指南介绍了在 Amazon MWAA 环境中可用的 Apache Airflow Web 服务器的访问模式，以及如果您选择私有网络选项，需要在 Amazon VPC 中配置的其他资源。

**Contents**
+ [Apache Airflow 访问模式](#configuring-networking-onconsole)
  + [公有网络](#webserver-options-public-network-onconsole)
  + [私有网络](#webserver-options-private-network)
+ [访问模式概述](#configuring-networking-access-overview)
  + [公有网络访问模式](#access-overview-public)
  + [私有网络访问模式](#access-overview-private)
+ [私有和公有访问模式的设置](#access-network-choose)
  + [公有网络设置](#access-network-public)
  + [私有网络的设置](#access-network-private)
+ [访问 Apache Airflow Web 服务器的 VPC 端点（私有网络访问）](#configuring-access-vpce)

## Apache Airflow 访问模式
<a name="configuring-networking-onconsole"></a>

您可以为 Apache Airflow Web 服务器选择私有或公有路由。要启用私有路由，请选择**私有网络**。这将用户访问 Apache Airflow Web 服务器的权限限制在 Amazon VPC 内。要启用公有路由，请选择**公有网络**。这可让用户通过互联网访问 Apache Airflow Web 服务器。

### 公有网络
<a name="webserver-options-public-network-onconsole"></a>

以下架构图描述了带有公有 Web 服务器的 Amazon MWAA 环境。

![\[此图显示了带有私有 Web 服务器的 Amazon MWAA 环境的架构。\]](http://docs.aws.amazon.com/zh_cn/mwaa/latest/userguide/images/mwaa-public-web-server.png)


公有网络访问模式允许拥有[环境的 IAM 策略](access-policies.md)访问权限的用户通过互联网访问 Apache Airflow UI。

下图描述了在 Amazon MWAA 控制台上哪里可以找到**公有网络**选项。

![\[此图描述了在 Amazon MWAA 控制台上哪里可以找到公有网络选项。\]](http://docs.aws.amazon.com/zh_cn/mwaa/latest/userguide/images/mwaa-console-public-network.png)


### 私有网络
<a name="webserver-options-private-network"></a>

以下架构图描述了带有私有 Web 服务器的 Amazon MWAA 环境。

![\[此图显示了带有私有 Web 服务器的 Amazon MWAA 环境的架构。\]](http://docs.aws.amazon.com/zh_cn/mwaa/latest/userguide/images/mwaa-private-web-server.png)


私有网络访问模式将访问 Apache Airflow UI 的权限限制为* Amazon VPC 中*已获准访问[环境 IAM 策略的](access-policies.md)用户。

创建具有私有 Web 服务器访问权限的环境时，必须将所有依赖项打包到 Python Wheel 档案 (`.whl`) 中，然后在 `requirements.txt` 中引用 `.whl`。有关使用 Wheel 打包和安装依赖项的说明，请参阅[使用 Python Wheel 管理依赖项](best-practices-dependencies.md#best-practices-dependencies-python-wheels)。

下图描述了在 Amazon MWAA 控制台上哪里可以找到**私有网络**选项。

![\[此图描述了在 Amazon MWAA 控制台上哪里可以找到私有网络选项。\]](http://docs.aws.amazon.com/zh_cn/mwaa/latest/userguide/images/mwaa-console-private-network.png)


## 访问模式概述
<a name="configuring-networking-access-overview"></a>

本节介绍当您选择**公有网络**或**私有网络**访问模式时，在 Amazon VPC 中创建的 VPC 端点 (AWS PrivateLink)。

### 公有网络访问模式
<a name="access-overview-public"></a>

如果您为 Apache Airflow Web 服务器选择了**公有网络**访问模式，则网络流量将通过互联网公开路由。
+ Amazon MWAA 为 Amazon Aurora PostgreSQL 元数据数据库创建 VPC 接口端点。端点是在映射到私有子网的可用区中创建的，并且独立于其他 AWS 账户。
+ 然后，Amazon MWAA 会将私有子网中的 IP 地址绑定到接口端点。这旨在支持从 Amazon VPC 的每个可用区绑定一个 IP 的最佳实践。

### 私有网络访问模式
<a name="access-overview-private"></a>

如果您为 Apache Airflow Web 服务器选择了**私有网络**访问模式，则网络流量将*在 Amazon VPC 内*私密路由。
+ Amazon MWAA 为 Apache Airflow Web 服务器创建一个 VPC 接口端点，为 Amazon Aurora PostgreSQL 元数据数据库创建接口端点。端点是在映射到私有子网的可用区中创建的，并且独立于其他 AWS 账户。
+ 然后，Amazon MWAA 会将私有子网中的 IP 地址绑定到接口端点。这旨在支持从 Amazon VPC 的每个可用区绑定一个 IP 的最佳实践。

要了解更多信息，请参阅 [Amazon VPC 和 Apache Airflow 访问模式的示例用例](networking-about.md#networking-about-network-usecase)。

## 私有和公有访问模式的设置
<a name="access-network-choose"></a>

下一节根据您为环境选择的 Apache Airflow 访问模式，介绍了您需要的其他设置和配置。

### 公有网络设置
<a name="access-network-public"></a>

如果您为 Apache Airflow Web 服务器选择**公有网络**选项，则可以在创建环境后开始使用 Apache Airflow UI。

您需要采取以下步骤来配置用户的访问权限，以及您的环境使用其他 AWS 服务的权限。

1. **添加权限**。亚马逊 MWAA 需要获得许可才能使用其他 AWS 服务。在您创建环境时，Amazon MWAA 会创建一个[服务相关角色](mwaa-slr.md)，允许其对亚马逊弹性容器注册表 (Amazon ECR)、日志和亚马逊 EC CloudWatch 2 使用某些 IAM 操作。

   您可以添加对这些服务使用其他操作的权限，也可以通过向执行角色添加权限来添加使用其他 AWS 服务的权限。要了解更多信息，请参阅 [Amazon MWAA 执行角色](mwaa-create-role.md)。

1. **创建用户策略**。您可能需要为用户创建多个 IAM 策略，以配置对环境和 Apache Airflow UI 的访问权限。要了解更多信息，请参阅 [访问 Amazon MWAA 环境](access-policies.md)。

### 私有网络的设置
<a name="access-network-private"></a>

如果您为 Apache Airflow Web 服务器选择 “**专用网络**” 选项，则需要配置用户的访问权限、您的环境使用 AWS 其他服务的权限，并创建从您的计算机访问 Amazon VPC 中资源的机制。

1. **添加权限**。亚马逊 MWAA 需要获得许可才能使用其他 AWS 服务。在您创建环境时，Amazon MWAA 会创建一个[服务相关角色](mwaa-slr.md)，允许其对亚马逊弹性容器注册表 (Amazon ECR)、日志和亚马逊 EC CloudWatch 2 使用某些 IAM 操作。

   您可以添加对这些服务使用其他操作的权限，也可以通过向执行角色添加权限来添加使用其他 AWS 服务的权限。要了解更多信息，请参阅 [Amazon MWAA 执行角色](mwaa-create-role.md)。

1. **创建用户策略**。您可能需要为用户创建多个 IAM 策略，以配置对环境和 Apache Airflow UI 的访问权限。要了解更多信息，请参阅 [访问 Amazon MWAA 环境](access-policies.md)。

1. **启用网络访问**。您需要在 Amazon VPC 中创建一个机制来连接到 Apache Airflow Web 服务器的 VPC 端点 (AWS PrivateLink)。例如，通过使用 AWS Client VPN从计算机创建 VPN 隧道。

## 访问 Apache Airflow Web 服务器的 VPC 端点（私有网络访问）
<a name="configuring-access-vpce"></a>

如果您选择了**私有网络**选项，则需要在 Amazon VPC 中创建一个机制来访问 Apache Airflow Web 服务器的 VPC 端点 (AWS PrivateLink)。对于这些资源，我们建议使用与 Amazon MWAA 环境相同的 Amazon VPC、VPC 安全组和私有子网。

要了解更多信息，请参阅[管理 VPC 端点的访问](https://docs.aws.amazon.com/mwaa/latest/userguide/vpc-vpe-access.html)。