使用 AWS Secrets Manager 秘密設定 Apache Airflow 連線 - Amazon Managed Workflows for Apache Airflow

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

使用 AWS Secrets Manager 秘密設定 Apache Airflow 連線

AWS Secrets Manager 是 Amazon Managed Workflows for Apache Airflow 環境上支援的替代 Apache Airflow 後端。本主題說明如何使用 AWS Secrets Manager 在 Amazon Managed Workflows for Apache Airflow 上安全存放 Apache Airflow 變數和 Apache Airflow 連線的秘密。

注意

步驟一:提供 Amazon MWAA 存取 Secrets Manager 私密金鑰的許可

Amazon MWAA 環境的執行角色需要對 中的秘密金鑰進行讀取存取 AWS Secrets Manager。下列 IAM 政策允許使用 AWS 受管 SecretsManagerReadWrite 政策進行讀寫存取。

將政策連接至您的執行角色
  1. 在 Amazon MWAA 主控台上開啟環境頁面

  2. 選擇環境。

  3. 許可窗格中選擇您的執行角色。

  4. 選擇連接政策

  5. SecretsManagerReadWrite篩選條件政策文字欄位中輸入 。

  6. 選擇連接政策

如果您不想使用 AWS 受管許可政策,您可以直接更新環境的執行角色,以允許任何層級的 Secrets Manager 資源存取權。例如,下列政策陳述式會授予您在 Secrets Manager 中特定 AWS 區域中建立的所有秘密的讀取存取權。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "arn:aws:secretsmanager:us-west-2:012345678910:secret:*" }, { "Effect": "Allow", "Action": "secretsmanager:ListSecrets", "Resource": "*" } ] }

步驟 2:建立 Secrets Manager 後端做為 Apache Airflow 組態選項

