今日やること
OpenAMと連携したPolicy Agentは、OpenAM側で設定された認可設定をつかって、以下のようなアクセス制御を実装することができます。
- あるユーザー属性をもった認証済みユーザーだけがアクセスできる
- GETはできるけどPOST、PUT、DELETEはできない
- 特定のURLにたいしてアクセス制御のルールを適用できる
- 送信元IPアドレスなんかを評価して制御する
OpenAMの認可設定ってなに?
OpenAMの認可設定では、アクセスを許可するか拒否するかを決定する方法を定義することができます。認可設定を定義して、OpenAMがリソースへのアクセスを許可するかどうかを判断できるようすることで、Policy Agentはその設定に依存し、ユーザーからのアクセスに認可を適用することができます。
ちなみに、認可設定は以下のような設定をすることができます。
- Resource
- Resourceは、認可設定を適用するURLを指定することができます
- Action
- Actionは、Webサーバー上のページの閲覧、フォームの送信など、ユーザーがResourceに対して行うことができる操作を指定することができます
- GET、POST、PUT、DELETE などのHTTPのRequest Methodで定義します
- Subject
- Subectは、認証したユーザーの属性を評価するルールを指定することができます
- 認証されていればOKとするとか、管理者のみOKとするとか、ある所属の人であればOKなどを定義できます
- Environment
- Environmentは、認証したユーザーの属性ではなく、時間や送信元IPアドレスなどの状態を評価するルールを指定することができます。
- Response Attribute
- これはあまり使いどころが正直わからないです
- 定義した認可設定にマッチした場合に、レスポンスに含むユーザーの属性を指定するというような項目だと思っています
- しかし、ユーザー属性は昨日のプロファイル属性処理の設定とかで連携したらよいのでは?認可のフェーズで連携すると嬉しいユースケースがあるのでしょうか?わかんない(◞‸◟)
前準備
では、試す前にすこし前準備をします。
Webサーバー上にリソースを作成
前回作成したHTTP HEADERを表示するCGIプログラム(https://web.example.com/cgi-bin/headerinfo.pl
)を使い回します。
SSOのみモードの無効化
昨日、有効化したSSOのみモードを無効化します。この設定が有効化されていると、認可設定が一切評価されず、OpenAMの認証済みCookieを持ってさえいれば、だれでもアクセスできてしまうためです。
まず、ブラウザを立ち上げて、OpenAMの管理者アカウント(ユーザー名はamadmin)でサインインし、Top Level Realm => Applications => Web Agentsにアクセスし、前々回に作成を行ったPolicy Agentの設定であるWebPolicyAgentForApache22をクリックします。
画面中段にある、SSOのみモードのチェックボックスを外し、保存をクリックします。
この時点で403 Forbiddenになる
試しに、Policy Agentが導入ずみのWebサーバーにアクセスしてみましょう。
ユーザーは管理者アカウント(amadmin
)でも、デモアカウント(demo
)でも、前回作ったアカウント(johnd
)でもいいですが、OpenAMでサインイン後、アクセスをすると403 FORBIDDEN(「閲覧禁止」「禁止されています」の意)となります。
johndだけがアクセスできる
ここから徐々にアクセスを許可するルールを追加していきましょう。
まずは、johndだけアクセスできるという設定です。
認可設定
OpenAMの管理者アカウント(ユーザー名はamadmin)でサインインし、Top Level Realm => Authorization => Policy Sets => Default Policy Setにアクセスします。
Add a Policyをクリックします。
New Policyの画面が表示されるので、以下の設定を入力し、Createをクリックします。
/cgi-bin/
以下のリソースにアクセスできるっていう設定ですね。
Name | Resource Type | Resources |
---|---|---|
Test Policy | URL | *://*:*/cgi-bin/* |
こんな感じです。
ここで認可設定画面が表示されます。上のタブに前項で紹介したResource、Action etc...が並んでますね。
本項で設定したいのはjohndだけ(Subject)がアクセス(Action)できるという設定なので、まず、Subjectsタブから以下の設定を行います。
設定後、Save Changesを押す前に右の__✔__を押さないと保存されませんので注意してください(´・ω・`)
Type | User Subjects | Group SUbjects |
---|---|---|
Users & Groups | johnd |
続いて、Actionの設定です。
Actionsタブをクリックして、以下の設定を行います。
ACTION | DEFAUT STATE |
---|---|
GET | Allow |
こんな感じです。
確認
- デモアカウント(
demo
/changeit
)でアクセス
403 FORBIDDEN ... (◞‸◟)
- 検証アカウント(
johnd
/password
)でアクセス
200 OK (・∀・)イイ!!
軽くまとめ
- ユーザーのSubject(ユーザー名)をみて、アクセス制御ができる
- アプリケーションに対して行われるAction(HTTP Method)に対しても、アクセス制御ができる
- リソース(URL)ごとにルールをつくれる
送信元IPアドレスで制限をかける
続いて、送信元IPアドレスで制限をかけたいとおもいます。
認可設定
先ほど作成したTest Policyの設定変更を行います。
Environmentsタブから以下の設定を入力します。
Type | Start IP | End IP | IP Range | DNS Name |
---|---|---|---|---|
IPv4 Address/DNS Name | 192.168.33.128 | 192.168.33.255 | [] | [] |
こんな感じです。
確認
- 送信元IPアドレス
192.168.33.1
でアクセス
403 FORBIDDEN ... (◞‸◟)
- IPアドレスの設定を
192.168.33.0 ~ 192.168.33.127
に変更してアクセス
こんな感じにすると。
200 OK (・∀・)イイ!!
軽くまとめ
- 送信元IPアドレスを評価して、認可することができる
- 会社のアプリケーションで、重要度の高いシステムの場合はこういった認可設定を入れるのがいいかも
〆
今日はこのへんで!
明日は、Policy Agentを導入したWebサーバーをリバースプロキシにしてみる。
ばい!