存取 Amazon MWAA 環境 - Amazon Managed Workflows for Apache Airflow

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

存取 Amazon MWAA 環境

若要針對 Apache 氣流使用 Amazon 受管工作流程,您必須使用帳戶和具有必要許可的 IAM 實體。本頁說明您可以附加至 Apache 氣流開發團隊的存取政策,以及適用於 Apache 氣流環境的 Amazon 管理工作流程的 Apache 氣流使用者。

我們建議您使用臨時登入資料,並使用群組和角色設定聯合身分,以存取 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 使用者指南中的教學課程:跨 AWS 帳戶 使用 IAM 角色委派存取權。

運作方式

並非所有 AWS Identity and Access Management (IAM) 實體都能存取 Amazon MWAA 環境中使用的資源和服務。您必須建立一個政策,授與 Apache Airflow 使用者存取這些資源的權限。例如,您需要授與您的 Apache 氣流開發團隊的存取權限。

Amazon MWAA 使用這些政策來驗證使用者是否具有在 AWS 主控台上執行動作所需的許可,還是透過環境使用的 API 執行動作。

您可以使用本主題中的 JSON 政策為 IAM 中的 Apache Airflow 使用者建立政策,然後將該政策附加到 IAM 中的使用者、群組或角色。

若要提供存取權,請新增權限至您的使用者、群組或角色:

  • 使用者和群組位於 AWS IAM Identity Center:

    建立權限合集。請按照 AWS IAM Identity Center 使用者指南 中的 建立權限合集 說明進行操作。

  • 透過身分提供者在 IAM 中管理的使用者:

    建立聯合身分的角色。請按照 IAM 使用者指南為第三方身分提供者 (聯合) 建立角色 中的指示進行操作。

  • IAM 使用者:

完整的控制台訪問策略:亞馬遜FullConsole訪問

如果使用者需要在 Amazon MWAA 主控台上設定環境,則可能需要存取AmazonMWAAFullConsoleAccess許可政策。

注意

您的完整主控台存取原則必須包含執行權限iam:PassRole。這可讓使用者將服務連結的角色執行角色傳遞給 Amazon MWAA。Amazon MWAA 擔任每個角色,以便代表您呼叫其他 AWS 服務。下列範例使用iam:PassedToService條件金鑰來指定 Amazon MWAA 服務主體 (airflow.amazonaws.com) 做為可傳遞角色的服務。

如需詳細資訊iam:PassRole,請參閱《IAM 使用者指南》中的授與使用者將角色傳遞給 AWS 服務的權限。

如果您想要使用靜態加密來建立和管理 Amazon MWAA 環境,請使AWS 擁有的金鑰用下列政策。

{ "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 和控制台訪問策略:亞馬遜FullApi訪問

如果使用者需要存取用於管理環境的所有 Amazon MWAA API,則可能需要存取AmazonMWAAFullApiAccess許可政策。它不會授與存取 Apache 氣流使用者介面的權限。

注意

完整的 API 存取政策必須包含執行權限iam:PassRole。這可讓使用者將服務連結的角色執行角色傳遞給 Amazon MWAA。Amazon MWAA 擔任每個角色,以便代表您呼叫其他 AWS 服務。下列範例使用iam:PassedToService條件金鑰來指定 Amazon MWAA 服務主體 (airflow.amazonaws.com) 做為可傳遞角色的服務。

如需詳細資訊iam:PassRole,請參閱《IAM 使用者指南》中的授與使用者將角色傳遞給 AWS 服務的權限。

如果您想要使用靜態加密來建立和管理 Amazon MWAA 環境,請使 AWS 擁有的金鑰 用下列政策。

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

只讀控制台訪問策略:亞馬遜ReadOnly訪問

如果使用者需要在 Amazon MWAA 主控台環境詳細資料頁面上檢視某個環境使用的資源,則可能需要存取AmazonMWAAReadOnlyAccess許可政策。它不允許使用者建立新環境、編輯現有環境,或允許使用者檢視 Apache Airflow UI。

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

阿帕奇氣流 UI 訪問政策:亞馬遜WebServer訪問

如果使用者需要存取 Apache 氣流使用者介面,可能需要存取AmazonMWAAWebServerAccess權限原則。它不允許使用者在 Amazon MWAA 主控台上檢視環境,也不允許使用 Amazon MWAA API 執行任何動作。在中指定AdminOpUserViewerPublic角色,{airflow-role}以自訂 Web Token 使用者的存取層級。如需詳細資訊,請參閱 Apache 氣流參考指南中的預設角色

{ "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}" ] } ] }
注意

Amazon MWAA 提供與五個預設 Apache 氣流角色型存取控制 (RBAC) 角色的 IAM 整合。如需使用自訂 Apache 氣流角色的詳細資訊,請參閱教學課程:限制 Amazon MWAA 使用者對 DAG 子集的存取權

