ふぞろいのGENGOたちスマートフォン用の表示で見るふぞろいのGENGOたちこの広告は、90日以上更新していないブログに表示しています。CIはじめにHudsonを標準状態のままで使用した場合、Hudsonにアクセスできる全てのユーザが、Hudsonの全ての機能を制限なく利用できてしまいます。Hudsonの機能を熟知しているチーム内でHudsonを使用するのであれば、この標準状態の方が設定に煩わされない分、簡便に運用できるので都合が良いかもしれません。一般的には、間違った操作によってHudsonが動作しなくなることを防ぐために、「Hudsonの管理者」と「Hudsonの利用者」くらいの最低限の区別をした方が良いのではないかと思います。そこで、この記事では、Hudsonのユーザーデータベースを使用して、Hudsonの操作権限を制御する方法について説明したいと思います。説明を簡素化するために、Hudsonの公式サイトにはない用語や分類を用いて説明していますので、その点はご了承ください。操作権限を制御する前にconfig.xmlのバックアップ間違った設定をしてしまうと、全てのユーザがHudsonにログインできなくなったり、ログインできたとしてもHudsonのシステム設定を変更できなくなったりします。操作権限の設定は、HUDSON_HOMEディレクトリ配下の「config.xml」に保存されるので、設定を変更する前にこのファイルをバックアップしておくと良いでしょう。securityの手順に従って、操作権限を制限しない状態にすることができます。Wikipediaのどの操作に該当するのかを私なりに分類したものです。操作権限には次の2種類の権限が存在します。「システムレベルの権限」は、「プロジェクトに依存しない操作」の権限になり、常にシステム全体に適用されます。Administer]の権限は、システム全体で「権限を与える」かどうかを決めることになります。これに対して「プロジェクトレベルの権限」は、「プロジェクトに依存する操作」の権限になり、システム全体に(プロジェクトに共通して)適用されるケースとプロジェクト別に適用されるケースを使い分けることができます。Configure]の権限は、システム全体で「権限を与える」に加えて、PRJ1またはPRJ2に対して「権限を与える」かどうかを決めることもできます。次に操作権限の構造を示します。権限設定の単位についてHudsonは、標準ではユーザー単位の権限設定機能しか備えていません。設定画面の中にグループという言葉も現れますが、後述するauthenticatedグループを除いて、グループに見立ててアカウントを共有するという意味ですのでご注意ください。Pluginを使用する必要があります。Pluginの名称と関連URLは次のとおりです。https://github.com/hudson/role-strategy-pluginなお、グループという用語を用いると誤解を招く恐れがあるので、アカウントを共有しないグループのことを、このプラグインの用語を用いてロールと呼ぶことにします。匿名(anonymous)ユーザーとauthenticatedグループについて匿名ユーザーは、Hudsonに登録されていないユーザーも含む全てのユーザーを代表するユーザーになります。authenticatedグループは、Hudsonに登録されている全てのユーザーを代表するユーザーになります。権限は次のOR条件で決定されます。権限は次のOR条件で決定されます。Read]」つまり、ある権限を匿名ユーザーに与えると、その権限をHudsonに登録されていないユーザーも含む全てのユーザーに与えたことになります。ある権限をauthenticatedグループに与えると、その権限をHudsonに登録されている全てのユーザーに与えたことになります。セキュリティポリシーについてセキュリティポリシーは、次の観点で検討すると良いでしょう。ログインしていないユーザー(匿名ユーザー)にジョブの状態を見せるかどうか。ユーザー/グループ/ロールのどの単位で権限を与えるのか。ユーザー/グループ/ロールに、CRUDのどの操作権限を与えるのか。「設定を変更した人」や「ビルドを実行した人」を特定する必要があるかどうか。プロジェクト別に権限を与える必要があるかどうか。これらを適切に検討しておくことで、次の問題を防ぐことができます。ジョブの公開範囲が必要以上に広くなってしまう。Hudsonの操作に不慣れな人がHudson環境を壊してしまう。権限の設定が複雑になりすぎて負担になる。操作権限の設定手順ここから、次の3種類の権限管理手段の設定手順を説明します。システム全体に適用される権限のみで管理する。プロジェクト別に適用される権限も使用して管理する。基本的な流れは次の通りです。アクセス制御を有効にするユーザー/グループ/ロールを追加する操作権限を設定する各ユーザーがサインアップする2つの開発プロジェクトのどちらかに対応する次の4つのジョブ(プロジェクト)が、Hudsonに登録されているものとします。システム全体に適用される権限のみで管理する。次のとおりに設定するものと仮定します。Read]の権限の必要性を説明するためだけのユーザーです。次の操作で操作権限の行列を開きます。Hudsonのトップ画面を開きます。[システムの設定]を選択します。[セキュリティを有効化]をチェックします。[ユーザー情報]セクションの[Hudsonのユーザーデータベース]を選択します。[権限管理]セクションの[行列による権限設定]を選択します。「ユーザー/グループの名前」と「操作権限」の行列が表示されます。次の操作でadminユーザーを追加します。Read]をチェックします。[追加するユーザー/グループ]に、"admin"と入力します。[追加]ボタンを押します。"admin"ユーザーが行列に追加されます。ユーザーを追加する際に、誤って[Enter]キーを押してしまった場合、[追加]ボタンが押されるのではなく、画面下部の[保存]ボタンが押されたことになります。不十分な設定のままで操作権限が保存されてしまうと復旧に一手間かかるので、Hudsonのシステム管理に必要な操作権限を一時的に匿名ユーザーに与えています。ユーザーがシステムにサインアップしていないことを表すアイコンです。次の操作でユーザーに操作権限を与えます。"admin"ユーザーの全ての権限をチェックします。Read]のチェックを外します。誤って[Enter]キーを押してしまったとしても、全ての権限をもつadminユーザーでHudsonのシステム設定を変更することができます。同様の操作でuser1〜user4ユーザーに操作権限を与えて、最後に画面下部の[保存]ボタンを押します。この状態でHudsonのトップ画面を開くと、ログイン画面が表示されるので、[サインアップ]を選択します。サインアップ画面が表示されるので、次の操作をします。すべての空欄に値を入力します。[サインアップ]ボタンを押します。[テキスト:]欄には、サインアップ画面に表示される認証用文字列を入力してください。サインアップに成功すると、[成功]と表示されてログイン済みの状態になります。Administer]の権限をもっているので、[Hudsonの管理]メニューが表示されています。Administer]の権限をもっていないので、[Hudsonの管理]メニューが表示されません。Read]の権限をもっていないので、Hudsonにログインすることができません。変わっていることが分かります。以上で(A)のケースの操作権限設定は完了です。プロジェクト別に適用される権限も使用して管理する。次のとおりに設定するものと仮定します。(A)に加えてPRJ1-BUILDジョブのBuild権限をもつ次の操作で操作権限の行列を開きます。Hudsonのトップ画面を開きます。[システムの設定]を選択します。[セキュリティを有効化]をチェックします。[ユーザー情報]セクションの[Hudsonのユーザーデータベース]を選択します。[権限管理]セクションの[行列による権限設定(プロジェクト単位)]を選択します。「ユーザー/グループの名前」と「操作権限」の行列が表示されます。(A)と同じ手順で各ユーザーに権限を与えます。この画面で設定できるのは「システム全体に適用される権限」だけです。次の操作でPRJ1-BUILD特有の操作権限を設定します。[PRJ1-BUILD]の設定画面を表示します。[権限設定(プロジェクト単位)の有効化]をチェックします。[追加するユーザー/グループ]に、"user2"と入力します。[追加]ボタンを押します。"user2"ユーザーが行列に追加されます。Build]をチェックします。Configure]をチェックします。画面下部の[保存]ボタンを押します。Read]を設定する必要はありません。Read]の権限をもっています)以上で(B)のケースの操作権限設定は完了です。ロール単位で権限を管理する。Pluginがインストール済みであると仮定します。次のとおりに「システム全体に適用される権限」を設定するものと仮定します。(A)のuser3ユーザー相当の権限をもつ次のとおりに「プロジェクト別に適用される権限」を設定するものと仮定します。名前が「PRJ2-」から始まるジョブの全ての権限をもつ次のとおりにロールとユーザーを関連付けるものと仮定します。user2次の操作でロール単位の権限設定を有効にします。Hudsonのトップ画面を開きます。[システムの設定]を選択します。[セキュリティを有効化]をチェックします。[ユーザー情報]セクションの[Hudsonのユーザーデータベース]を選択します。Strategy]を選択します。Roles]メニューが追加されます。次の操作でロール単位の権限設定の管理画面を表示します。[システムの設定]を選択します。Roles]を選択します。Roles]を選択します。次の操作で「システム全体に適用される権限」を設定します。add]に、"admin"と入力します。[Add]ボタンを押します。"admin"ロールの全ての権限をチェックします。他のロールも同様の方法で追加し、権限を与えます。次の操作で「プロジェクト別に適用される権限」を設定します。add]に、"PRJ1-job-build-mgr"と入力します。[Pattern]に、正規表現で"PRJ1-.*"と入力します。[Add]ボタンを押します。"PRJ1-job-build-mgr"ロールの権限をチェックします。他のロールも同様の方法で追加し、権限を与えます。[Save]ボタンを押します。ロール名の接頭語をPatternにマッチさせるジョブの接頭語は、一致している必要はありません。Roles]を選択します。次の操作で「システム全体に適用される権限」をもつロールにユーザーを割り当てます。add]に、"admin"と入力します。[Add]ボタンを押します。"admin"ユーザーに、"admin"ロールのチェックを付けます。他のユーザーも同様の方法で追加し、ロールを割り当てます。分かりにくくなってしまいましたが、adminユーザーとadminロールは完全に独立のものです。次の操作で「プロジェクト別に適用される権限」をもつロールにユーザーを割り当てます。add]に、"user2"と入力します。[Add]ボタンを押します。"user2"ユーザーに、"PRJ1-job-build-mgr"ロールのチェックを付けます。他のユーザーも同様の方法で追加し、ロールを割り当てます。以上で(C)のケースの操作権限設定は完了です。システム全体に適用される権限のみで管理する。メリットユーザー単位で管理するので分かりやすい。システム全体に適用される権限のみを管理するので分かりやすい。設定画面は1画面だけなので分かりやすい。デメリットユーザー数が増えた場合に煩雑になりやすい。プロジェクト別に管理担当者を割り当てるなどの柔軟な対応ができない。プロジェクト別に適用される権限も使用して管理する。メリットユーザー単位で管理するので分かりやすい。プロジェクト別に管理担当者を割り当てるなどの柔軟な対応ができる。デメリットユーザー数が増えた場合に煩雑になりやすい。設定画面がプロジェクトの数分存在するので煩雑になりやすい。ロール単位で権限を管理する。メリットロール(役割)で管理するので、どのユーザーがどの役割をもっているのかが分かりやすい。プロジェクト別に管理担当者を割り当てるなどの柔軟な対応ができる。設定画面は3画面であるが、(B)よりも少ないので許容範囲である。(A)に比べて、ユーザー数が増えても煩雑になりにくい。デメリットジョブ(プロジェクト)の名称を適切に決めておかないと、Patternが上手に設定できなくなるので煩雑になりやすい。おわりに最後に、操作権限を設定する場合のポイントをいくつかご紹介します。特権ユーザー(記事内ではadminユーザー)を少なくとも1ユーザー登録しておく。匿名ユーザーを利用して、設定数を少なくできないか検討する。authenticatedグループを利用して、設定数を少なくできないか検討する。「システム全体に適用される権限」を利用して、設定数を少なくできないか検討する。ロール単位で操作権限を設定する場合は、ジョブ(プロジェクト)の命名規則を決めておき、Patternを活用できるようにする。実際の動作を確認した上で記事を書き起こしていますが、誤りなどありましたら、早急に修正しますのでご指摘ください。変更履歴2011/1/13にauthenticatedグループに関する記述を追記しました。pluginsお役立ち度0%?のコマンドシェル情報Groovyのテンプレートエンジンで改行の出力を調整する方法Sphinxの魔法にかかってみたお題:時間帯重複チェック(応用編)を解いてみた。月別アーカイブはてなブログをはじめよう!tyuki39さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。