このエントリは2022/07/22現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容からの乖離が発生する可能性があります。
問い合わせ
いつもと違う方から、以下のような問い合わせが届いた。
現在Standard SKUのLogic Appsでワークフローを作成している。Managed Identityで認証させてBlob storageのBlobを取得するため、Azure Blob Storageコネクターをこのワークフローで使おうと検討して試行している。VNetに接続しないBlob storageの場合は問題なくこのコネクターで接続できたのだが、VNet統合し、Blob storageへのアクセスにService EndpointやPrivate Endpointを使うと、認証に失敗してアクセスできない。これを回避するにはどうすればよいか?
ネットワークトポロジーは以下のような感じ。

Logic Appsのコネクターとは、以下のようなもの。
Azure Blob Storage
https://docs.microsoft.com/connectors/azureblobconnector/
この中の、Blobコンテンツを取得する (v2) が今回課題になっているもの。
https://docs.microsoft.com/ja-jp/connectors/azureblobconnector/#blob-コンテンツを取得する-(v2)
https://docs.microsoft.com/en-us/connectors/azureblobconnector/#get-blob-content-(v2)
そして、エラーとはこのようなもの。
{
"status": 403,
"message": "This request is not authorized to perform this operation.\r\nclientRequestId: fc825355-0558-4b89-9da0-cb34febd3517",
"error": {
"message": "This request is not authorized to perform this operation."
},
"source": "azureblob-je.azconn-je-001.p.azurewebsites.net"
}
回避策
現時点では、このコネクターが正しく機能していないので、HTTPコネクターでBlob Storage REST APIを呼び出すしかない。Blob StorageのREST APIは以下を参照。
Get Blob
https://docs.microsoft.com/rest/api/storageservices/get-blob
具体的な構成方法
ふつうにコネクターに設定すればよいが、注意点は以下。
必須HTTP Header
Get Blobの場合、Authorization、Date (もしくはx-ms-date) 、そしてx-ms-versionを指定する必要がある。x-ms-dateは、以下の式を構成しておく。
formatDateTime(utcNow(),'r')
x-ms-versionは現在の最新でよいので、2021-06-08を指定する。AuthorizationはManaged Identity認証を使うので、ここでHTTP Headerとして明示的に指定する必要はない。
認証の構成
認証の設定フィールドは、”Add new parameter” をクリックすると現れる。ここで、以下のように設定する。Storageの場合、Audienceは必須なので注意。
- 認証の種類 (Authentication type) : マネージドID (Managed identity)
- マネージドID (Managed identity) : システム割り当てマネージドIDもしくは、ユーザー割り当てマネージドID
- 対象ユーザー (Audience) : https://storage.azure.com/
なお、Audienceとして指定するURIは、API Managementのドキュメントがわかりやすい。
マネージド ID を使用してバックエンド サービスで認証する / Use managed identity to authenticate with a backend service
https://docs.microsoft.com/azure/api-management/api-management-authentication-policies#use-managed-identity-to-authenticate-with-a-backend-service
これらの設定が終了すると、以下のような設定になっているはず。ここでURIは
https://{storage account}.blob.core.windows.net/{Blob Container}/{Blob}
の形式で指定している。

これでおしまい。
テスト
以下は、上記の設定をHTTP Request/Responseではさみ、Query parameterとしてBlobのファイル名を指定できるLogic Appsを作成し実行してみた結果(いつものファイルなのはご愛敬)。
