インドアな日常

IT系のネタを記載していくブログです。アウトドアも好きなのでそのブログも書いてます。→ http://tamin-ta.hatenadiary.jp

オライリーのゼロトラストネットワークを読んでみたよ日記。

2020年8月に夏休みの宿題本として買っていたけど、怠けに怠けて2021年1月にようやく読み終えた。

なので今回はそのまとめを書いたよ。

 

 

↓読んだのはこの本。

 

全体通しての感想

もっと概念的なものを説明しているのかなと思ったけど、まあまあ具体的な話をしていたから、システム構築には役に立ちそうな気がした。

でも、結局のところ、"何をどうすればゼロトラストネットワークと呼べるのか"という定義がなく、ベンダごとに異なるので、各ベンダが提供しているゼロトラストネットワークの構築方法や、今回読んだような本をベースラインとして、あくまで、"ゼロトラストっぽい"ようなネットワークを作るしかないねと現状は思った。

例えば、マイクロソフトはO365を利用したゼロトラストネットワークの構築方法が掲載されているよ。

docs.microsoft.com

 

ゼロトラストネットワークは、最近バズワードになっているので、意識高い系の人たちや経営者たちが話題に上げることが多くなっている。

でも、現状はなんちゃってゼロトラストしかできないんだよ、というあたりの話は、どんなに疎まれてもしっかり説明し、理解させる必要がありそう。

 

ここからは、各章の要約を記載します。 

 

第1章

ここではゼロトラストの概念が記載されている。

 

これまでは境界ごとにセキュリティを設計していた。

たとえば、エリアごとに高い壁を作る感じ。進撃の巨人みたく。

家で例えるなら外は信用できないエリア、家の中は信用できるエリアと分けて、

その境界は門で閉ざしていた。そこに門番おくとかね。

 

だけど、これだと門番を突破されたらあとは家の中を自由に仕放題。

たとえば住人に変装した悪いやつが家の鍵を偽装していたとする。

この門番を騙して、偽の鍵を使用されてしまったら、家の中に侵入されて家漁られちゃうよねえ。

それを良しとしないのがゼロトラストモデル。

 

みーんな悪者よ。という前提のもと考えられたモデル。

 

ゼロトラストは、平たくいうと家の中でもだーれも信用しないよということ。

家の中だったら、家に入ってしまったらあとは財布とか、通帳とかは普通に

とってこれちゃうけど、ゼロトラストはそんなことはさせない。

財布や通帳のありかは知られても、その代わり、だれが、どうやって、どんな信用度を

持っているかどうかで、財布や通帳をとってよいかを決めることがゼロトラストでは可能になる。

 

概念的には、コントロールプレーンとデータプレーンの2つで構成されるネットワークになる。

 

コントロールプレーン

 保護されているリソースへのアクセスリクエストを受け付け、

 デバイスとユーザを認証、認可し、様々なポリシーを適用することで、

 OKと判断されたら、データプレーンにアクセスできる?

 

データプレーン

 コントロールプレーン以外のすべてのもの。 

 ネットワーク上のトラフィックを管理する。

 ユーザがアクセスするところと思ってよいかも?

 例えば、データ、サーバ、アプリケーションとか諸々。

 

ゼロトラストモデルには重要な3要素というものがあるよ。

ユーザ認証、デバイス認証、信用の3つ。

ユーザ認証

 これまでと同様で、たとえば門にはいるのに必要なもの。

 顔とかね。

 

バイス認証

 門を開ける鍵が、正当な鍵かどうかを認証する。

 これは従来あまりしてこなかったものみたい。

 まあ確かに鍵の正当性を見ることって、あんまりないよね。

 

信用

 これはスコアで示される。

 クレジットカードの信用みたいなもんかね。

 

これら3つの要素を組み合わせて、こいつには何をしてもよい権限を与える、何をしたらだめみたいな権限を与える、的な感じ

どこにアクセスするにも、これら3要素からアクセスしてもよいのか悪いのか判断されるようなフィルターを通されるみたいな。

 

 

疑問点としては、結局通信、デバイス、ユーザすべてを信用しないとしても、

それを信用するかどうかを決める何者かは必要なわけだよね。

ということは、そいつが悪いやつだったりすると、悪さされる。

単一障害点になりえそうな気がするけども。セキュリティ的に単一障害点って、あまり良くないよな。

 

ただ、信用できるかどうかを、ビットコインみたく、ブロックチェーン的な感じでみんなで計算しあって

証明書発行したりするんだったらちょっと面白いかもねって、思った。

 

第2章

信用と信頼の管理

PKIを使って管理しようということを話していたと思う。(ここうろ覚え)

 

第3章

ネットワークエージェントの話

 