下一節說明如何在 AWS Secrets Manager 後端的 Amazon MWAA 主控台上建立 Apache Airflow 組態選項。如果您在 中使用相同名稱的組態設定airflow.cfg,則在下列步驟中建立的組態將優先並覆寫組態設定。

  1. 在 Amazon MWAA 主控台上開啟環境頁面

  2. 選擇環境。

  3. 選擇編輯

  4. 選擇 Next (下一步)

  5. 在 Airflow 組態選項窗格中選擇新增自訂組態。 新增下列鍵/值對:

    1. secrets.backend: airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend

    2. secrets.backend_kwargs{"connections_prefix" : "airflow/connections", "variables_prefix" : "airflow/variables"}這會將 Apache Airflow 設定為尋找 和 airflow/variables/* 路徑的連線字串airflow/connections/*和變數。

      您可以使用查詢模式來減少 Amazon MWAA 代表您對 Secrets Manager 進行的 API 呼叫次數。如果您未指定查詢模式,Apache Airflow 會搜尋已設定後端中的所有連線和變數。透過指定模式,您可以縮小 Apache Airflow 看起來的可能路徑。這可降低將 Secrets Manager 與 Amazon MWAA 搭配使用時的成本。

      若要指定查詢模式,請指定 connections_lookup_patternvariables_lookup_pattern 參數。這些參數接受 RegEx 字串做為輸入。例如,若要尋找開頭為 的秘密test,請在 中輸入下列內容secrets.backend_kwargs

      { "connections_prefix": "airflow/connections", "connections_lookup_pattern": "^test", "variables_prefix" : "airflow/variables", "variables_lookup_pattern": "^test" }
      注意

      若要使用 connections_lookup_patternvariables_lookup_pattern,您必須安裝 7apache-airflow-providers-amazon.3.0 版或更新版本。如需將 的 provder pacakge 更新至較新版本的詳細資訊,請參閱 指定較新的提供者套件

  6. 選擇 Save (儲存)。

步驟三:產生 Apache Airflow AWS 連線 URI 字串

若要建立連線字串,請使用鍵盤上的「tab」鍵來縮排連線物件中的鍵/值對。我們也建議您在 Shell 工作階段中為extra物件建立變數。下一節會逐步引導您使用 Apache Airflow 或 Python 指令碼,為 Amazon MWAA 環境產生 Apache Airflow 連線 URI 字串。

Apache Airflow CLI

下列 Shell 工作階段使用本機 Airflow CLI 來產生連線字串。如果您沒有安裝 CLI,建議您使用 Python 指令碼。

  1. 開啟 Python shell 工作階段:

    python3
  2. 輸入以下命令:

    >>> import json
  3. 輸入以下命令:

    >>> from airflow.models.connection import Connection
  4. extra物件的 shell 工作階段中建立變數。將 YOUR_EXECUTION_ROLE_ARN 中的範例值替換為執行角色 ARN,以及 YOUR_REGION 中的區域 (例如 us-east-1)。

    >>> extra=json.dumps({'role_arn': 'YOUR_EXECUTION_ROLE_ARN', 'region_name': 'YOUR_REGION'})
  5. 建立連線物件。以 Apache Airflow 連線myconn的名稱取代 中的範例值。

    >>> myconn = Connection(
  6. 使用鍵盤上的「tab」鍵來縮排連線物件中的下列每個鍵/值對。以紅色取代範例值。

    1. 指定 AWS 連線類型:

      ... conn_id='aws',
    2. 指定 Apache Airflow 資料庫選項:

      ... conn_type='mysql',
    3. 在 Amazon MWAA 上指定 Apache Airflow UI URL:

      ... host='288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com/home',
    4. 指定要登入 Amazon MWAA 的 AWS 存取金鑰 ID (使用者名稱):

      ... login='YOUR_AWS_ACCESS_KEY_ID',
    5. 指定要登入 Amazon MWAA 的 AWS 秘密存取金鑰 (密碼):

      ... password='YOUR_AWS_SECRET_ACCESS_KEY',
    6. 指定 extra Shell 工作階段變數:

      ... extra=extra
    7. 關閉連線物件。

      ... )
  7. 列印連線 URI 字串:

    >>> myconn.get_uri()

    您應該會在回應中看到連線 URI 字串:

    'mysql://288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com%2Fhome?role_arn=arn%3Aaws%3Aiam%3A%3A001122332255%3Arole%2Fservice-role%2FAmazonMWAA-MyAirflowEnvironment-iAaaaA&region_name=us-east-1'
Python script

下列 Python 指令碼不需要 Apache Airflow CLI。

  1. 複製下列程式碼範例的內容,並在本機儲存為 mwaa_connection.py

    import urllib.parse conn_type = 'YOUR_DB_OPTION' host = 'YOUR_MWAA_AIRFLOW_UI_URL' port = 'YOUR_PORT' login = 'YOUR_AWS_ACCESS_KEY_ID' password = 'YOUR_AWS_SECRET_ACCESS_KEY' role_arn = urllib.parse.quote_plus('YOUR_EXECUTION_ROLE_ARN') region_name = 'YOUR_REGION' conn_string = '{0}://{1}:{2}@{3}:{4}?role_arn={5}&region_name={6}'.format(conn_type, login, password, host, port, role_arn, region_name) print(conn_string)
  2. 紅色取代預留位置。

  3. 執行下列指令碼以產生連線字串。

    python3 mwaa_connection.py

步驟四:在 Secrets Manager 中新增變數

下一節說明如何在 Secrets Manager 中建立變數的秘密。

建立秘密
  1. 開啟 AWS Secrets Manager 主控台

  2. 選擇儲存新機密

  3. 選擇其他類型的秘密

  4. 指定要存放在此秘密窗格中的金鑰/值對上,選擇純文字

  5. 以下列格式將變數值新增為純文字

    "YOUR_VARIABLE_VALUE"

    例如,若要指定整數:

    14

    例如,若要指定字串:

    "mystring"
  6. 對於加密金鑰,請從下拉式清單中選擇 AWS KMS 金鑰選項。

  7. 密碼名稱的文字欄位中輸入下列格式的名稱。

    airflow/variables/YOUR_VARIABLE_NAME

    例如:

    airflow/variables/test-variable
  8. 選擇 Next (下一步)

  9. 設定秘密頁面上的秘密名稱和描述窗格中,執行下列動作。

    1. 針對秘密名稱,請提供秘密的名稱。

    2. (選用) 針對描述,提供秘密的描述。

    選擇 Next (下一步)

  10. 設定輪換 - 選用保留預設選項,然後選擇下一步

  11. 針對您要新增的任何其他變數,在 Secrets Manager 中重複這些步驟。

  12. 檢閱頁面上,檢閱您的秘密,然後選擇儲存

步驟 5:在 Secrets Manager 中新增連線

下一節說明如何在 Secrets Manager 中建立連線字串 URI 的秘密。

建立秘密
  1. 開啟 AWS Secrets Manager 主控台

  2. 選擇儲存新機密

  3. 選擇其他類型的秘密

  4. 指定要存放在此秘密窗格中的金鑰/值對上,選擇純文字

  5. 以下列格式將連線 URI 字串新增為純文字

    YOUR_CONNECTION_URI_STRING

    例如:

    mysql://288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com%2Fhome?role_arn=arn%3Aaws%3Aiam%3A%3A001122332255%3Arole%2Fservice-role%2FAmazonMWAA-MyAirflowEnvironment-iAaaaA&region_name=us-east-1
    警告

    Apache Airflow 會剖析連線字串中的每個值。您不得使用單引號或雙引號,否則會將連線剖析為單一字串。

  6. 對於加密金鑰,從下拉式清單中選擇 AWS KMS 金鑰選項。

  7. 密碼名稱的文字欄位中輸入下列格式的名稱。

    airflow/connections/YOUR_CONNECTION_NAME

    例如:

    airflow/connections/myconn
  8. 選擇 Next (下一步)

  9. 設定秘密頁面上的秘密名稱和描述窗格中,執行下列動作。

    1. 針對秘密名稱,請提供秘密的名稱。

    2. (選用) 針對描述,提供秘密的描述。

    選擇 Next (下一步)

  10. 設定輪換 - 選用保留預設選項,然後選擇下一步

  11. 針對您要新增的任何其他變數,在 Secrets Manager 中重複這些步驟。

  12. 檢閱頁面上,檢閱您的秘密,然後選擇儲存

範本程式碼

資源

後續步驟?