Azure Functions (Python) でマネージド ID を使ってトークンを取得する

Azure Function のマネージド ID を有効化して、ローカルのエンドポイント (MSI_ENDPOINT) からトークンを取得してみます。

func newHttpTrigger を選択したときに生成されるコードを編集して、以下のコードを作成しました。

# __init__.py
import os
import logging

import azure.functions as func
from requests import get

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    # The two lines below are available only when managed ID enabled 
    msi_endpoint = os.getenv('MSI_ENDPOINT')
    msi_secret = os.getenv('MSI_SECRET')

    headers = {
        'secret': msi_secret
    }
    params = {
        'resource': 'https://vault.azure.net',
        'api-version': '2017-09-01'
    }
    response = get(url=msi_endpoint, headers=headers, params=params)

    logging.info(response.text)
    return func.HttpResponse('function was called')

resource の部分には、 Azure AD 認証をサポートするサービスを指定する必要があります。 今回は Key Vault を指定しました。 docs.microsoft.com

マネージド ID をローカルでテストする方法は今のところなさそうなので、 Function App に発行 (publish) して動作確認します。