ネットワークエージェントとは、認可判断の対象になるもの。

エージェントの作成には、様々なデータが利用されることになる。

しかも目まぐるしく変化するよ。

 

組織にアクセスするときに、会社支給端末からの操作とかならよいけど、個人端末からの操作だと、結構あやしいよね。組織は認証済みのユーザだったら、デバイスはなんでもよい。という状況は求めてない。こういった概念がゼロトラストだと出てくる。

ネットワークエージェントとは、ネットワークリクエストをするエンティティについてわかっているデータの組み合わせを表す用語のこと。

 

通常は、ユーザ、アプリ、デバイスをデータとして含むらしい。

 

 

ちなみに、エージェントは認可判断には使うけど、認証には一切関与しないよ。実際問題、認証はエージェントが形成される前に実施され、ユーザとデバイスに対して別々に実施される。デバイスはx509証明書、ユーザは多要素認証を使ったりとか。ここはこれまでのネットワークと同じっぽいね。

 

ちなみに標準的なエージェントのデータモデルは現状ない。

SNMPとか、MIBは使えるかもしれんどねー。ということらしい。

 

第4章

ゼロトラストの認可についての話。

 

4つの要素を利用して認可を行う。こいつらも概念的な話。

 

エンフォーサ

 データプレーン上にあるもの。

 認可の判断をデバイスとか、ユーザとかアプリに適用するやつ。

 例えば、具体的にはロードバランサ、プロキシ、FWに実装されたりする。

 リクエストを受け付けたロードバランサはそのリクエストが認可されるかどうかを

 知る必要があるよね。

 そのリクエストをコントロールプレーンに送って、認可判断をまかす。

 

ポリシーエンジン

 コントロールプレーン上にあるもの。

 認可可否を判断するやつ。その時に利用するリスク分析はトラストエンジンに任す。

 

トラストエンジン

 コントロールプレーン上にあるもの。各エンティティの信用スコアを計算するやつ。

 

データストア

 コントロールプレーン上にあるもの。認可の判断に使うデータたち。

 

 

第5章

バイスの信頼と信用の話。

 

まず、デバイスをセキュアに受け取ろうとう話。めっちゃ物理的だな。

受け取り方法は、常に品質が保証されたイメージを使用すべきということ。

へんちくりんなイメージを利用していると、怪しげなソフトウェアとかをインストールされる可能性あり。

そのへんは、セキュアブートという方法で対策できたりする。

セキュアブートは、ファームウェアに公開鍵が読み込まれることで、ドライバやブートローダの署名を検証し、

変に弄くられてないかを確認することができるよ。

 

バイスの識別に使用いできる署名された証明書を提供する場合は、秘密鍵を安全な場所に保存する必要がある。

それは、一般にHSM、TPMと呼ばれるところに保存する。ここには、OSもアクセスすることが難しいところらしい。

 

コントロールプレーンではX509とかTPMとかでデバイスを認証するよ。そして信用は時間とともに失われるので、適宜更新しないといけない。

構成管理システムによって提供される、デバイスの種類とか、ロールとかIPアドレスとか、イメージの経過時間とか、アクセス履歴とか位置とか、通信パターンとかを認証に含めたほうがよさげ。

 

第6章

ユーザの信頼と信用の話。

アイデンティティには非公式のアイデンティティと正式なアイデンティティがあるよね。

非公式は適当なSNSでのアカウントになる。正式なものだと、現実世界では政府発行の個人IDとか、運転免許証とかね。

デジタルアイデンティティの生成は、人間が関与する確認方式が最も強力というのは、あまり変わっていないらしい。

通常、新しい社員を採用するときは、信頼されるユーザが、採用者を登録するよね。そんな感じ。

 

以後、ユーザを認証するときは、ユーザの専用ディレクトLDAPとかを使って組み込むのが良いよ。

そこでは、something you know、something you have、Something you areの要素を

複数利用した多要素認証を利用しよう。

アウトオブバウンド認証つかったり、SSO認証も使うのもよいね。

 

第7章

アプリケーションの信頼と信用。

サプライチェーンセキュリティみたいに、コード作成の部分から考える必要あり。

 

ソースコード→ビルド→ディストリビューション→実行

これらのフローすべてがセキュアじゃないといかんよ。

 

ソースコード

 意図的でも、意図的でなくても脆弱性が組み込まれる場合がある。

 ソースの保存場所はリポジトリにあるので、そこに最小アクセスの原則で

 セキュアにアクセスさせることと、コードが改ざんされてないかを確認する。

 GITとかはまさにその例。あと、コードレビューね。

 

