SlideShare a Scribd company logo
Keystone fernet token
OpenStack Summit Austin報告 (2/2)
Yuki Nishiwaki
My material
本資料は、OpenStack Summit Austinのセッション
“Get Ready for Fernet Tokens(https://www.youtube.com/watch?v=702SRZHdNW8&feature=share)”
を下記の点を中心に自分なりに噛み砕き、まとめた資料である。
● 「なぜ必要か」
● 「Fernet Tokenはどんなものか」
● 「実際にどのように使われているか(ユーザ事例)」
[参考]上記セッション以外に、参考にしたfernet tokenに関する記事
OpenStack Tokyo Summit http://www.slideshare.net/priti_desai/deep-dive-into-keystone-tokens-and-lessons-learned
IBM Open Tech blog https://developer.ibm.com/opentech/2015/11/11/deep-dive-keystone-fernet-tokens/
OpenStack Wiki FAQ http://docs.openstack.org/admin-guide/keystone_fernet_token_faq.html
はじめに
我々は、Fernet Tokenへの切り替えを検討した方がいい:
● NewtonでKeystoneのdefault token driverが「UUID -> fernet」に変わる
● インストーラに関するプロジェクトでも、fernet tokenに切り替えようという意見が出
てる
○ Fuel: https://blueprints.launchpad.net/fuel/+spec/fernet-tokens-support
○ Kolla: https://blueprints.launchpad.net/kolla/+spec/keystone-fernet-token
なぜ、Fernet Tokenが必要なのか
UUID: 永続的にtokenを保持する必要がある
=> Token Tableが大きくなるとパフォーマンスに影響がでる。
PKI:1つのTokenのサイズが大きすぎる
PKIZ: PKI Tokenをzlib libraryを使って圧縮したものだが、まだサイズが大きい
Fernet: サイズが小さい/永続的にtokenを保持しない
● data replicationのコストが低い
● replication lag が発生しない
● database cleanup をしなくていい
● token validation が難しい
● token revocation が難しい
設定方法
[token]
provider = fernet
expiration = 864000
[fernet_tokens]
key_repository = /etc/keystone/fernet-keys/
max_active_keys = 3
keystone.conf
Token generation
payload = msgpack(user_id + project_id + expiration)
#=> keystone token providerで実施
#=> MessagePack(バイナリベースのシリアライズ形式)
decoded = version + timestamp + AES(payload) + HMAC
token = base64(decoded)
#=> 暗号化ライブラリ(https://github.com/pyca/cryptography)内で実施
#=> token providerは、payloadをcryptographyに渡すだけ
詳細はこちらを: https://github.com/openstack/keystone/tree/master/keystone/token/providers/fernet
この鍵が
keyston-manage fernet_setup
で作られる。
Fernet Token Validation
fernet key
repository
keystone-manage
● fernet_setup
● fernet_rotate
Get the key for encryption/sign
(local)
decrypt token
determine the version
from payload (what scope)
fernet token
Keystone
Disassemble payload
(user id, project id….)
Expire ?
or
Revoked ?
If error:
Token is invalid
Token is valid
Token is invalid
Operator
User
Life of encryption key
● ユーザ情報などをTokenに埋め込むが、「暗号化」しているのでTokenが漏れても
ユーザ情報がもれないようにしている
○ Fernet Keyは256bit ( encryption部128bit / sign部128bit)
○ 鍵は定期的に変更した方が、安全性を高められる
● 鍵をRotationさせて、定期的に変更させる仕組みがある。
Life of encryption key on Cluster
node1 node2 node3
Staged Key: next primary key
↓
Primary Key: encrypt and decrypt
↓
Secondary Keys: decrypt only
↓
Remain or Delete
max_active_keys = 3
Staged
Primary
鍵の生成
keystone-manage
fernet_setup
鍵のコピー
(rsync/orchestration tool)
1
2
Life of encryption key on Cluster
node1 node2 node3
Staged Key: next primary key
↓
Primary Key: encrypt and decrypt
↓
Secondary Keys: decrypt only
↓
Remain or Delete
max_active_keys = 3
Staged
Secondary
鍵のコピー
(rsync/orchestration tool)
4
Primary
鍵のローテーション
keystone-manage
fernet_rotate
3
Primary
Staged
Previous
Time warner cableの導入事例のFeedback(1/2)
● 環境
○ Mutli Region (Galera Cluster)
○ dockerでデプロイしている (全部か一部かは、不明 )
○ Liberty Keystone + mixed version other service
○ Fernet tokenを2015年7月から利用
● KeystoneのUpgradeに使用したPlaybook
○ https://github.com/matthewfischer/ansible/tree/master/keystone-upgrade
● Libertyでは、数秒の断タイムで切り替え可能
● Kilo → Libertyで、Fernet Tokenのフォーマットに変更があった
○ Kiloの人は、Libertyまで待った方がいい
● Key rotationにkeystone-manageは使っていない
○ EYAML (Yamlを暗号化したもの)にkeyを入れたPuppetで配布
○ Keyの変更は、Gerritでreviewしてる
■ Keyのformatチェックなどが、目的ではなく。 Over Rotationを避けることが目的
● Over Rotationとは、tokenのexpireより前に、tokenの復号鍵がRotationにより消失すること
Time warner cableの導入事例のFeedback(2/2)
● 2つのRegionで同時に、Rotationしない。
○ 2日程度遅らせて、1つの Regionで問題がないことを確認してから入れる
● 3、4週間に1回鍵を Rotationする
● Cacheは、絶対設定した方がいい => memcache
● Fernet Tokenにしてから
○ keystoneのdb tableがかなり小さくなった
○ 使えなくなったtokenを定期的に削除する cronjobが必要なくなった
○ Multi Regionでtoken dataをreplicationしなくてよくなった
■ 3、4週間に1度鍵を同期させるだけ
所感
● NewtonでDefault Driverが変更されるので、内部動作の概要を知ることは大事で
あり、そのきっかけとなる良いセッションだった。
○ しかし、セッション中に紹介されている Token Formatは、間違っていたように見えたのでソースコー
ドを読むハメに。。。
■ payloadのhash値がtokenであるという説明に見えた (hash値じゃ複合できなくないか。。。 )
● Fernet Tokenの運用の話(Time waner Cableの事例)は、非常に貴重だった。こう
いう情報は、なかなか世に出回らないのでこれでも聞く価値があった
○ でも、まさか鍵のローテーションに Gerritを挟んでるとは思わなかった。
● 発表の構成が綺麗で、「新機能の内部動作説明」+「実際に使われている事例の紹
介」の組み合わせは、かなり魅力的だと思った。今後発表する際の参考にしたい。

More Related Content

What's hot

ML2/OVN アーキテクチャ概観
ML2/OVN アーキテクチャ概観ML2/OVN アーキテクチャ概観
ML2/OVN アーキテクチャ概観
Yamato Tanaka
 
OpenStack超入門シリーズ いまさら聞けないSwiftの使い方
OpenStack超入門シリーズ いまさら聞けないSwiftの使い方OpenStack超入門シリーズ いまさら聞けないSwiftの使い方
OpenStack超入門シリーズ いまさら聞けないSwiftの使い方Toru Makabe
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo
 
日本OpenStackユーザ会 第37回勉強会
日本OpenStackユーザ会 第37回勉強会日本OpenStackユーザ会 第37回勉強会
日本OpenStackユーザ会 第37回勉強会
Yushiro Furukawa
 
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
whywaita
 
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
Kentaro Ebisawa
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
VirtualTech Japan Inc.
 
OpenStack超入門シリーズ いまさら聞けないNeutronの使い方
OpenStack超入門シリーズ いまさら聞けないNeutronの使い方OpenStack超入門シリーズ いまさら聞けないNeutronの使い方
OpenStack超入門シリーズ いまさら聞けないNeutronの使い方
Toru Makabe
 
Openv switchの使い方とか
Openv switchの使い方とかOpenv switchの使い方とか
Openv switchの使い方とか
kotto_hihihi
 
OpenStack勉強会
OpenStack勉強会OpenStack勉強会
OpenStack勉強会Yuki Obara
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
VirtualTech Japan Inc.
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!
ksk_ha
 
AvailabilityZoneとHostAggregate
AvailabilityZoneとHostAggregateAvailabilityZoneとHostAggregate
AvailabilityZoneとHostAggregate
Hiroki Ishikawa
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
歩 柴田
 
OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
VirtualTech Japan Inc.
 
今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf
富士通クラウドテクノロジーズ株式会社
 
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
VirtualTech Japan Inc.
 

What's hot (20)

ML2/OVN アーキテクチャ概観
ML2/OVN アーキテクチャ概観ML2/OVN アーキテクチャ概観
ML2/OVN アーキテクチャ概観
 
OpenStack超入門シリーズ いまさら聞けないSwiftの使い方
OpenStack超入門シリーズ いまさら聞けないSwiftの使い方OpenStack超入門シリーズ いまさら聞けないSwiftの使い方
OpenStack超入門シリーズ いまさら聞けないSwiftの使い方
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
日本OpenStackユーザ会 第37回勉強会
日本OpenStackユーザ会 第37回勉強会日本OpenStackユーザ会 第37回勉強会
日本OpenStackユーザ会 第37回勉強会
 
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
 
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
 
OpenStack超入門シリーズ いまさら聞けないNeutronの使い方
OpenStack超入門シリーズ いまさら聞けないNeutronの使い方OpenStack超入門シリーズ いまさら聞けないNeutronの使い方
OpenStack超入門シリーズ いまさら聞けないNeutronの使い方
 
Openv switchの使い方とか
Openv switchの使い方とかOpenv switchの使い方とか
Openv switchの使い方とか
 
OpenStack勉強会
OpenStack勉強会OpenStack勉強会
OpenStack勉強会
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!
 
AvailabilityZoneとHostAggregate
AvailabilityZoneとHostAggregateAvailabilityZoneとHostAggregate
AvailabilityZoneとHostAggregate
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
 
OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
 
今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf
 
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
 

Viewers also liked

Deep Dive into Keystone Tokens and Lessons Learned
Deep Dive into Keystone Tokens and Lessons LearnedDeep Dive into Keystone Tokens and Lessons Learned
Deep Dive into Keystone Tokens and Lessons Learned
Priti Desai
 
Python import mechanism
Python import mechanismPython import mechanism
Python import mechanism
Yuki Nishiwaki
 
Rally Updates Mitaka and Next step for Newton
Rally Updates Mitaka and Next step for NewtonRally Updates Mitaka and Next step for Newton
Rally Updates Mitaka and Next step for Newton
Yuki Nishiwaki
 
OpenStack Keystone
OpenStack KeystoneOpenStack Keystone
OpenStack Keystone
Deepti Ramakrishna
 
openstack_neutron-dvr_os5thaniv_20150713
openstack_neutron-dvr_os5thaniv_20150713openstack_neutron-dvr_os5thaniv_20150713
openstack_neutron-dvr_os5thaniv_20150713
Takehiro Kudou
 
Keystone - Openstack Identity Service
Keystone - Openstack Identity Service Keystone - Openstack Identity Service
Keystone - Openstack Identity Service
Prasad Mukhedkar
 
Openstack Study Nova 1
Openstack Study Nova 1Openstack Study Nova 1
Openstack Study Nova 1
Jinho Shin
 
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
VirtualTech Japan Inc.
 
OpenStack and private cloud
OpenStack and private cloudOpenStack and private cloud
OpenStack and private cloud
SK Telecom
 
20150713-OpenStack-5thbirthday-kilo-liberty-and-towards
20150713-OpenStack-5thbirthday-kilo-liberty-and-towards20150713-OpenStack-5thbirthday-kilo-liberty-and-towards
20150713-OpenStack-5thbirthday-kilo-liberty-and-towards
Akihiro Motoki
 
OpenStack keystone identity service
OpenStack keystone identity serviceOpenStack keystone identity service
OpenStack keystone identity service
openstackindia
 
マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞
DMM.com
 
Windows Server and Docker - The Internals Behind Bringing Docker and Containe...
Windows Server and Docker - The Internals Behind Bringing Docker and Containe...Windows Server and Docker - The Internals Behind Bringing Docker and Containe...
Windows Server and Docker - The Internals Behind Bringing Docker and Containe...
Docker, Inc.
 
OpenStack Nova Scheduler
OpenStack Nova Scheduler OpenStack Nova Scheduler
OpenStack Nova Scheduler
Peeyush Gupta
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Yukiya Nakagawa
 

Viewers also liked (15)

Deep Dive into Keystone Tokens and Lessons Learned
Deep Dive into Keystone Tokens and Lessons LearnedDeep Dive into Keystone Tokens and Lessons Learned
Deep Dive into Keystone Tokens and Lessons Learned
 
Python import mechanism
Python import mechanismPython import mechanism
Python import mechanism
 
Rally Updates Mitaka and Next step for Newton
Rally Updates Mitaka and Next step for NewtonRally Updates Mitaka and Next step for Newton
Rally Updates Mitaka and Next step for Newton
 
OpenStack Keystone
OpenStack KeystoneOpenStack Keystone
OpenStack Keystone
 
openstack_neutron-dvr_os5thaniv_20150713
openstack_neutron-dvr_os5thaniv_20150713openstack_neutron-dvr_os5thaniv_20150713
openstack_neutron-dvr_os5thaniv_20150713
 
Keystone - Openstack Identity Service
Keystone - Openstack Identity Service Keystone - Openstack Identity Service
Keystone - Openstack Identity Service
 
Openstack Study Nova 1
Openstack Study Nova 1Openstack Study Nova 1
Openstack Study Nova 1
 
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
 
OpenStack and private cloud
OpenStack and private cloudOpenStack and private cloud
OpenStack and private cloud
 
20150713-OpenStack-5thbirthday-kilo-liberty-and-towards
20150713-OpenStack-5thbirthday-kilo-liberty-and-towards20150713-OpenStack-5thbirthday-kilo-liberty-and-towards
20150713-OpenStack-5thbirthday-kilo-liberty-and-towards
 
OpenStack keystone identity service
OpenStack keystone identity serviceOpenStack keystone identity service
OpenStack keystone identity service
 
マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞
 
Windows Server and Docker - The Internals Behind Bringing Docker and Containe...
Windows Server and Docker - The Internals Behind Bringing Docker and Containe...Windows Server and Docker - The Internals Behind Bringing Docker and Containe...
Windows Server and Docker - The Internals Behind Bringing Docker and Containe...
 
OpenStack Nova Scheduler
OpenStack Nova Scheduler OpenStack Nova Scheduler
OpenStack Nova Scheduler
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
 

Similar to Keystone fernet token

『OpenStackの導入事例/検証事例のご紹介』 NTTドコモ様 検証事例:OpenStack Summit 2014 Paris 講演「Design ...
『OpenStackの導入事例/検証事例のご紹介』 NTTドコモ様 検証事例:OpenStack Summit 2014 Paris 講演「Design ...『OpenStackの導入事例/検証事例のご紹介』 NTTドコモ様 検証事例:OpenStack Summit 2014 Paris 講演「Design ...
『OpenStackの導入事例/検証事例のご紹介』 NTTドコモ様 検証事例:OpenStack Summit 2014 Paris 講演「Design ...
VirtualTech Japan Inc.
 
Interop tokyo2018 openstack-present-and-future
Interop tokyo2018 openstack-present-and-futureInterop tokyo2018 openstack-present-and-future
Interop tokyo2018 openstack-present-and-future
shintaro mizuno
 
OpenStackの情報をどこから得ているのか
OpenStackの情報をどこから得ているのかOpenStackの情報をどこから得ているのか
OpenStackの情報をどこから得ているのか
Hiroki Ishikawa
 
『OpenStack最新情報セミナー』のご案内
『OpenStack最新情報セミナー』のご案内『OpenStack最新情報セミナー』のご案内
『OpenStack最新情報セミナー』のご案内
VirtualTech Japan Inc.
 
OSC 2011 Tokyo/Spring OpenStackプレゼン
OSC 2011 Tokyo/Spring OpenStackプレゼンOSC 2011 Tokyo/Spring OpenStackプレゼン
OSC 2011 Tokyo/Spring OpenStackプレゼン
Masanori Itoh
 
OpenStack Summit Tokyoに参加してみた
OpenStack Summit Tokyoに参加してみたOpenStack Summit Tokyoに参加してみた
OpenStack Summit Tokyoに参加してみた
Mitsuhiro SHIGEMATSU
 
OpenStack, Hadoop -- OSSクラウドの最新動向
OpenStack, Hadoop -- OSSクラウドの最新動向OpenStack, Hadoop -- OSSクラウドの最新動向
OpenStack, Hadoop -- OSSクラウドの最新動向
Masanori Itoh
 
OpenStack QuickStart - havana
OpenStack QuickStart - havanaOpenStack QuickStart - havana
OpenStack QuickStart - havana
Hideki Saito
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No1OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No1Etsuji Nakai
 

Similar to Keystone fernet token (10)

『OpenStackの導入事例/検証事例のご紹介』 NTTドコモ様 検証事例:OpenStack Summit 2014 Paris 講演「Design ...
『OpenStackの導入事例/検証事例のご紹介』 NTTドコモ様 検証事例:OpenStack Summit 2014 Paris 講演「Design ...『OpenStackの導入事例/検証事例のご紹介』 NTTドコモ様 検証事例:OpenStack Summit 2014 Paris 講演「Design ...
『OpenStackの導入事例/検証事例のご紹介』 NTTドコモ様 検証事例:OpenStack Summit 2014 Paris 講演「Design ...
 
Interop tokyo2018 openstack-present-and-future
Interop tokyo2018 openstack-present-and-futureInterop tokyo2018 openstack-present-and-future
Interop tokyo2018 openstack-present-and-future
 
OpenStackの情報をどこから得ているのか
OpenStackの情報をどこから得ているのかOpenStackの情報をどこから得ているのか
OpenStackの情報をどこから得ているのか
 
『OpenStack最新情報セミナー』のご案内
『OpenStack最新情報セミナー』のご案内『OpenStack最新情報セミナー』のご案内
『OpenStack最新情報セミナー』のご案内
 
OSC 2011 Tokyo/Spring OpenStackプレゼン
OSC 2011 Tokyo/Spring OpenStackプレゼンOSC 2011 Tokyo/Spring OpenStackプレゼン
OSC 2011 Tokyo/Spring OpenStackプレゼン
 
OpenStack Summit Tokyoに参加してみた
OpenStack Summit Tokyoに参加してみたOpenStack Summit Tokyoに参加してみた
OpenStack Summit Tokyoに参加してみた
 
OpenStack, Hadoop -- OSSクラウドの最新動向
OpenStack, Hadoop -- OSSクラウドの最新動向OpenStack, Hadoop -- OSSクラウドの最新動向
OpenStack, Hadoop -- OSSクラウドの最新動向
 
Oss dev-04
Oss dev-04Oss dev-04
Oss dev-04
 
OpenStack QuickStart - havana
OpenStack QuickStart - havanaOpenStack QuickStart - havana
OpenStack QuickStart - havana
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No1OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No1
 

Recently uploaded

GPT - 振り返りフレームワークKPTをちょっとKAIZENしてちょうど良いフレームワークに。
GPT - 振り返りフレームワークKPTをちょっとKAIZENしてちょうど良いフレームワークに。GPT - 振り返りフレームワークKPTをちょっとKAIZENしてちょうど良いフレームワークに。
GPT - 振り返りフレームワークKPTをちょっとKAIZENしてちょうど良いフレームワークに。
Hibiki Mizuno
 
RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19
GrapeCity, inc.
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 
RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19
GrapeCity, inc.
 
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet DocumentationRaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
GrapeCity, inc.
 
RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19
GrapeCity, inc.
 

Recently uploaded (7)

GPT - 振り返りフレームワークKPTをちょっとKAIZENしてちょうど良いフレームワークに。
GPT - 振り返りフレームワークKPTをちょっとKAIZENしてちょうど良いフレームワークに。GPT - 振り返りフレームワークKPTをちょっとKAIZENしてちょうど良いフレームワークに。
GPT - 振り返りフレームワークKPTをちょっとKAIZENしてちょうど良いフレームワークに。
 
RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
 
RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19
 
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
 
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet DocumentationRaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
 
RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19
 

Keystone fernet token

  • 1. Keystone fernet token OpenStack Summit Austin報告 (2/2) Yuki Nishiwaki
  • 2. My material 本資料は、OpenStack Summit Austinのセッション “Get Ready for Fernet Tokens(https://www.youtube.com/watch?v=702SRZHdNW8&feature=share)” を下記の点を中心に自分なりに噛み砕き、まとめた資料である。 ● 「なぜ必要か」 ● 「Fernet Tokenはどんなものか」 ● 「実際にどのように使われているか(ユーザ事例)」 [参考]上記セッション以外に、参考にしたfernet tokenに関する記事 OpenStack Tokyo Summit http://www.slideshare.net/priti_desai/deep-dive-into-keystone-tokens-and-lessons-learned IBM Open Tech blog https://developer.ibm.com/opentech/2015/11/11/deep-dive-keystone-fernet-tokens/ OpenStack Wiki FAQ http://docs.openstack.org/admin-guide/keystone_fernet_token_faq.html
  • 3. はじめに 我々は、Fernet Tokenへの切り替えを検討した方がいい: ● NewtonでKeystoneのdefault token driverが「UUID -> fernet」に変わる ● インストーラに関するプロジェクトでも、fernet tokenに切り替えようという意見が出 てる ○ Fuel: https://blueprints.launchpad.net/fuel/+spec/fernet-tokens-support ○ Kolla: https://blueprints.launchpad.net/kolla/+spec/keystone-fernet-token
  • 4. なぜ、Fernet Tokenが必要なのか UUID: 永続的にtokenを保持する必要がある => Token Tableが大きくなるとパフォーマンスに影響がでる。 PKI:1つのTokenのサイズが大きすぎる PKIZ: PKI Tokenをzlib libraryを使って圧縮したものだが、まだサイズが大きい Fernet: サイズが小さい/永続的にtokenを保持しない ● data replicationのコストが低い ● replication lag が発生しない ● database cleanup をしなくていい ● token validation が難しい ● token revocation が難しい
  • 5. 設定方法 [token] provider = fernet expiration = 864000 [fernet_tokens] key_repository = /etc/keystone/fernet-keys/ max_active_keys = 3 keystone.conf
  • 6. Token generation payload = msgpack(user_id + project_id + expiration) #=> keystone token providerで実施 #=> MessagePack(バイナリベースのシリアライズ形式) decoded = version + timestamp + AES(payload) + HMAC token = base64(decoded) #=> 暗号化ライブラリ(https://github.com/pyca/cryptography)内で実施 #=> token providerは、payloadをcryptographyに渡すだけ 詳細はこちらを: https://github.com/openstack/keystone/tree/master/keystone/token/providers/fernet この鍵が keyston-manage fernet_setup で作られる。
  • 7. Fernet Token Validation fernet key repository keystone-manage ● fernet_setup ● fernet_rotate Get the key for encryption/sign (local) decrypt token determine the version from payload (what scope) fernet token Keystone Disassemble payload (user id, project id….) Expire ? or Revoked ? If error: Token is invalid Token is valid Token is invalid Operator User
  • 8. Life of encryption key ● ユーザ情報などをTokenに埋め込むが、「暗号化」しているのでTokenが漏れても ユーザ情報がもれないようにしている ○ Fernet Keyは256bit ( encryption部128bit / sign部128bit) ○ 鍵は定期的に変更した方が、安全性を高められる ● 鍵をRotationさせて、定期的に変更させる仕組みがある。
  • 9. Life of encryption key on Cluster node1 node2 node3 Staged Key: next primary key ↓ Primary Key: encrypt and decrypt ↓ Secondary Keys: decrypt only ↓ Remain or Delete max_active_keys = 3 Staged Primary 鍵の生成 keystone-manage fernet_setup 鍵のコピー (rsync/orchestration tool) 1 2
  • 10. Life of encryption key on Cluster node1 node2 node3 Staged Key: next primary key ↓ Primary Key: encrypt and decrypt ↓ Secondary Keys: decrypt only ↓ Remain or Delete max_active_keys = 3 Staged Secondary 鍵のコピー (rsync/orchestration tool) 4 Primary 鍵のローテーション keystone-manage fernet_rotate 3 Primary Staged Previous
  • 11. Time warner cableの導入事例のFeedback(1/2) ● 環境 ○ Mutli Region (Galera Cluster) ○ dockerでデプロイしている (全部か一部かは、不明 ) ○ Liberty Keystone + mixed version other service ○ Fernet tokenを2015年7月から利用 ● KeystoneのUpgradeに使用したPlaybook ○ https://github.com/matthewfischer/ansible/tree/master/keystone-upgrade ● Libertyでは、数秒の断タイムで切り替え可能 ● Kilo → Libertyで、Fernet Tokenのフォーマットに変更があった ○ Kiloの人は、Libertyまで待った方がいい ● Key rotationにkeystone-manageは使っていない ○ EYAML (Yamlを暗号化したもの)にkeyを入れたPuppetで配布 ○ Keyの変更は、Gerritでreviewしてる ■ Keyのformatチェックなどが、目的ではなく。 Over Rotationを避けることが目的 ● Over Rotationとは、tokenのexpireより前に、tokenの復号鍵がRotationにより消失すること
  • 12. Time warner cableの導入事例のFeedback(2/2) ● 2つのRegionで同時に、Rotationしない。 ○ 2日程度遅らせて、1つの Regionで問題がないことを確認してから入れる ● 3、4週間に1回鍵を Rotationする ● Cacheは、絶対設定した方がいい => memcache ● Fernet Tokenにしてから ○ keystoneのdb tableがかなり小さくなった ○ 使えなくなったtokenを定期的に削除する cronjobが必要なくなった ○ Multi Regionでtoken dataをreplicationしなくてよくなった ■ 3、4週間に1度鍵を同期させるだけ
  • 13. 所感 ● NewtonでDefault Driverが変更されるので、内部動作の概要を知ることは大事で あり、そのきっかけとなる良いセッションだった。 ○ しかし、セッション中に紹介されている Token Formatは、間違っていたように見えたのでソースコー ドを読むハメに。。。 ■ payloadのhash値がtokenであるという説明に見えた (hash値じゃ複合できなくないか。。。 ) ● Fernet Tokenの運用の話(Time waner Cableの事例)は、非常に貴重だった。こう いう情報は、なかなか世に出回らないのでこれでも聞く価値があった ○ でも、まさか鍵のローテーションに Gerritを挟んでるとは思わなかった。 ● 発表の構成が綺麗で、「新機能の内部動作説明」+「実際に使われている事例の紹 介」の組み合わせは、かなり魅力的だと思った。今後発表する際の参考にしたい。