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

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

存取 Amazon MWAA環境

若要使用 Amazon Managed Workflows for Apache Airflow,您必須使用具有必要許可的帳戶和IAM實體。本主題說明您可以連接至 Apache Airflow 開發團隊和 Amazon Managed Workflows for 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 使用者指南中的教學課程: AWS 帳戶 使用IAM角色委派跨 的存取權

運作方式

Amazon MWAA環境中使用的資源和服務無法供所有 AWS Identity and Access Management (IAM) 實體存取。您必須建立政策,授予 Apache Airflow 使用者存取這些資源的許可。例如,您需要將存取權授予 Apache Airflow 開發團隊。

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

您可以使用本主題中的JSON政策來為 中的 Apache Airflow 使用者建立政策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

如果使用者需要存取MWAAAPIs用於管理環境的所有 Amazon,則可能需要存取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:*: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/*" ] } ] }

唯讀主控台存取政策: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 MWAAAPIs執行任何動作。在 中指定 AdminUserOpViewerPublic角色{airflow-role},以自訂 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存取政策:AmazonMWAARestAPIAccess

若要存取 Apache Airflow REST API,您必須在IAM政策中授予 airflow:InvokeRestApi許可。在下列政策範例中,在 中指定 AdminUserOpViewerPublic角色,{airflow-role}以自訂使用者存取層級。如需詳細資訊,請參閱 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金鑰,為此操作套用更精細的存取控制。如需詳細資訊,請參閱 aws:SourceVpc

  • 此政策中的 Resource 欄位可用來指定 Amazon MWAA環境的 Apache Airflow 角色型存取控制角色。不過,它不支援政策 Resource 欄位中的 Amazon MWAA環境 ARN(Amazon Resource Name)。

Apache Airflow CLI政策:AmazonMWAAAirflowCliAccess

如果需要執行 Apache Airflow CLI命令 (例如 ),使用者可能需要存取AmazonMWAAAirflowCliAccess許可政策trigger_dag。它不允許使用者在 Amazon MWAA主控台上檢視環境,或使用 Amazon MWAAAPIs來執行任何動作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "airflow:CreateCliToken" ], "Resource": "arn:aws:airflow:${Region}:${Account}:environment/${EnvironmentName}" } ] }

建立JSON政策

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

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

  2. 選擇 建立政策

  3. 選擇 (JSON) 索引標籤。

  4. 新增您的JSON政策。

  5. 選擇檢閱政策

  6. 名稱描述的文字欄位中輸入值 (選用)。

    例如,您可以命名政策 AmazonMWAAReadOnlyAccess

  7. 選擇 建立政策

將政策連接至開發人員群組的範例使用案例

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

建立mazonMWAAFullConsoleAccess 政策
  1. 下載 A mazonMWAAFullConsoleAccess 存取政策

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

  3. 選擇 建立政策

  4. 選擇 (JSON) 索引標籤。

  5. 貼上 JSON的政策AmazonMWAAFullConsoleAccess

  6. 取代下列值:

    1. {your-account-id} – AWS 您的帳戶 ID (例如 0123456789)

    2. {your-kms-id} – 客戶受管金鑰的唯一識別符,僅適用於使用客戶受管金鑰進行靜態加密的情況。

  7. 選擇檢閱政策

  8. 名稱AmazonMWAAFullConsoleAccess中輸入 。

  9. 選擇 建立政策

建立mazonMWAAWebServerAccess 政策
  1. 下載 A mazonMWAAWebServerAccess 存取政策

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

  3. 選擇 建立政策

  4. 選擇 (JSON) 索引標籤。

  5. 貼上 JSON的政策AmazonMWAAWebServerAccess

  6. 取代下列值:

    1. {your-region} – Amazon MWAA環境的區域 (例如 us-east-1)

    2. {your-account-id} – AWS 您的帳戶 ID (例如 0123456789)

    3. {your-environment-name} – 您的 Amazon MWAA環境名稱 (例如 MyAirflowEnvironment)

    4. {airflow-role}Admin Apache Airflow 預設角色

  7. 選擇檢閱政策

  8. 名稱AmazonMWAAWebServerAccess中輸入 。

  9. 選擇 建立政策

建立mazonMWAAAirflowCliAccess 政策
  1. 下載 A mazonMWAAAirflowCliAccess 存取政策

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

  3. 選擇 建立政策

  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. 選取AirflowDevelopmentGroup

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

後續步驟?