ビルド

 ビルドサーバは標的型攻撃を受けやすいらしい。

 ビルドサーバって昇格されたアクセス権限を持っていて、

 本番環境で実行されるコードを生成されるから。

 リスクとしては、以下の通り。

  •   ビルドしたソースはちゃんと意図したコードか。
  •   ビルドプロセスは大丈夫か。
  •   ビルド自体正常で、改ざんされてないか。

 

 ビルドシステムは署名されたコードを読み込んで署名された出力を生成するけど、

 ビルドそのものは暗号化されないんだって。以下の点に注意しよう。

  •   入力を信用するように、署名されたものを入力させること。
  •   ビルドの冪等性を確保し、誰がビルドしても同じバイナリが生成されること。
  •   リリースバージョンと成果物バージョンを切り離すこと。

 

ディストリビューション

 バージョンとビルドIDを管理すること。

 改ざんされないように、ハッシュ化と署名をすること。

 ディストリビューションのネットワークが不正なものじゃないか確認すること。

 

あと、全体通して、極力人間が関わる部分を限定させたほうがよいよ。

 

アプリケーションは、バージョンとビルドIDをちゃんと管理された状態で適切にアップデートさせること、何らかのシークレットを利用して認可を受けたアプリを利用すること。

 

また、ランタイムも注意しよう。人も含む。アプリをハックするより人を買収したほうが早かったりするよ。

 

アプリケーションは、アクセスできるリソースをアプリごとに制限しよう。

そうすると、変に攻撃されても、侵害される範囲を制限できるよ。

SELinuxとか、仮想化とかね。

 

加えて、アプリの挙動も監視しような。

 

第8章

トラフィックの信頼と信用

ゼロトラストでのトラフィックは、当然暗号化は必要だけど、もう一つ、完全性を確保しておかないといけないよ。

 

最初のパケットの信頼の確立はファーストパケットと呼ばれる。

これは事前認証と呼ばれる手法で解決できるらしい。SPAというもの。

事前認可鍵を持っているパケットは署名されたパケットを送信できるようになる。

この実装はfwknopを利用されるらしい。

 

あとは暗号化しようね。

 

ちなみに、ゼロトラストはOSI参照モデルでいうとでどこに位置するのかという話があった。

ゼロトラストの暗号化によく使われるのは、TLSIPSEC

TLSとは5、6層あたり。IPSECは3、4層あたり。

 

ゼロトラストは全てセキュアしようというのが基本的な考えなので、より下位にある

IPSECのほうがうってつけとされる。

 

ただ、IPSECってまだあまり普及しきってない。

レガシーに比べて比較的あたらしいプロトコルだから、機器が対応してなかったりするとかなんとか。

そうなん?ここあまりピンとこなかったけど。

 

なので、クライアントとサーバのやり取りはmTLS、サーバ間のやり取りはIPSECかなってこの本では言ってる。

 

あとはフィルタリングしようや。

 

第9章

ここまでは、概要に加えて信用と信頼の話をしてきた。

この賞ではゼロトラストをどう構築していくかという話をする。

 

ゼロトラは最初から満たさなきゃいけない要件のリストじゃなくて、それらを目標として取り組んでいくもんやで。

 

この筆者の見解としては、以下にまず取り組むことが大事とされる。 

  • ネットワークフローはすべて処理される前に認証されなければならない (MUST)。 
  • ネットワークフローはすべて送信される前に暗号化されるべきである (SHOULD)。 
  • 認証と暗号化はネットワーク内のエンドポイントで実行されなければならない(MUST)。 
  • システムがアクセス制御を実行できるようにするために、ネットワークフローはすべて列挙されなければならない(MUST)。 
  • ネットワーク内では最も強力な認証 / 暗号化スイートを使用すべきである (SHOULD)。
  • 認証にパブリック PKI プロバイダを使用すべきではなく(SHOULD NOT)、 代わりにプライベート PKI を使用すべきである。 
  • バイスのスキャン、パッチ、ローテーションは定期的に実行すべきである (SHOULD)。 

 

次にシステム図を作ろう。

その後にネットワークフローをとりましょう。全てのパケットをみるような感じ?かなり大規模になるけど。

 

構築当初は、最初のうちはコントロールプレーンがないアーキテクチャがある。その場合どうするか。

構成管理ツールを使ってズルするといった方法がある。

  •  構成管理ツールを使うことで、システム対する変更を一貫した方法で適用できる。
  •  構成データをバージョン管理システムに保存すると、変更とその理由がわかる。
  •  構成管理システムによって設定ズレが起きない。といったメリットがある。

 

アプリケーションの認証と認可をしよう。

アプリごとに認証システムを実装するよりは、認証と認可を一元的に提供しとく。SAMLとか、openIDとかね。

 

ロードバランサとプロキシの認証をしよう。