阿帕奇氣流 CLI 政策:亞馬遜訪AirflowCli問

如果使用者需要執行 Apache 氣流 CLI 命令 (例如trigger_dag),則可能需要存取AmazonMWAAAirflowCliAccess權限原則。它不允許使用者在 Amazon MWAA 主控台上檢視環境,也不允許使用 Amazon MWAA API 執行任何動作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "airflow:CreateCliToken" ], "Resource": "*" } ] }

建立 JSON 政策

您可以建立 JSON 政策,並將政策附加到 IAM 主控台上的使用者、角色或群組。下列步驟說明如何在 IAM 中建立 JSON 政策。

若要建立 JSON 政策
  1. 在 IAM 主控台上開啟「政策」頁面

  2. 選擇 Create policy (建立政策)。

  3. 請選擇 JSON 標籤。

  4. 新增您的 JSON 政策。

  5. 選擇檢閱政策

  6. 在「稱」和「說明」的文字欄位中輸入值 (選擇性)。

    例如,您可以命名策略AmazonMWAAReadOnlyAccess

  7. 選擇建立政策

將原則附加至開發人員群組的範例使用案例

假設您正在使用 IAM 中命名的群組,AirflowDevelopmentGroup將許可套用至 Apache Airflow 開發團隊的所有開發人員。這些使用者需要存取AmazonMWAAFullConsoleAccessAmazonMWAAAirflowCliAccess、和AmazonMWAAWebServerAccess權限原則。本節說明如何在 IAM 中建立群組、建立和附加這些政策,以及如何將該群組與 IAM 使用者建立關聯。這些步驟假設您使用的是AWS 擁有的金鑰

若要建立亞馬遜 WAA 政策 FullConsoleAccess
  1. 下載亞馬遜訪問政策. FullConsoleAccess

  2. 在 IAM 主控台上開啟「政策」頁面

  3. 選擇 Create policy (建立政策)。

  4. 請選擇 JSON 標籤。

  5. 貼上的 JSON 政策AmazonMWAAFullConsoleAccess

  6. 以下列值取代:

    1. {您的帳戶 ID} — 您的 AWS 帳戶 ID(例如)0123456789

    2. {your-kms-id} — 客戶管理金鑰的唯一識別碼,僅在您使用客戶管理的金鑰進行靜態加密時適用。

  7. 選擇 [檢閱] 原則

  8. AmazonMWAAFullConsoleAccess名稱

  9. 選擇建立政策

若要建立亞馬遜 WAA 政策 WebServerAccess
  1. 下載亞馬遜訪問政策. WebServerAccess

  2. 在 IAM 主控台上開啟「政策」頁面

  3. 選擇 Create policy (建立政策)。

  4. 請選擇 JSON 標籤。

  5. 貼上的 JSON 政策AmazonMWAAWebServerAccess

  6. 以下列值取代:

    1. {您所在地區} — 您的 Amazon MWAA 環境的區域 (例如) us-east-1

    2. {您的帳戶 ID} — 您的 AWS 帳戶 ID(例如)0123456789

    3. {您的環境名稱} — 您的 Amazon MWAA 環境名稱(例如)MyAirflowEnvironment

    4. {氣流角色}-Admin 阿帕奇氣流默認角色

  7. 選擇檢閱政策

  8. AmazonMWAAWebServerAccess名稱

  9. 選擇建立政策

若要建立亞馬遜 WAA 政策 AirflowCliAccess
  1. 下載亞馬遜訪問政策. AirflowCliAccess

  2. 在 IAM 主控台上開啟「政策」頁面

  3. 選擇 Create policy (建立政策)。

  4. 請選擇 JSON 標籤。

  5. 貼上的 JSON 政策AmazonMWAAAirflowCliAccess

  6. 選擇 [檢閱] 原則

  7. AmazonMWAAAirflowCliAccess名稱

  8. 選擇建立政策

若要建立群組
  1. 在 IAM 主控台上開啟「群組」頁面

  2. 輸入的名稱AirflowDevelopmentGroup

  3. 選擇 Next Step (後續步驟)

  4. 輸入AmazonMWAA以在篩選中篩選結果。

  5. 選取您建立的三個策略。

  6. 選擇 Next Step (後續步驟)

  7. 選擇 Create Group (建立群組)

關聯至使用者
  1. 在 IAM 主控台上開啟「使用者」頁面

  2. 選擇使用者。

  3. 選擇 Groups (群組)

  4. 選擇 [新增使用者至群組]。

  5. 選取「AirflowDevelopment群組」。

  6. 選擇 Add to Groups (新增至群組)

後續步驟?