APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Azure Container Apps - DaprのマネージドID対応がGAしました

はじめに

こんにちは、ACS事業部の吉川です。
Igniteは終わってしまいましたが、発表されたアップデート内容を少しづつご紹介していければと思っています。
ということで、以下の記事でも少し触れた Azure Container Apps の Dapr に関するアップデートのうち、マネージドID対応 についてご紹介します。

techblog.ap-com.co.jp

Dapr?

Daprとは何か?という方もいると思いますので簡単にご紹介します。
DaprはMicrosoft主導でOSSとして開発されている分散アプリケーション用ランタイムです。
多様なクラウドサービスやソフトウェアに対し、抽象化されたインターフェースを提供してくれるものです。
本ブログでも過去にDaprをテーマとした記事がいくつか投稿されています。合わせてご参照いただけますと幸いです。

techblog.ap-com.co.jp

DaprはAzure Container Appsと統合されており、簡単に利用することができるようになっています。

マネージドID対応すると何がうれしいの?

Azure Container AppsのDaprがマネージドIDに対応した、というのが今回紹介したい内容です。

azure.microsoft.com

これまではDaprから接続する先のサービスに対する認証情報を、設定として記述する必要がありました。
マネージドIDに対応したことで、接続先がAzure AD認証に対応したAzureサービスであれば認証情報を記載する必要がなくなります。
サービスプリンシパルを作ったり管理したりという点から解放されるのが大きなメリットですね。

実際に試してみる

いくつかリソースを作成し、マネージドIDでの接続を確認してみましょう。
まずはAzure Container Appsのリソースを作成していきましょう。

# リソース名/リージョンの定義
rgName=rg-sample
location=japaneast
caeName=cae-sample
acaName=aca-managedid

# リソースグループ作成
az group create -l $location -n $rgName

# Container Apps環境作成
az containerapp env create -n $caeName -g $rgName -l $location

# Container App作成
az containerapp create -n $acaName -g $rgName \
  --environment $caeName --system-assigned \
  --enable-dapr --dapr-app-id sampleapp \
  --image nginx:latest

接続先のリソースたち

Daprが対応している接続先リソースについては以下のページにまとめられています。

docs.dapr.io

利用用途ごとにコンポーネントブロックとして分類されています。
ブロックの種別ごとに、2つピックアップしてご紹介します。

State stores - Azure Blob Storage

State storeは状態の保存/永続化に利用するブロックです。
Azureサービスとしては

  • Azure Blob Storage
  • Azure CosmosDB(SQL API)
  • Azure SQL Server
  • Azure Table Storage

の4種に対応していますが、今回はBlob Storageを例とします。

saName=testfordaprmanagedid
containerName=daprcontainer

# ストレージアカウント作成
az storage account create -n $saName -g $rgName -l $location

# Blobコンテナー作成
az storage container create -n $containerName --account-name $saName

BlobコンテナーのIAM設定で、Container AppのマネージドIDに対し ストレージ BLOB データ共同作成者 ロールを割り当てます。

Container App用のDapr設定は以下のように記述します。
パラメーターとしてストレージアカウントの名前とBlobコンテナーの名前しか記述しておらず、ストレージアカウントに対する認証の情報を記載していない ことに注目してください。

componentType: state.azure.blobstorage
version: v1
metadata:
- name: accountName
  value: "testfordaprmanagedid"
- name: containerName
  value: "daprcontainer"

これをContainer Apps環境にセットします。

az containerapp env dapr-component set -n $caeName -g $rgName \
  --dapr-component-name blob --yaml blob.yaml

Container Appのコンテナ内で以下のコマンドを実行して動作を確認してみましょう。

curl -X POST http://localhost:${DAPR_HTTP_PORT}/v1.0/state/blob \
  -H "Content-Type: application/json" \
  -d '[
        {
          "key": "test",
          "value": "Test for Azure Blob storage"
        }
      ]'

設定が問題なくできていれば、上記リクエストの key の値をファイル名としたBlobが作られています。

中の値の取得についても以下のとおり。

curl http://localhost:${DAPR_HTTP_PORT}/v1.0/state/blob/test
"Test for Azure Blob storage"

Daprに対しID/パスワードのような認証情報を持たせることなく、IAMロールの設定のみでBlobにアクセスできたことが確認できました。

Secret stores - Azure Key Vault

続いて紹介するのは Secret stores です。
秘匿情報をシークレットストアから呼び出して利用するためのブロックで、Azureサービスとしては Azure Key Vault に対応しています。
ちなみに、Azure Container AppsでのSecret storesブロック対応もIgniteに合わせてGAしたばかりの新機能です。

azure.microsoft.com

kvName=keyvaultfordapr

# Key Vault作成
az keyvault create -n $kvName -g $rgName -l $location

Key Vaultのアクセスポリシーで、Container AppのマネージドIDに シークレット取得 権限を付与します。

Container Appから読み出すシークレットも登録しておきましょう。
ここでは testSecret という名前で This is Test Value! という値をセットしました。

az keyvault secret set --vault-name $kvName --name testSecret --value 'This is Test Value!'

Container App用のDapr設定は以下のとおりです。
ストレージアカウントのときと同様、Key Vaultに対する認証の情報は記載しておらず、Key Vaultの名前のみを設定しています。

componentType: secretstores.azure.keyvault
version: v1
metadata:
- name: vaultName
  value: keyvaultfordapr

Container Apps環境にセットします。

az containerapp env dapr-component set -n $caeName -g $rgName \
  --dapr-component-name azurekeyvault --yaml azurekeyvault.yaml

Container Appのコンテナ内で以下のコマンドを実行することで、Key Vault内のシークレットの値を読み出すことができます。

curl http://localhost:${DAPR_HTTP_PORT}/v1.0/secrets/azurekeyvault/testSecret
{"testSecret":"This is Test Value!"}

明示的に認証情報をDaprに渡すことなく、Key Vaultにアクセスできることが確認できました。

おわりに

Azure Container AppsのDaprがマネージドIDに対応したことで、サービスプリンシパルを作成したり、シークレットの管理をする必要がなくなりました。
便利に使える機能がGAしましたので、積極的に活用していきたいですね。

本記事の投稿者: 吉川 俊甫
AKS/ACAをメインにインフラ系のご支援を担当しています。
Shunsuke Yoshikawa - Credly