ロードバランサとプロキシでユーザとデバイスの認証・認可をすることができるよ。

 

リレーショナルなポリシーを作ろう

2つのデバイス間の通信がFWといった従来のシステムで構成されていた場合、

これらのFWに設定されたポリシーを使ってリレーショナルなポリシーを運用させる感じかね?

 

ポリシーの分散をしよう。

これも、構成管理システムを使って代替できなくはない。

リレーショナルなポリシーに基づいてソフトウェアFWを設定すれば、

ホストごとのエンフォースメントを作れるし、通信もmTLSを使ってやればよい。

 

そしてポリシーの導入しましょうね。

 

次にゼロトラストプロキシを導入しよう。

具体的にアプリケーションプロキシのこと。認証、認可、暗号化を処理するためのもの。

こいつらは、リバースプロキシとフォワードプロキシで稼働させることができる。

どちらか一方の場合もあれば、両方使う場合もある。

 

第10章

ゼロトラストに対する攻撃者の視点を解説する章

 

なりすまし

 クレデンシャルが盗まれるとやばいよ。

 ゼロトラストでは、デバイス、ユーザでそれぞれ認証されるから、

 従来よりは安全だけどさ。多層防御的になってるからかな?

 

DDoS

 DDoSは従来から継続的に脅威になるよ。

 オンラインのDDoSサービスは使ったりしたほうがよいよね。

 

エンドポイントの列挙

 ゼロトラストでは、機密性は保証されるけど、プライバシーは未保証。

 サイト間トンネルを使ってトラフィックを隠蔽することは、ゼロトラストでも可能らしい。

 ちょっとようわからん。

 

コンピューティングプラットフォーム

 信用されていないコンピューティングプラットフォーム使うとやばいよ。

 コンピュータも永続データのメモリとか暗号化したほうがよさげ?

 

ソーシャルエンジニアリング

 これも従来から引き続き注意してね。

 

物理的な脅威

 脅迫とかね。あとUSBデバイス差し込まれたりとか。

 

無効化

 実行中のセッションが数日間確立されたままだとあれだから、適宜無効化したりとか?

 

コントロールプレーンのセキュリティ

 ここは俺もおもったわ。ここが侵害されると終わりだよね。

 基本は限定的なネットワーク接続と厳密なアクセス制御から。

 あと、コントロールプレーンをシステム管理の観点から分離させる。

 専用のアカウントで管理されるか、より厳重なアクセス制御が適用される

 データセンタの一部で動作させるとかね。

 

 

自宅にVPNサーバを構築してみた日記(l2tp,centos7)

ちょくちょく喫茶店に行くのだけど、フリーwifiってあまり信用していないので、やっぱり気軽にVPN使えるようになりたい。

でもケチなので、巷のVPNサービスに金は払いたくない。

という理由から、昔実家で作って放置していたNAS(CentOS)を使ってVPNサーバを作ってみることにしたよ。

 

[L2TP VPN]

ざっと書いてるので間違ってたことがあったら教えて下さい。

 

VPNはトンネリングと暗号化の2つの技術によって成り立つ。

トンネリングについては以下を参照すると、なんとなくわかるような気がする。

https://www.kddi.com/yogo/通信サービス/トンネリング.html

 

ようは、VPNって、例えば自宅VPNサーバとモバイルの端末をVPN接続したいなーってなったら、そのサーバとトンネルを張って、その通信を暗号化するということでVPNが成り立つ。

なので、多分だけど極論いえば暗号化しないのであればIPSECいらないんじゃないかな。

 

で、流れとしては、まずVPNサーバとL2TPというプロトコルを使い、レイヤ2のフレームにL2TPヘッダを加えて、VPNサーバとモバイルの端末の間でトンネルを貼る。

そして、そこでやり取りするレイヤ3のパケットを、IPsecで暗号化して通信するということになるよ。

 

ふーん、なるほど。なんとなくわかったような気がするよ。完全に理解したかと言われるとあやしいけど。

https://www.infraexpert.com/study/study10.html

 

今回はL2TPを使ってVPNを実装しますよ。

 

[使った機器、ソフト類]

Centos7のlinuxマシン

Xl2tpd

 →l2tpdでVPNを実装するためのもの。

Libreswan

 →l2tpdはipsecとIKEの機能がないので、それを実装するもの。

 

[実装]

https://blog.kobalab.net/entry/20170804/1501857811

https://qiita.com/yume_yu/items/09f57a8923341c5b2316

 

このあたりを参考に。

 

悩みポイントは後述するけど、流れ的には以下の通り。

l2tpの設定

xl2tpd.conf

サーバのIPとか、クライアントに払い出すIP範囲をとかを記載するところ。

