サービス プリンシパルを使用して Azure Function から Batch プールにアクセスしようとしていますが、理解できない認証の問題が発生しています。サービス プリンシパルを使用した最初のログインは正常に機能しますが、資格情報を使用してバッチ プールにアクセスすると、401 が返されます。
以下は、キーポイントにコメントを付けた私のコードの要約版です
module.exports.dispatch = function (context) {
MsRest.loginWithServicePrincipalSecret('AppId', 'Secret', 'TennantId', function(err, credentials){
if (err) throw err;
// This works as it prints the credentials
context.log(credentials);
var batch_client = new batch.ServiceClient(credentials, accountUrl);
batch_client.pool.get('mycluster', function(error, result){
if(error === null)
{
context.log('Accessed pool');
context.log(result);
}
else
{
//Request to batch service returns a 401
if(error.statusCode === 404)
{
context.log('Pool not found yet returned 404...');
}
else
{
context.log('Error occurred while retrieving pool data');
context.log(error);
}
//'Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly.
context.res = { body: error.body.message.value };
context.done();
}
});
});
};
サービス プリンシパルを使用した最初のログインは問題なく機能するのに、それが返す資格情報がバッチ プールにアクセスできないのはどうしてでしょうか?
実際のエラーは、リクエストの認証ヘッダーを確認するように指示していますが、これは確認でき、Authorization ヘッダーさえ存在しません。
バッチ アカウントの Active Directory アクセス制御を 3 回確認しました。アプリ ID とシークレットは、バッチ アカウントの所有者のものです。次に何を試すべきか?