CFv2 User Account and Authorization

1,641
-1

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,641
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

CFv2 User Account and Authorization

  1. 1. 認証・認可の件について 尾尻  健 NTT  Software  Innovation  Center ©  2013  NTT  Software  Innovation  Center
  2. 2. @kenojiri • CFをお仕事にして8ヶ⽉月⽬目 • 拠点は武蔵野、現場は⽥田町 • 最近の読み物: 吉川  英治著「三国志」  @⻘青空⽂文庫 http://www.aozora.gr.jp /index_̲pages /person1562.html • ⼀一児のパパになりましたよ •  9/25⽣生まれ、今⽇日で満1か⽉月 •  誕⽣生時2334g、現在3200g超!  ©  2013    NTT  Software  Innovation  Center よくみると 耳が餃子 2
  3. 3. どのへんの話をするのか このへん ※ http://docs.cloudfoundry.com/docs/running/architecture/ から引用・注記  ©  2013    NTT  Software  Innovation  Center 3
  4. 4. ちかごろのUAA  (User  Account  and  Authentication  Service) •  CCngとUAAは完全分離離 •  UAAは認証・権限付与・ユーザアカウント/クライアント管理理、 CCngは付与された権限に基づく認可、という分担 •  UAAはUAADBを所管、CCngはCCDBを所管 •  UAA〜~CCng間はWebAPIを介した疎結合。DB斜めアクセスはしない ⇒  CCngはUAAなしでは⽣生きていけなくなった •  なんだかよくわからなかったACMは「SCIM」と名を変えて UAAに組み込まれ、ユーザアカウントとグループ(=権限) の管理理を担う SCIM:  Simple  Cloud  Identity  Management •  OAuth2をベースとしたOpenID  Connectというしくみ を使って、認証・権限付与機構を実現している •  UAAの実装は、相変わらずJava  with  SpringSecurity。 SpringSecurity⾃自体がOAuth2やOpenID  ConnectのEndpoint 実装のスケルトンを提供しており、UAAならではの独⾃自ロジック をFilterやControllerとして実装している  ©  2013    NTT  Software  Innovation  Center 4
  5. 5. UAAが提供するAPI •  ログイン  /  OpenID  Connect  /  OAuth2関連  ・・・認証と権限付与 GET /login POST /login.do POST /logout.do POST /oauth/token (GET|POST) /oauth/authorize GET /oauth/authorize/confirm_access GET /userinfo GET /token_key POST /check_token POST /check_id GET /oauth/users/(:username|:client_id)/tokens DELETE /oauth/users/(:username|:client_id)/tokens/:jti •  SCIM関連  ・・・ユーザアカウントとグループ(=権限)管理理 (GET|POST) /Users (PUT|DELETE) /Users/:id PUT /Users/:id/password GET /Groups POST /Group (PUT|DELETE) /Group/:id •  client登録関連  ・・・クライアント管理理 GET /oauth/clients (GET|POST|PUT|DELETE) /oauth/clients/:client_id PUT /oauth/clients/:client_id/secret •  その他お便便利利API GET /varz POST /password/score GET /varz/:domain ※参考: https://github.com/cloudfoundry/uaa/blob/master/docs/UAA-API.rst  ©  2013    NTT  Software  Innovation  Center 5
  6. 6. cfコマンドが利利⽤用するUAA  API •  ログイン  /  OpenID  Connect  /  OAuth2関連  ・・・認証と権限付与 GET /login POST /login.do POST /logout.do POST /oauth/token (GET|POST) /oauth/authorize GET /oauth/authorize/confirm_access GET /userinfo GET /token_key POST /check_token POST /check_id GET /oauth/users/(:username|:client_id)/tokens DELETE /oauth/users/(:username|:client_id)/tokens/:jti •  SCIM関連  ・・・ユーザアカウントとグループ(=権限)管理理 管理者ユーザとして ログインした場合の みアクセス可 (GET|POST) /Users (PUT|DELETE) /Users/:id PUT /Users/:id/password GET /Groups POST /Group (PUT|DELETE) /Group/:id •  client登録関連  ・・・クライアント管理理 GET /oauth/clients (GET|POST|PUT|DELETE) /oauth/clients/:client_id PUT /oauth/clients/:client_id/secret •  その他お便便利利API GET /varz POST /password/score GET /varz/:domain ※参考: https://github.com/cloudfoundry/uaa/blob/master/docs/UAA-API.rst  ©  2013    NTT  Software  Innovation  Center 6
  7. 7. 認証 • ユーザ認証とクライアント認証が存在 •  ユーザ認証・・・例例えば  cf  login •  ユーザがUAAクライアントを使⽤用してtokenを要求する場合 •  クライアント認証・・・例例えば  uaac  token  client  get •  ユーザ⾮非介在でUAAクライアント⾃自体がtokenを要求する場合 • 認証した結果としてクライアントに付与された権限に 基づき、クライアントにaccess_̲tokenが発⾏行行される •  access_̲tokenの中に、許されたAPIアクセス権限のリストが 「scope」として⼊入っている •  scopeは基本的に以下の2つのAND条件で決まる   (1)クライアントの能⼒力力(どのAPIにアクセスする機能を持つか) •  UAADBのoauth_̲client_̲datailsテーブルに保持 •  UAAのclient登録関連APIを使って管理理 (2)ユーザが属する権限グループ •  UAADBのgroupsテーブル・group_̲membershipテーブルに保持 •  UAAのSCIM関連APIを使って管理理  ©  2013    NTT  Software  Innovation  Center 7
  8. 8. uaacコマンドって何? • UAAのAPIのうち、cfコマンドではアクセス出来ない APIも叩けるCLI •  ユーザアカウント参照・更更新・削除API(登録はcfコマンドで可) •  グループ(=権限)管理理系API •  client登録関連API •  token管理理系API(token参照、token無効化)  etc… • rubygemsからインストール可 $  gem  install  cf-‐‑‒uaac  ©  2013    NTT  Software  Innovation  Center 8
  9. 9. 認証・権限付与の形態は3パターンに⼤大別 cf 認証 ザ ①ユー 限付与 権 クセス APIア uaa ② ③APIアクセス cc app 認証されたユーザが属する権限グループに従い、 与えられるAPIアクセス権限の範囲(scope)は可変 認証 ザ ①ユー 証結果 認 ユーザ ② web app ト認証 アン クライ ① 付与 限 セス 権 ク APIア ② ③APIアクセス uaa cc クライアント登録内容のみに従って APIアクセス権限の範囲(scope)を決定 uaa ④APIアクセス cc  ©  2013    NTT  Software  Innovation  Center 9
  10. 10. 認可 • APIアクセスの認可 •  UAA・CCngにて、access_̲tokenのscopeを利利⽤用して⾏行行う 例例1)  UAAへのユーザアカウント作成要求API (POST  /Users)   →scim.writeのscopeをもつaccess_̲tokenが設定された     要求しか認可しない 例例2)  CCngへのorganization更更新要求API (PUT  /v2/organization /:id)   →cloud_̲controller.adminのscopeをもつaccess_̲tokenが     設定された要求しか認可しない 例例3)  CCngへのアプリpush要求API (POST  /v2/apps)   →cloud_̲controller.writeのscopeをもつaccess_̲tokenが     設定された要求しか認可しない • CFリソース操作権限の認可 •  CCngにてCCDBに格納された情報を⽤用いて⾏行行う 例例)  あるspaceへのアプリのpushは、当該spaceが属する     organizationのメンバになっているユーザにしか許可しない  ©  2013    NTT  Software  Innovation  Center 10
  11. 11. もっと深く知るために • cfコマンド、uaacコマンドを-‐‑‒t  (trace)オプション 付きで動かして、HTTP  req /resの中⾝身を⾒見見てみる • CCngのログに、受け取ったtokenのデコード結果が 出⼒力力される •  “/oauth /token”でgrep • uaacコマンドをいろいろと叩いてみて、UAADBの 下記テーブルの変化を観察する •  users •  groups •  group_̲membership •  oauth_̲client_̲details  ©  2013    NTT  Software  Innovation  Center 11
  12. 12.  ©  2013    NTT  Software  Innovation  Center 12
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×