Help us understand the problem. What is going on with this article?

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

west-hiroaki
サーバサイドエンジニアで、フリーランスとして働かせていただいています。 現在は、とあるソシャゲ開発&運営会社で、API開発要員として従事中です。
http://24w.jp/blog/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away