options.xl2tpd

その名の通りオプションで、

vpn(l2tp)サーバに接続するための認証方法とか、dnsとかを記載するところ

chap-secrets

認証ユーザ、サーバ、パスワード、受け付けるIPアドレスを記載するところ。

 

ipsecの設定

ipsec.conf

ipsecの設定を記載するところ。

ここでは、プログラムでいうmain文みたいなもんで、実態は他のファイルに目的ごとにそれぞれ設定ファイルが存在する。

ここにはそれらをincludeするよ、という文のみが記載される。

 

l2tp-ipsec.conf

NAT、NoNAT時において、ipsecの接続モードとか、サーバIPが記載される。

 

default.secrets

PSKを記載するところ。

 

③firewalledの設定

centosファイアウォールIPSECL2TP用の穴を空ける。

 

④sysctlの設定

sysctlはカーネルのパラメータを変更するときに使うlinuxコマンド。

ipv4や、NICに関する?カーネルパラメータをいじる必要があるみたい。

 

⑤ポートの穴あけ(ポートフォワード)

これはルータ側の設定。

IPSEC AH 50

 →認証に使う。

IPSEC ESP 51

 →パケットの暗号化に使う

IPSEC IKE500(UDP),4500(UDP)

 →鍵交換に使う。

L2TP1701(UDP)

 →カプセル化(トンネリング?)にはこのポートを使う。

 

[悩みポイント]

l2tpにつかうポート

これはそんなに起こり得ないかもしれないけど、別のサービスとl2tpに使うポートが競合していて、エラーがでていた。

なんでそんなことが起きたのかというと、昔このマシンにopenvpnを入れようとして、その時は面倒になって途中で設定するのやめたのだけど、その時にopenvpnのサービスを起動しっぱなしにしていたということ。

そこのサービスとポートがかぶってエラー吐いていたので、openvpnのサービスを停止させたら直った。

 

ip-secのconfig

ここに結構悩んだ。

というのも、参考にしたサイトを見ると、ここには「ローカルのIP」を記入!、

ここには「グローバルのIP」を記入!ぐらいしか記載なくて、

どの端末のローカルのIPアドレスなの?グローバルIPならルータだけど、ローカルならサーバなのか、ルータなのかどっちもあるしわからんやんけ!となり、他に設定あっているかどうかわからん部分も重ねて相まって、原因特定にちょっと時間がかかってしまった。

 

結論から言うと、

つまるところ、コンフィグに設定するIPアドレス類は、全部VPNサーバにしようとしている端末のIPアドレスで良い。

ルータの穴あけ部分で、通信に必要なポートに接続されたときは、ルータがVPNサーバにポートフォワードするため、configの設定としては、VPNサーバのIPアドレスでよいということ。

 

言われてみたらそのとおりなんだけど、ああなるほどって思った。

ちなみに、ここまでの作業一連をすべてやってくれる神スクリプトがgitにあるので、さっさとやりたい人はgitしてきたほうが良いよ。

https://gist.github.com/mix3/efbaf5cb47946bff6f56

 

という感じで、これでVPNにはつながる。ただし、実家のグローバルIPが固定になっていないので、DDNSを使ってIPと紐付ける作業が必要になる。

 

[DDNS]

ieserverを使ってます。

使い方はieserverのHPを見てもらえればわかるかと。

無料ダイナミックDNS(DDNS)サービス - ieServer.Net

 

 

アドレスを更新する際に利用するWgetでのアクセス先には、HTTPSを使うことにするよ。

https://fedorasrv.com/domain-ieserver.shtml

こいつを参考にcronに突っ込む。

 

で、全部の設定完了。

外部から接続できましたよ。やったぜ。

もちろんiphoneでも利用可能なので、これからフリーwifiあってもセキュアに接続できるね。

 

ただ、所詮パスワードでしか認証できていないから、証明書とか使ってできないのかなあと思ったりもしている。この辺やり方あったら教えて下さいエッチな人。

nature remo + raspberry piで温度/湿度を表示させたよ日記 ②

前回nature remoから取得できた湿度データを今度は、7segdisplayに表示させるよ。

 

まずはラズパイでLEDを制御してみる。

とりあえずググったりしてLEDを光らす回路を作ってLEDを光らせることにした。

でもなぜか光らなかったり。

ちょっとブレッドボードが適当な作りな気がして、いろいろと接触不良があるっぽい。

でもとりあえず作った回路とサンプルコードでLEDを光らすことに成功。

 

めっちゃ簡単なんだけども、おおーってなったよ。ちょっと感動しますね。

この後PNPトランジスタも使って増幅させてみたりして遊んだ。コレクタ接地コレクタ接地。

