[Looker]ユーザー属性を用いたリモートリポジトリへのHTTPS認証を試してみた #looker

2021.01.15

Lookerを使用する際は、基本的に何かしらのGitのホスティングサービス上のリモートリポジトリを設定する必要があります。Lookerで使用できるものだと、Githubが有名かと思います。

この設定を行う時には、HTTPS認証やSSH認証などの方法があります。 詳しくは下記の公式Docに書いてあります。

この公式Docに記載されているHTTPS認証の「Multiple Account HTTPS Authentication with User Attributes」について、挙動がどうなるのかイメージがつかなかったので試してみました。

その検証内容を本ブログにてまとめます。

実装手順

1. リモートリポジトリの設定

使用先のリモートリポジトリで必要なユーザー分「Invit a collaborator」を行います。この認証方法ではGithubのアカウント情報を対象のリモートリポジトリの認証に用いるため、事前に権限を与えておく必要があるためです。

2. ユーザー属性の作成

この認証方法では、ユーザー属性(User attribute)を認証に用いるため、各ユーザーごとにGithubアカウント情報を格納するためのユーザー属性を作成します。

  • ユーザーネーム用

ここでは、User Accessを「Edit」にすることで、各ユーザーが自身のGithubアカウント情報を入れるようにしています。

  • パスワード用

User AccessをEditにすることはユーザーネーム用と同じなのですが、Hide Valuesを「Yes」にすることで、パスワードの内容がそのまま明記されず伏せ字表記となります。

Hide Valuesを「Yes」にすると、Domain Allowlistの設定も表示されるようになります。 この中には、対象となるリモートリポジトリのURLを入力します。

こちらはワイルドカードも使用できますので、あるGithubアカウント内の全リポジトリを対象としたい場合は「https://github.com/<Githubアカウント名>/*」としてあげるのがよいと思います。

3. ユーザー属性に値を入力

作成した2つのユーザー属性に対して、Githubのアカウント名とそのパスワードを入れてあげます。 この認証方法の場合ユーザーごとに情報の入力が必要なので、基本的には各ユーザーごとにGithubアカウントを設定する必要があります。

4. 対象のLookerプロジェクトでのGit設定

Lookerのプロジェクトに対してリモートリポジトリを設定する時(Configure Git)に下図の画面が出てくるので、ユーザー属性を認証に使用するように設定を行います。

この設定のポイントとしては、大きく3点あります。

1つ目は、一番上の選択肢はUse user attributes for username and passwordを選択することです。 これを選択しないと、これまでの作業を実施した意味がなくなってしまうので、注意しましょう。

2つ目は、Production Credentialsです。 こちらは、LookerのProductionモードにリモートリポジトリの情報をプルする際に使用されるGithubアカウント情報を入れる必要があります。 対象のリモートリポジトリへの読み取り権限があるGithubアカウント情報であればOKです。

3つ目は、Developent Mode Credentialsです。 こちらには、先程作成したユーザー属性をドロップダウンリストから選択してあげればOKです。

5. 結果確認

作成したユーザー属性欄が空白だったり、対象のリモートリポジトリへのアクセス権限がない場合には、下図のようにエラーが表示されるようになります。

ちなみに、対象のリモートリポジトリへのアクセス権限があるGithubアカウントをユーザー属性に指定している場合は、通常通りMerge&Deployまで出来るようになっています。

どういったときに使えるか?

では、この認証方法がどういったときに使用できるのか?を考えてみたいと思います。

HTTPS認証のもう一つの方法である「Single Account HTTPS Authentication」と比較して考えてみると、大きな違いとしては「対象のリモートリポジトリに対して、権限を持つGithubアカウントを所持していないと、productionモードへのデプロイが出来ない」ことだと思います。

そのため、以下のような場面でこの機能は使えるのかな、と感じています。

  • デプロイ等の開発権限管理をGitホスティングサービスのアカウントベースで行いたい時

  • 対象のプロジェクトに対して、コードの開発作業は行ってほしいが、デプロイは別担当者にお願いしたい時

最後に

いかがでしたでしょうか! 使い所が難しい機能かもしれないですが、こんな方法もあることを頭の片隅に入れておくと、いざというときに使えるかもしれません。

ぜひ、活用できそうな場面があれば検討してみてください。