yotiky Tech Blog

とあるエンジニアの備忘録

Azure Managed ID を利用する

目次

概要

Managed ID は、 Azure Active Directory (Azure AD) で提供されるリソースに割り当てられた ID 。 Managed ID を有効にすることで Azure AD による管理と資格情報を使わないサービス間の認証を可能にする。

以前は Azure Managed Service ID の名称だった。

Managed ID の種類は2種類。

  • システム割り当て

    リソースに対して Azure AD によって作成される。ライフサイクルはリソースとひも付き、リソースに対して1対1となる。

  • ユーザー割り当て

    各リソースとは別にスタンドアローンとして作成される。ライフサイクルは独自になり、複数のリソースに割り当てて共有することができる。

docs.microsoft.com

f:id:yotiky:20210131142751p:plain(引用)

基本的な流れ。

  • Managed ID をサポートするサービス(Source)に対して ID を有効にする。
  • Azure AD 認証をサポートしているサービス(Target)に対して、上記 ID にアクセスを割り当てる。
  • プログラムからは接続情報などは用いず、各 Target のエンドポイントを使ってアクセスする。

docs.microsoft.com

Azure Functions にアクセスを割り当てる場合

対象の Azure Functions を開いて設定から ID を選択する。

f:id:yotiky:20210130214151p:plain:w300

システム割り当て済みをオンにする。

f:id:yotiky:20210130214226p:plain:w300

例えば App Configuration や Azure Storage を開いてアクセス制御(IAM)を選択し、Functions にロールの割り当てを追加する。

f:id:yotiky:20210131031856p:plain

Azure Key Vault ではアクセス制御(IAM)ではなく、アクセスポリシーを使って許可を与える。シークレット、キー、証明書に対して、各リソースがどのような操作を実行できるかを細かく設定できる。

f:id:yotiky:20210131150500p:plain

Azure Key Vault アクセス ポリシーを割り当てる (ポータル) | Microsoft Docs

プログラムからは、App Configuration の設定のアクセスキーからエンドポイントを取得してこれを使って接続する。

class Startup : FunctionsStartup
{
    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        
        builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
                options.Connect(new Uri(builtConfig["AppConfigEndpoint"]), new ManagedIdentityCredential()));
    }
}

マネージド ID を使用して App Configuration にアクセスする - Azure App Configuration | Microsoft Docs

Blob ストレージの場合。

    var containerEndpoint = string.Format("https://{0}.blob.core.windows.net/{1}",
                                                accountName,
                                                containerName);
    var containerClient = new BlobContainerClient(new Uri(containerEndpoint),
                                                                    new DefaultAzureCredential());

マネージド ID を使用してデータへのアクセスを認証する - Azure Storage | Microsoft Docs

Key Vault もエンドポイントを使って接続する。

class Startup : FunctionsStartup
{
    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
            var builtConfig = builder.ConfigurationBuilder.Build();

            builder.ConfigurationBuilder.AddAzureKeyVault(new Uri(builtConfig["KeyVaultEndpoint"]), new DefaultAzureCredential());
    }
}

関連記事

参考