こんなことやるの大学以来だから楽しいなー。

 

使った言語はpythonです。別にpythonでなくてもなんでもいいんだけどもね。

f:id:tamin-ta:20200719160750j:plain

 

7segdisplayに湿度を表示させる。

で、7segdisplayをいじってたら、シフトレジスタを使うっぽかった。

なんでつかうんだっけと思ってデータシート調べたらフリップフロップが中に入っているらしい。わおまじか。

なんとなくの挙動は覚えているけどどういう用途で使うのかがおじさんすっかりわすれてしまったよ。

というわけでググる

 

8ビットシフトレジスタで配線さっぱり - Qiita

このサイトが一番個人的に参考になりましたね。

ラズパイのGPIOに限りがあるので、それを減らすためにシリアルの信号を保持して、

パラレルの信号に変換できるよってもん。

なーるほどね。じゃあGPIOがが余ってたらあえて使わなくてもいいんだね。

まあ今回はせっかくなのでシフトレジスタを使って実装してみる。

 

回路図は以下の通り。字が汚くて悲しい。

f:id:tamin-ta:20200719162007j:plain
桁は数値の桁のことですね。

 

回路はこんな感じ。後はpythonスクリプト書くよ。

 

import json
import requests
import RPi.GPIO as GPIO
import time as time

D4 = 17
D3 = 18
D2 = 19
INPUT = 20
STCP = 22
SHCP = 21
segCode = [0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f]

def getSensorData():
apikey = "[APIキー]"

headers = {
'accept': 'application/json',
'Authorization': 'Bearer ' + apikey ,
}

response = requests.get('https://api.nature.global/1/devices', headers=headers, verify=False)
data = response.json()
# print(data[0]["newest_events"]["te"]["val"])
return data

