Azure DevOps で Release のパイプラインを作成する際、サブスクリプションを選択して Authorize する必要がありますが、認証できないトラブルに遭遇している方をちょいちょい見かけます。
「error insufficient privileges to complete the operation」というエラーが多いかと。
解決策として、2つの方針があると思っています。
- 権限ある人に Service connection を作ってもらう
- 自分で作れるように権限を付与してもらう
後者は、主にAzure AD のユーザーの種類が「Guest」の人に対して強い権限を与えつつ、「外部コラボレーションの設定」をするような微妙な解決策なので、前者一択だと思っています。
権限ある人に Service connection を作ってもらう
Azure DevOps で設定をしますが、この設定してもらう人は Azure の管理者とか強い権限が必要です。そもそも Azure DevOps からデプロイをする = 外部から Azure にものをぶっこむプレイなので強い権限が必要なのです。
なお、この設定をする強い権限持っているユーザーは、Azure AD の「ユーザーの種類」が「Member」の方前提で話を進めます(ゲストユーザーだとまたひと手間かかる場合も...)。
以降の手順は、(何度も書きますが)強い権限持っている人に頼んでやってもらう内容になります。
Service Connection の作成
まず、Azure DevOps の画面の左下の Project Settings > Pipeline の Service connections > Service connections の New Service connection をクリックします。
あとは、この表示された画面を埋めるだけです。
もし、ここでサブスクリプションが表示されない場合は、Azure Portal 側で「サブスクリプション」の 「アクセス制御 (IAM)」に権限がない場合です。権限を付与しましょう。
ちなみに権限を付与できないユーザーだと終了です。
その場合はもうひとつの手順で進めましょうといいたいところですが、今度は権限を付与してもらわないとだめなのでムリゲーです。
Service Connection に Role を設定
Release パイプラインを作成するユーザーに Role を付与して、この権限が利用できるようにします。
「Role」をクリックしてユーザーを選択しましょう。「User」or「Administraotr」が選べますが、使わせるだけなら「User」で大丈夫です。
ここまでを強い権限マンにやってもらったら、あとは Release パイプラインを作る方が作業してみて、作った Service connection が Azure のサブスクリプションのドロップダウンから選べるか試しましょう。
これで解決です。
自分で作れるように権限を付与してもらう
実用する気がない無駄な権限付与と感じたので詳しくメモするのをやめました....。
というのも、Service connection を作成する人が、対象のAzure AD のユーザーの種類が「Member」であれば、前述の「権限ある人に Service connection を作ってもらう」対応をすればよいです。
Azure AD のユーザーの種類が「Guest」でどうしてもやりたいときに設定をする感じです。
前述の操作ができる強い権限を持った人が以下の手順をします。
- 権限を与えたい「Guest」ユーザーに、対象のサブスクリプションの アクセス制御(IAM)に権限を付与
- Azure AD の ユーザー > ユーザー設定 >「外部コラボレーションの設定」をする。詳しくは、後述の参考リンクに書いています。
権限は、「共同作成者」を与えればできることが確認できましたが、それより低い権限でもよいかもしれませんね(興味がないので調べてない)。
その後、権限を得た「Guest」ユーザーが Azure DevOps で Service connection の作成をする(つまり前述の設定をする)というだけです。
参考
その他トラブルシュートは以下の公式ドキュメントに記載があります。