Introduction to Cybersecurity with Chronicle | Udacity を受講した

ネットワークの勉強の一環で Udacity の Introduction to Cybersecurity を取ってみた。

www.udacity.com

講義動画自体は長くても1分程度で動画を見ると言うよりも各ページに書かれた説明を読んでいくという形だった。

Introduction ということもありセキュリティのために具体的にどう設定するかということよりも、Cybersecurity とは?といった概念的な講義であった。

広く浅くといった内容だったのでクラウドでよく使われる用語をざっと知るにはちょうど良いのかなと思う。

個人的にはもっと踏み込んだ内容が知りたかったので物足りなさを感じた。 他の講義で security を題材にしているものは、GorgiaTech の院生向けの講義で一気に難易度が上がりそうなので次に勉強するのは何が良いのだろうかと言う感じ。

AWS Developer: Building on AWS | edX を Terraform を使ってやり直してみた

AWS が edX で開講している AWS Developer: Building on AWS を Terraform でやり直してみた。

www.edx.org

この講義では最終的に下図のようなシステムを構築する。

https://s3-us-west-2.amazonaws.com/us-west-2-tcdev/courses/AWS-100-ADG/v1.1.0/exercises/Arch+Diagram.jpg

以前にもこの講義を受講したことがあり、その時は講義どおりマネジメントコンソールからポチポチして構築していったが、今回は復習と Terraform の勉強を兼ねて、Terraform でできるところは全て Terraform でやってみた。

github.com

今まで雰囲気で使っていたところを理解しながら進めることが出来たと思う。 全てを Terraform でやるというのは慣れていない私のようなものからすると大変ではあったが、日々の業務にも役立つことが勉強できてとても有意義だった。

失敗談

Terraform を使った理由としては、もちろん Terraform の勉強と言う面もあったものの、もうひとつの理由として terraform destroy で手軽に使ったリソースを破棄できるところにあった。だが、destroy するときには少々気をつけねばならないことがあることも知った。

まず S3 と RDS はデフォルトの設定だと terraform destroy で破棄できないため、 S3 の場合は force_destroy を、RDS の場合は skip_final_snapshot をそれぞれ true にする必要があった。

www.terraform.io

www.terraform.io

それと今回のように勉強のために Terraform を使って最終的に destroy することが前提の場合、count を使うととても面倒になることもわかった。

Error: Invalid count argument

  on sg/sg.tf line 27, in resource "aws_security_group_rule" "ingress_sg":
  27:   count                    = "${var.security_group == "" ? 0 : 1}"

The "count" value depends on resource attributes that cannot be determined
until apply, so Terraform cannot predict how many instances will be created.
To work around this, use the -target argument to first apply only the
resources that the count depends on.

結局どう対処すればいいのかわからなくて手動でリソースを地道に消していった。

「ふつうのLinuxプログラミング」を読んだ

日頃 Linux を使っているものの、Linux について全然理解していないなぁと思っていたので「ふつうの Liunx プログラミング」を読んでみた。 読み終わるまでに22時間12分かかった。

この本の構成は以下の通り

 
●目次  
第1部 Linuxの仕組み  
 第1章 Linuxプログラミングを始めよう  
 第2章 Linuxカーネルの世界  
 第3章 Linuxを描き出す3つの概念  
 第4章 Linuxとユーザ  
第2部 Linuxプログラミングの根幹  
 第5章 ストリームにかかわるシステムコール  
 第6章 ストリームにかかわるライブラリ関数  
 第7章 headコマンドを作る  
 第8章 grepコマンドを作る
 第9章 Linuxディレクトリ構造
 第10章 ファイルシステムにかかわるAPI
 第11章 プロセスとハードウェア
 第12章 プロセスにかかわるAPI
 第13章 シグナルにかかわるAPI
 第14章 プロセスの環境
第3部 Linuxネットワークプログラミング
 第15章 ネットワークプログラミングの基礎
 第16章 HTTPサーバを作る
 第17章 HTTPサーバを本格化する
 第18章 本書を読み終えたあとは

第1部で Linux の概要、第2部で実際に手を動かして system call や各種 API を使い、第3部ではそれらの知識を総動員して HTTP サーバを作るという流れになっている。

この本の良いところはなんといっても手を動かしながら学べることだと思う。

