Jenkins

Jenkinsでユーザーに権限を付与してアクションを制限する

More than 3 years have passed since last update.


目的

Jenkinsのセキュリティ対応。

デフォルトの状態だと、JenkinsのURLにアクセス出来る人であれば、全ての機能をいじることが可能で危険すぎるため、以下のセキュリティ対策を行います。


  • ユーザーアカウントを作成してログイン必須にする。

  • ユーザーに権限を付与して行動を制限する。



手順メモ


権限付与プラグインのインストール


  1. メニューから、「Jenkinsの管理」->「プラグインの管理」を選択して、プラグインマネージャーページを開く。


  2. 「利用可能」タブ内の「その他(security)」カテゴリにある「Role-based Authorization Strategy」をチェックして、「再起動せずにインストール」ボタンを押す。

    アップデートセンター__Jenkins_.png


これでプラグインがインストールされます。

試した感じだと、このプラグインを反映させるために、Jenkinsの再起動は必要なかったです。


プラグインを有効化


  1. メニュー「Jenkinsの管理」-> 「グローバルセキュリティの設定」を選択して、グローバルセキュリティの設定ページを開く。

  2. 「セキュリティを有効化」にチェックを入れる。

  3. チェックを入れると「アクセス制御」という項目が追加されるので、「ユーザー情報」で「Jenkinsのユーザーデータベース」を選択する。

    これによりユーザーの登録を行うことが可能になります。

  4. 見知らぬユーザーにサインアップされないように、「ユーザーにサインアップを許可」のチェックを外す。

  5. 「アクセス制御」内の「権限管理」で「Role-Based Strategy」を選択する。

    これにより、インストールした「Role-based Authorization Strategy」プラグインが有効になり、権限設定可能になります。

  6. 「保存」ボタンを押して設定を反映する。

貼り付けた画像_2016_01_13_14_14.png


ユーザーを登録

権限を付与するテスト用ユーザーを作成します。

例として、admin権限を所持させるtest1と、閲覧・ジョブ実行権限を所持させるtest2を作成します。


  1. セキュリティを有効にして保存ボタンを押すとユーザー登録ページが表示されるので、権限確認用に「test1」ユーザーを作成する。

    BB2D5FA3-0314-47FC-AB0D-82E9D6588F41.png

  2. 権限確認用にもう1人ユーザーを作成する。

    メニュー 「Jenkinsの管理」->「ユーザーの管理」を選択して、Jenkinsのユーザーデータベースページを開きます。

  3. 左メニューにある「ユーザー作成」リンクを押し、「test2」ユーザーを作成する。

    765520A4-1637-4BED-9111-04993A1CA771.png


権限の作成

プラグインをインストールした直後は、全てのアクションが可能なadmin権限しか無いので、その他の権限を作成します。

例として、閲覧と既存ジョブが実行可能なoperator権限を作成します。


  1. メニュー「Jenkinsの管理」->「Manage and Assign Roles」->「Manage Roles」を選択して、Manage Rolesページを開く。

  2. 「Global roles」の「Role to add」に「operator」と入力してAddボタンを押す。

  3. 一覧にoperatorが追加されるので、以下の権限にチェックする。


    • 全体のRead

    • ジョブのBuild, Cancel, Read

    • ビューのRead



  4. 「Save」ボタンを押して権限設定を反映させる。

61266FF8-4F04-4DCD-9725-BC721E1A8280.png


ユーザーに権限を付与

作成したユーザーと権限を紐付けます。

例として、test1ユーザーにadmin権限を、test2ユーザーにoperator権限を付与します。

それと、本来必要ないですが、id入力をミスした例として、存在していないtest3ユーザーにも権限を付与します。


  1. メニュー「Jenkinsの管理」->「Manage and Assign Roles」->「Assign Roles」を選択して、Assign Rolesページを開く。   

  2. 「User/group to add」に「test1」と入力して、Addボタンを押す。


  3. 同じく、「test2」と入力して、Addボタンを押す。   

  4. 同じく、「test3」と入力して、Addボタンを押す。

    ※ test3ユーザーは存在していませんので、本来必要ありません。

     追加したのは、存在していないユーザーに権限を付与しようとするとどうなるかを確認するためです。


  5. Global rolesの各ユーザーに権限を付与する。


    • test1ユーザーは、adminにチェック

    • test2ユーザーは、operatorにチェック

    • test3ユーザーは、admin, operator両方にチェック

       

      ※注意

      Anonymousユーザーとは、非ログインユーザーのことです。

      最終的には全ての権限を外すべきですが、確認が終わるまでは絶対adminのチェックを外さない方がいいです。

      このページでのユーザー追加は入力式になっており、しかも登録時に存在チェックが行われていませんので、入力ミスが発生する可能性があります。

      ミスをすることにより、admin権限を所持したユーザーが存在しない状態になり、どうすることもできなくなるのを回避するためです。



  6. 上記を実行するとこの状態になっている。一旦「Save」ボタンを押して設定を反映させる。

    ACFEE14C-B7D6-4928-9738-032393B4B8D5.png


  7. 再度Assign Rolesページを開くと、ユーザーIDの左横にアイコンが表示されている。

    Jenkins.png

    test1, test2ユーザーには人のアイコンが表示されており、存在しているユーザーであることを示しています。

    また、存在していないtest3ユーザーには警告アイコンが表示されています。

    これにより、入力ミスが無いことを確認可能です。(一旦保存するしかないのが難点ですが・・・)

  8. test3ユーザーを削除し、Anonymousユーザーから権限剥奪する。

    ユーザーの存在チェックが行えたので、test3ユーザーは必要なくなりました。

    また、test1ユーザーがadmin権限を保持していることが確定しましたので、Anonymousユーザーの権限は必要なくなりました。

    test3ユーザーを削除、Anonymousユーザーの全ての権限チェックを外して「Save」ボタンを押して権限を反映します。

    Jenkins.png



動作確認

以上で設定は完了しましたので、動作確認してみます。

Jenkinsのトップページにアクセスすると、権限設定前はジョブの一覧が表示されていましたが、ログインページが表示されるようになります。

Jenkins.png

まず、test1ユーザーでログインします。

admin権限を所持していますので、Jenkinsの設定を更新可能ですし、新しいジョブも登録可能です。

Jenkins.png

次に、test2ユーザーでログインします。

operator権限のみ所持していますので、Jenkinsの設定を更新することはできませんし、新しいジョブも作成することが出来ません。

Jenkins.png