def setup():
GPIO.setmode(GPIO.BCM)
GPIO.setup(D4, GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(D3, GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(D2, GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(INPUT, GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(STCP, GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(SHCP, GPIO.OUT,initial=GPIO.LOW)

def shift(dat,seg_num):
GPIO.output(seg_num,GPIO.HIGH)
for bit in range(0, 8):
GPIO.output(INPUT, 0x80 & (dat << bit))
GPIO.output(SHCP, GPIO.HIGH)
GPIO.output(SHCP, GPIO.LOW)
GPIO.output(STCP, GPIO.HIGH)
GPIO.output(STCP,GPIO.LOW)

def clear():
for i in range(8):
GPIO.output(INPUT, 1)
GPIO.output(SHCP, GPIO.HIGH)
GPIO.output(SHCP, GPIO.LOW)
GPIO.output(STCP, GPIO.HIGH)
GPIO.output(STCP, GPIO.LOW)

def initialize():
for i in [D2,D3,D4]:
GPIO.output(i,GPIO.LOW)

def main():
data = getSensorData()
s = str(data[0]["newest_events"]["hu"]["val"])
while True:
clear()
initialize()
shift(segCode[int(s[-1])],D4)

clear()
initialize()
shift(segCode[int(s[-2])],D3)

try:
clear()
initialize()
shift(segCode[int(s[-3])],D2)

except IndexError:
clear()
initialize()

def destroy():
GPIO.cleanup()

if __name__ == '__main__':
setup()
try:
main()
except KeyboardInterrupt:
destroy()

 

こんなコード書いたら動くよ。もっと綺麗にかければいいんだけどね。

 

流れは以下の通り。

1 nature remoからセンサデータを取得。

2 一桁ずつ読み込み、ビットシフトを使ってパラレル変換し、displayに出力。

3 出力のたびにクリア、初期化を行う。

 

これを3桁分繰り返すことで、displayに表示される。

 

f:id:tamin-ta:20200719160759j:plain

 

わーい。光った。この63は湿度のことっすね。

家の湿度63%ってことだよ。なんか感想言いづらい普通の湿度でしたわ。

 

ちなみに最初はトランジスタ使って電流増幅させてたんだけど、取っ払ってもそんなに

暗くなかったので、取っ払ったものが完成版になりました。

※ソースはトランジスタ取っ払ったバージョンですよ。

 トランジスタ有り版との違いは、HIGHかLOWかが逆になるくらいですね。

 

とりあえず完成したので、遊びがてた適宜使っていくか、もしくはLINEと連携させて、

湿度をLINEに送るやつ作っても、楽しいかもね。

 

nature remo + raspberry piで温度/湿度を表示させたよ日記 ①

nature remoから取得した温度/湿度をラズパイにつなげた7segd-displayに表示させてみたので、その流れを記載。

 

こういうの作った。

表示してるのは湿度。

f:id:tamin-ta:20200705073814j:image

 

概要

f:id:tamin-ta:20200616235408j:plain

絵が汚くて謝謝。

 

流れ

ラズパイからAPI使ってNature remoを叩きに行く。

叩かれたNature remoは温度/湿度をラズパイに返す。

受け取った温度/湿度をラズパイのGPIOにつながった7segdisplayに出力する。

 

開発環境は以下の通り。

・開発PC macbook pro 16 + vscode

・使用言語 python

・ソース管理 Github

macでソースを作ってgithubにpush。ラズパイからソースをpullしてきて

プログラムを実行する流れ。

github使ってるのはただ単に使ってみたかっただけなので、深い意味はないよ。

 

まずはNature remoからセンサデータを取得してみる。

nature remo

 スマート赤外線リモコンの製品名。

 こいつを使うとリモコン操作の家電をスマホで操作することができるよ。

 人感センサ、温湿度計等も内蔵していて、それらの値をトリガーにして家電を

 操作することもできる。

 *温度〜以上だったらエアコンつけるとか。

 

 ちなみにAIスピーカにも、IFTTTにも対応しているので色々と遊ぶことができる。

 今の家ではエアコンと中華製ロボット掃除機をAlexaから操作して運用してます。

 

 こんな製品なんだけども、こいつはWebAPIも持っているのでjsonでセンサの値を

 取得することができたりする。

 

アクセストークンを取得する。

以下ページにアクセスして Generate Access Token を押すとトークンが発行される。

 https://home.nature.global/ 

 

センサデータを取得して見る。

curlとか使ってnature remoにHTTP GETを投げつけるとセンサデータが格納されたjsonが返ってくるよ。

 

入力コマンド

curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -k --header "Authorization: Bearer トークンの文字列"

 

ターミナル上でjsonが表示されるのでかなり見ずらいけども、以下みたいな結果が返ってきます。

※一部省略。名前とか記載されてるので。

"newest_events":{"hu":{"val":66,"created_at":"2020-06-23T06:40:35Z"},"il":{"val":58,"created_at":"2020-06-23T09:03:09Z"},"mo":{"val":1,"created_at":"2020-06-23T09:08:00Z"},"te":{"val":26.6,"created_at":"2020-06-23T07:32:07Z"}

 

 

huがhumidity、ilがilluness、moが人感センサの値、teがtemperature。

それぞれの値はvalに記載されてる。時刻はGMTなので日本時間と異なるので注意。

このvalの値を7segdisplayに表示させればOK。

 

ただ、これはあくまで動作確認用。

ターミナル上のコマンドで取得してきているので、7segdisplayに表示させるなんかしらのプログラムで動作させないといかん。

今回はpython使って作ることにした。

 

とりあえず湿度を表示させるプログラムは以下。これをラズパイ上で実行する。

import json
import requests

apikey = "トークンの文字列"

headers = {
'accept': 'application/json',
'Authorization': 'Bearer ' + apikey ,
}

response = requests.get('https://api.nature.global/1/devices', headers=headers, verify=False)
data= response.json()
print(data[0]["newest_events"]["hu"]["val"])

 

dataの["hu"]の部分をteとかにすれば温度も表示できる。

かんたんね。

 

あとはこのプログラムで取ってきた湿度とか、温度を7segdisplayに表示させることができれば完成。

この辺の話は次回。

 

 

CISSP取得したよ日記

メインでアウトドアブログをやってるんですが、コロナの影響でなかなか

外出できず、ネタが作れないので、IT系のブログを別途はじめました。

 

初回は最近CISSPという資格を取得したので、取得までの流れを書きます。

 

CISSPとは

CISSPの正式名称はCertified Information Systems Security Professional

ということで、まあ、平たくいうとセキュリティ関する資格。

 

大正義アメリカの非営利団体である(ISC)2 (International Information Systems Security Certification)が認定してるよ。

 

認定には以下が必要になる。

・試験合格(受験料$699 ※たっけえええ)

・5年以上の実務経験(大卒証明があると4年でも可)

・エンドース(CISSPホルダーの推薦か、ISC2に認定資料を提出する)

・(ISC)2の年会費($125 ※たっけえええ)

 

 

取得の理由

会社でセキュリティの研修を長期的に受けさせてもらったのが主な理由。

なんで受けたの?って言われると、部でやってる業務がクソほど面白くなかったから。上司と部長に文句行って長期的に出させてもらった。

で、その中で会社でバウチャー込のセミナー受けさせてもらったりしたので、そのまま取得することに。

 

 

試験内容

公式ページに書いてる。

セキュリティに関する8ドメインから出題される250問4択の問題を6時間で解く。6時間て。

テストセンターのPC使って回答していく感じ。合格基準は7割。

 

勉強方法

勉強は大きく2つのみ。

①オフィシャルセミナー 5日間

 これ数十万する。個人じゃ無理ぽ。

 でも受講する価値あった?と言われたら間違いなくあったと思う。

 

CISSP公式問題集 

 セミナー受講後はこれを繰り返し繰り返し解く。

 CISSPって答えの導き方が独特というか、特有の考え方があるのでこれを

 使ってその考え方を磨く。この問題集を2,3ヶ月ひたすら繰り返した。

 わからないところはググって調べて復習したり。

 

試験当日

確か8時からだった気がする。朝早いな。

テストセンターには服と眼鏡等の装飾品以外は基本持ち込み不可。

確か時計もだめだった気がする。

私はハンカチもだめって言われた。ええーハンカチもだめなんか。

 

そんなこんなで試験。最初の2時間くらいで全部解く。

わからないところは保留にしておいて後で見返す。

その後1時間くらいかけて全部見直して、もう大丈夫だろ!お腹も空いたしこれ以上は知らん知らん。って感じで試験終了した。

 

ちなみに試験結果は退出後にすぐもらえる。

試験結果が記載されたプリントをもらうんだけど、そこには合格おめでとう的な文言あり。あーよかった。

 

合格祝い兼おなぺこのため刀削麺食べて帰りました。

 

エンドース〜認定まで

合格後は9ヶ月以内にエンドースする必要があるよ。

エンドースはCISSPをすでに持ってる人に推薦してもらうか、(ISC)2 に認定してもらうための資料を提出するかの2択。

ちなみに後者は英語ということもあってかなり面倒らしいので、基本的には推薦してもらうのが一番いいみたい。

 

私は会社の方にエンドースしてもらうことに。

流れとしては自分の職務経歴をWEBで登録してエンドースする人に投げる感じ。

職務経歴は英語で書かなきゃいけなかったので面倒だったけど、そんなに細かく書かなくてもよかったのでトーイック600以下のおじさんでもなんとか書けるよ。

ちなみにランダムで監査対象になるらしく、監査対象になると実務経験の職務証明とか出さないといけないらしいよ。怖い。

私は運良く監査対象になりませんでした。

 

認定自体は割と早く、数日で認定してやったぜ!まずは年会費払いな!というアメリカンなメールが届いた。

とりあえず年会費払ったら認定されました。いえーい。

 

その後

この資格は取得したら終わりというわけではなく、認定継続要件が必要。

ちなみに要件は以下の通り。

・年会費を払う。

・認定後3年間で120CPE獲得必須。

 ※CPEとはセキュリティ関係のお勉強なり、セミナー受けるともらえる

  ポイントみたいなもん。

 

大変ね。

まあ転職にも使えそう価値ありそうなので頑張ってキープすることにします。

 

所感

試験について

 試験は難しかったと思う。試験範囲が幅広いんよね。

 ネットワーク、システム、セキュリティに関して幅広にでるので、結構な

 知識量が必要な気がする。

 4択の問題といっても、IPA情報処理試験の4択問題よりは全然むずい。

 

受験時の会員登録について

 CISSPの試験ってpeason vueというCBT試験を運営している会社が

 やってくれていて、peason vueと(ISC)2 別々で会員登録する必要がある。

 

 そのためか、peason vueでしか会員登録していない状況で試験合格したよ!

 とメール通知受けて、さあ(ISC)2 に会員登録してエンドースしようと

 したときに、peason vueの会員番号とかを紐付けする欄がなかった。

 これだとどうやって試験結果紐付けてるだ?って感じ。

 

 でも見たところpeason vueで(ISC)2 の試験受講をしたときに、

 すでにISC2の会員番号が割り振られていたようで、メールアドレスで

 紐付けされてるみたいだった。分かりづらいな。

 でもメールアドレスでの紐付けだけだとなんか不安だけどねえ。

 

 あと、一番不安だったのは、peason vue に登録したときにAssociateと

 しての受験を選択してしまったこと。

 

 Associateとは、実務経験が5年以下の人だけどCISSPに受かったよって

 人がなる準会員。公式サイトを見ると、Associateの人は合格後は準会員に

 ついての案内になるよって書かれてて、あれ?これ大丈夫か?俺経歴5年以上

 あるんだけど?と不安になっていた。

 

 でも、エンドースしたら無事認定された。年会費もちゃんと正会員の

 $125でした。

 ※準会員は$50。エンドースが終わるまでISC2のサイトでは準会員扱い

 だったから、認定されても準会員になってしまうんじゃないかと

 ビクついていた。

 

英語が多く分かりづらいところが多かったけど、まあとりあえず合格できてよかったです。英語で職務経歴書くのむずいよ。