この本で扱っているような内容は初心者向きの本や記事だと概念的なものにとどまっているが、逆に専門書だと私のような基礎のない者からすると始めで撃沈してしまう。この本はちょうど両者の橋渡し的な本のように思う。

言語は一貫してC言語を使用している。各種APIの使い方の解説はあるが、C言語の文法の話は基本的に無いので、C言語を使ったことがないという方は先にC言語の入門書(苦Cなど)を読むことをおすすめする。

最後の書籍案内のところで著者が「私はかなり保守的な(堅い)書籍を選ぶ傾向があります。」とおっしゃっているが、そのような方が書く本であるので、巷の「○日できる XX」のような書籍とは趣が異なる。 おそらく、この本を読んでも実務において役に立つことは少ないと思われる。

しかし、今までブラックボックスというか、なんとなくで使っていた部分の詳細を知ることができ私はとても満足できた。 具体的には FILE にはファイルディスクリプタに加え stdio のバッファの内部情報が入っているということを知らなかったし、簡単なシェルならばC言語でも150行程度でかけるとは思ってもみなかった。

https://github.com/aamine/stdlinux2-source/blob/master/sh1.c

また、最近のプログラミング言語GCが付いているのが当たり前で、自分でメモリ管理をするなんてことは滅多にないが、C言語ということもあって malloc, free を使って自らメモリ管理しなければならない。ポインタ演算も当然出てきて、いかにもなC言語を存分に楽しむことができた。 文字列の比較やコピーするために strcmpstrcpy といった専用の関数を使うなんて今日日なかなか味わえないだろう。

最終的に出来上がる HTTP サーバもかなり原始的なものであるが、現代において socket を明示的に使用してサーバを建てるなんてことは早々ないと思うのでなかなか貴重な体験ができた。

i.loveruby.net

github.com

Terraform で 「Amazon Web Services 基礎からのネットワーク&サーバー構築」をやり直す

Terraform の練習がてら「Amazon Web Services 基礎からのネットワーク&サーバー構築」の内容を全て Terraform でやり直してみました。

1週目は本の通りに AWS コンソールからポチポチして無事に完走しているので、設定を間違えさえしなければ Terrraform を使っても無事に動くはずという確信があったので地道に本の設定を Terraform に翻訳していきました。
わけもわからず Terraform の公式ドキュメントの例の通りに instance_tenancy = "dedicated" などとしてひっかかったりもしましたが、無事に完走することが出来ました。

www.terraform.io

github.com

他にもこの本の内容を Terraform で書き直している方はおられるようでしたが、それを見ると単なるコピペになってしまって理由はわからないけど動いたといった状態になってしまうと思ったので Terraform の公式ドキュメントだけをみて頑張ってみました。

この本の内容はかなり基礎的なところだけで S3 や RDS、IAM といったものには触れていないので次はそれらを含めた設定も書いてみようと思います。
edX に上がっている AWS inc. の AWS の講義「AWS Developer: Building on AWS」は受け終わっているので今度はこの講義の内容を Terraform で書き直してみるのがちょうど良いかもしれません。

www.edx.org

Manta40 を組み立てた

少しずつ作っていた自作キーボード "Manta40" がようやく完成しました。

私は軽いキータッチが好きなのでスイッチは Gateron Clear (35 g)。
はんだごてを使うのは久リぶりだったので手こずりましたがなんとか動くものが作れました。
私は Dvorak user なので Dvorak 用のキーマップを作成。ついでに左の Control は Tab とのタップダンスに変更しました。

プロマイクロの micro USB との接続部はもげやすいらしいので、マグネット式のアダプターを購入。

sudo pacman -S avr-gcc arduino-avr-core
git clone --recurse-submodules git@github.com:goropikari/qmk_firmware.git
cd qmk_firmware
git checkout manta
make manta40:dvorak
sudo make manta40:dvorak:avrdude

https://github.com/goropikari/qmk_firmware/tree/manta/keyboards/manta40github.com

https://github.com/goropikari/qmk_firmware/blob/manta/keyboards/manta40/keymaps/dvorak/keymap.c

ちょっとした問題

アクリルプレートのうちの1枚の穴の位置がずれていて、キーが干渉してしまう。。。
アクリルプレートの方を削るべきか、キースイッチ側を削るべきか。

今のところ、この位置のキーを使う予定はないので問題はないのですが。。。