パイブライン処理での危険がパイブラインハザード

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : パイブライン処理での危険を学ぶ

勉強のきっかけになった問題

パイプライン方式のプロセッサにおいて,パイプラインが分岐先の命令を取得するときに起こるハザードはどれか。

  1. 構造ハザード
  2. 資源ハザード
  3. 制御ハザード > 正解
  4. データハザード

平成26年秋期問7 分岐命令で発生するハザード|応用情報技術者試験.com

パイブラインハザードは、パイプライン処理を止めたりやり直さなければならなくなり効率が悪くなることです。

  • 英語 : pipeline hazard

マイクロプロセッサ(MPU/CPU)のパイプライン処理で発生する問題の一つです。

そもそもハザードとは、危険の原因・危険物・障害物などを意味する英語です。

  • 英語 : hazard

https://resilient-medical.com/wp-content/uploads/2018/05/hazard1-600x450.jpg
https://resilient-medical.com/risk/hazard

ハザードの種類は、原因によって分けられます。

制御ハザードは、分岐命令によって先取りした命令が無駄になることです。

  • 別名 : 分岐ハザード
  • 例えば・・・
    • 条件分岐で実行の流れが二つに分かれる場合、条件の評価を待たずに先行して片方の分岐の命令群をパイプラインに投入することになるが、条件を評価した結果もう一方に分岐することが確定した場合、パイプラインの内容を破棄して正しい分岐の命令群を投入しなおさなければならない。
    • 分岐命令を実行した場合、次に実行される命令は、分岐が成立した場合と不成立の場合の2通りがある。分岐が成立しないと仮定して命令を先取りすると、分岐が成立した場合に先取りした命令をキャンセルし、改めて分岐が成立した場合の命令を実行しなければならない。

制御ハザードによって先取りした命令のキャンセルが発生し、ムダになったクロック*1のことをインターロック*2もしくはストール*3という。

http://security2600.sakura.ne.jp/main2/image3/hazard1.jpg
パイプラインハザード - Security Akademeia

解決方法
  • 分岐先が判明するまで先取りしない
  • 常に分岐が不成立(あるいは成立)と仮定して先取りを進める
  • 場合によってはストールが起こることを容認する。

f:id:ponsuke_tarou:20190315214631p:plain
飛鳥山公園

データハザードは、命令が直前の命令の実行結果を使用する場合に発生します。

ある命令が直前の命令の処理結果を利用するような場合に、実行結果を待たなければパイプラインが進められない状況が発生します。

http://security2600.sakura.ne.jp/main2/image3/hazard2.jpg
パイプラインハザード - Security Akademeia

https://image.slidesharecdn.com/sample-150315081741-conversion-gate01/95/cpu-16-638.jpg?cb=1449891681
CPUの同時実行機能

解決方法
  • NOP命令を挿入する
  • データハザードを検知したら実行結果を次の命令に直接たわしてしまう
    • 演算装置によってハードウェア的に実現される

構造ハザードは、CPU内部の資源の衝突によって発生します。

複数の命令をパイプラインで並行に処理する過程で、同じタイミングで同じハードウェア資源にアクセスしようとするなど競合が発生し、処理がつっかえることがあります。

  • 例えば・・・
    • 命令Aがメモリへの書込を行っているのと同じタイミングで後続の命令Bがメモリの読込をしようとするとメモリアクセスがバッティングします。バッティングしないようにするために命令Bは1クロック処理を遅らせる必要があります。これにより1クロック分遅延します。

https://news.mynavi.jp/article/architecture-124/images/002.gif
https://news.mynavi.jp/article/architecture-124/images/003.gif
コンピュータアーキテクチャの話(124) パイプライン処理と構造的ハザード | マイナビニュース

http://memes.sakura.ne.jp/memes/wp-content/uploads/2012/03/risc_contention.png
http://memes.sakura.ne.jp/memes/wp-content/uploads/2012/03/risc_hazard.png
マイコンの構造と処理3 – ミームス(MEMEs)のサポートページ

解決方法
  • ハードウェア的に回避することは可能。
    • しかし完全に構造ハザードを起こさない構成はコストの上昇を招く。
    • 構造ハザードの確率が低ければ、コスト上昇を抑えるために、多少の構造ハザードを無視するのが現実的である。

f:id:ponsuke_tarou:20190315003545p:plain
思い出の一枚

次回の勉強内容

勉強中・・・

*1:CPUの動作基準となる時間の単位で、このクロックの整数倍の時間をかけて命令を実行していきます。命令パイプライン中の1ステージの実行には最低1クロックかかるので、4ステージ構成の命令パイプラインでは、1個の命令を実行完了するためには、最低でも4クロックの時間が必要となります。CPUをはじめとしたコンピュータの各回路は、一定の時間で刻まれるクロック信号に歩調を合わせながら処理を行っています。 このクロック信号は、非常に正確な時間間隔でパルス(非常に短い時間の間だけ変化する電流)を発生する水晶発振器によって生成されます。

*2:安全装置・安全機構の考え方の一つで、ある一定の条件が整わないと他の動作ができなくなるような機構のこと。

*3:命令パイプラインでは、除算命令のように命令の処理完了に長い時間がかかる場合、パイプラインに次の命令を取り込むのを待つ必要がある。この問題の解決策としてパイプラインの各段階が忙しいことを示せるようにして、パイプラインをインターロックして次の命令がステップを進まないように止めなければならない。これがストールであり、分岐のように中断以前の処理が無駄になる場合にはストールに加えて無駄となった処理時間分も加わり、これらがインターロックのロスとなる。

パイプライン処理の基本を学ぶ

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : パイプライン処理の基本を学ぶ

勉強のきっかけになった問題

スーパスカラの説明として、適切なものはどれか。

  1. 処理すべきベクトルの長さがベクトルレジスタより長い場合、ベクトルレジスタの組に分割して処理を繰り返す方式である。
  2. パイプラインを更に細分化することによって、高速化を図る方式である。
  3. 複数のパイプラインを用い、同時に複数の命令を実行可能にすることによって、高速化を図る方式である。
  4. 命令語を長く取り、一つの命令で複数の機能ユニットを同時に制御することによって、高速化を図る方式である。

必ず受かる情報処理技術者試験-平成24年度春季-応用情報技術者-問題・解答11

パイプライン処理とは、マイクロプロセッサの高速化手法の一つです。

プロセッサ内での命令処理は、複数の段階を順次行います。

  • 処理の段階
    1. 命令の読み込み(フェッチ)
    2. 解釈(デコード)
    3. 実行(エグゼキュート)
    4. 結果の書き込み(ライトバック)

通常は、前の命令のサイクルが完全に終わらないと、次の命令を処理し始めることはできません。

http://mt-net.vis.ne.jp/images/501/FE2000S_18_a1.gif
パイプライン処理 [徹底研究!情報処理試験]

パイプライン処理は、各段階の処理を独立して動作させることで、前の命令のサイクルが終わる前に次の命令を処理し始められます。

http://mt-net.vis.ne.jp/images/501/FE2000S_18_a2.gif
パイプライン処理 [徹底研究!情報処理試験]

パイプライン処理には種類があります。

命令の処理を独立して実行できる工程に分割するのが、命令パイプラインです。
  • 英語 : pipeline processing

https://image.slidesharecdn.com/kagamicomput201514-150713021412-lva1-app6892/95/kagamicomput201514-14-638.jpg?cb=1436753672
kagami_comput2015_14

レンダリング処理の高速化に特化しているのが、グラフィックスパイプラインです。

3次元コンピュータグラフィックスで、3次元から2次元のデータを作る多段階の過程全体をパイプライン処理によって高速化しています。

https://game.watch.impress.co.jp/img/gmw/docs/590/700/ps_42_s.gif
西川善司の3Dゲームファンのための「プレイステーション 4」グラフィックス」講座(後編) - GAME Watch

命令パイプラインによる並列化と同じ方法でループ処理を最適化するのが、ソフトウェアパイプラインです。

アウト・オブ・オーダー実行*1に似ているものの、命令の並べ替えがCPU ではなくコンパイラで 行われる点に違いがあります。

http://my-web-site.iobb.net/~yuki/wp-content/uploads/2017/06/200612_dsp04_pipe.jpg
TI C64x DSPによる画像認識の最適化実装 | ある計算機屋さんの手帳

スーパースカラは、複数のパイプラインで並列に命令を処理できるようにする機構です。

https://ascii.jp/elem/000/000/555/555472/fig1_c_740x500.jpg
https://ascii.jp/elem/000/000/555/555471/

https://image.itmedia.co.jp/edn/articles/1702/24/tt170224MCUQA35_001.jpg
スーパースカラって何? (1/3) - EDN Japan

スーパーパイプラインは、パイプラインの段階を細分化して多くすることで並走できる命令数を増やします。

http://www.myelq.com/Glossary/Images/superpipeline.gif
スーパーパイプライン

https://img.atwikiimg.com/www38.atwiki.jp/hiropknot/attach/69/47/%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3.gif
コンピュータ構成要素 - hiropknot @ ウィキ - アットウィキ

http://www.ap-siken.com/kakomon/27_haru/img/09.gif
スーパースカラ: CPUの処理を高速化する手法 - general

f:id:ponsuke_tarou:20190314233906p:plain
パイプライン制御方式
f:id:ponsuke_tarou:20190314231009p:plain
思い出の一枚

次回の勉強内容

勉強中・・・

*1:コンピュータのプロセッサー(CPU)が命令を処理するとき、規定の順番(操作手順)を守らないで実行するやりかた。命令を一時的に溜めておき、命令を細分化してできる作業から実行する方式。メリット:無駄な待ち時間が発生しないのでの作業を高速化できる。デメリット:作業の分割など手間のかかる作業が増えるので、処理工程は複雑になる

DDoS攻撃の驚異を知る

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : DDoS攻撃の驚異を知る

勉強のきっかけになった問題

マルチベクトル型DDoS攻撃に該当するものはどれか。

  1. 攻撃対象のWebサーバ1台に対して,多数のPCから一斉にリクエストを送ってサーバのリソースを枯渇させる攻撃と,大量のDNS通信によってネットワークの帯域を消費させる攻撃を同時に行う。 < 正解
  2. 攻撃対象のWebサイトのログインパスワードを解読するために,ブルートフォースによるログイン試行を,多数のスマートフォンやIoT機器などの踏み台から成るボットネットから一斉に行う。
  3. 攻撃対象のサーバに大量のレスポンスが同時に送り付けられるようにするために,多数のオープンリゾルバに対して,送信元IPアドレスを攻撃対象のサーバのIPアドレスに偽装した名前解決のリクエストを一斉に送信する。
  4. 攻撃対象の組織内の多数の端末をマルウェアに感染させ,当該マルウェアを遠隔操作することによってデータの改ざんやファイルの消去を一斉に行う。

https://www.sc-siken.com/kakomon/30_aki/am2_4.html

Dos攻撃DDos攻撃は、サーバやサイトに大きな負荷をかけてダウンさせるサイバー攻撃です。

1つのIPアドレスから攻撃を仕掛けるのが、Dos攻撃です。

  • 英語 : Denial(否定・拒絶) of Service attack
  • 日本語 : サービス拒否攻撃

https://cybersecurity-jp.com/wp000/wp-content/uploads/2018/03/img_18262-01.png
DoS攻撃・DDoS攻撃とは?攻撃の目的や種類、事例、対策方法を解説

一人でF5ボタンを押下し続けるF5アタック

ブラウザでF5を押すと、画面をリロードしてくれます。しかもキャッシュ保存せずに。
なので、画面のデータを全部サーバへ要求します。
そしてF5を猛烈に連打するとサーバに負荷をかけることができます。

https://cybersecurity-jp.com/wp000/wp-content/uploads/2016/06/img_9233-01.png
F5アタックとは?F5攻撃・連打は犯罪?その対策方法など解説

複数のIPアドレスから攻撃を仕掛けるのが、DDos攻撃です。

  • 英語 : Distributed(分散型の) Denial of Service attack
  • 日本語 : 分散型サービス拒否攻撃

https://www.nttpc.co.jp/service/ddos/img/img_index_03.png
重要なサービス基盤を停止リスクから守るDDoS対策サービス|【公式】NTTPC

DDos攻撃では、ボットネットが使われます。

外部からの遠隔操作に従って処理をプログラムがボットです。
それがたくさん集まったのがボットネットです。
残念ながら、自分のパソコンやスマホにボットが入ってしまうとDDos攻撃の加害者となります。

https://eset-info.canon-its.jp/files/user/malware_info/images/threat/150120_3/images/img01.jpg
ボットネットとは何か? どうやって防ぐのか? | マルウェア情報局

ボットネットを遠隔操作するために指令を送ったり制御するサーバーが、C&Cサーバーです。
  • 英語 : Command and Control server

https://eset-info.canon-its.jp/files/user/malware_info/images/term/sa/images/171_1.jpg
C&Cサーバー | マルウェア情報局

ボットネットで弱いパスワードを使っているIoT機器に感染していき、大量の感染機器から一気に攻撃するマルウェア「Mirai(ミライ)」

https://image.itmedia.co.jp/tf/articles/1704/13/tfayagi_mirai1704_fig01.jpg
IoTデバイスを狙うマルウェア「Mirai」とは何か――その正体と対策:超速解説 Mirai - TechFactory

感染した端末上でIPアドレスをランダムに走査し、新たな標的を見つけます。そして、工場出荷時のデフォルト値や単純なID/パスワードの組みによる辞書攻撃によって、標的IoT端末のtelnetポートへのログインを試みます。この動作を繰り返して、ボットネットを拡大していきます。Miraiが構築したボットネットは、過去最大級の規模のDDoS攻撃を引き起こしています。
https://www.sc-siken.com/kakomon/30_aki/am2_11.html

攻撃には、種類があります。

大量データを送りつけて処理しきれなくなるようにするフラッド型

https://tech.nikkeibp.co.jp/it/article/COLUMN/20070307/264106/zu01.jpg
サービス妨害攻撃 --- DoS,DDoS,smarf,SYNフラッド,DNS amp | 日経 xTECH(クロステック)

脆弱性を利用して不正処理を行わせサービス機能を停止させる、脆弱性

WAFは、Webアプリケーションの脆弱性を狙う攻撃からWebアプリケーションを保護する対策です。
  • 英語 : Web Application Firewall
  • 読み方 : わふ

https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2016/04/waf1.png
https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2016/04/waf2.png
新入社員のためのWAF(Web Application Firewall)入門 | DevelopersIO

OSI参照モデルでいうとネットワーク層トランスポート層、アプリケーション層が攻撃に使われやすいです。

トランスポート層 : DNSサーバやNTPサーバを反射に使ってパケットを増幅させて行う反射型DDoS攻撃
  • 別名 : リフレクション攻撃、DrDoS攻撃(Distributed Reflection Denial of Service attack)
  • 反射に利用されるサーバ(リフレクター)の特徴
    • UDPを使用している >> TCPに比べてIPアドレスを詐称しやすい
    • 問い合わせよりも応答の方が大きい >> 攻撃の効率が上がる
  • これらの特徴に合うのが、DNSサーバやNTPサーバです。
    • 例)DNSリフレクタ攻撃(別名 : DNSアンプ攻撃)

https://www.sc-siken.com/kakomon/30_aki/img/07.gif
https://www.sc-siken.com/kakomon/30_aki/am2_7.html

https://jprs.jp/glossary/imgs/reflection.png
JPRS用語辞典|DNSリフレクター攻撃(DNSアンプ攻撃)

次回の勉強内容

ponsuke-tarou.hatenablog.com

メッセージカードコレクション2019春

1. 葉っぱ

f:id:ponsuke_tarou:20190220200446j:plain

2. あなたを考えています

f:id:ponsuke_tarou:20190220200514j:plain

3. 黒い花

f:id:ponsuke_tarou:20190220200544j:plain

4. 花と蝶

f:id:ponsuke_tarou:20190220200615j:plain

5. 花と鳥

f:id:ponsuke_tarou:20190220200701j:plain

6. 花とモルモット

f:id:ponsuke_tarou:20190220200737j:plain

7. 花とうさぎ

f:id:ponsuke_tarou:20190220200822j:plain

8. カラー

f:id:ponsuke_tarou:20190220201045j:plain

10. バラ

f:id:ponsuke_tarou:20190220201155j:plain

12. どシンプル

f:id:ponsuke_tarou:20190220201310j:plain

シール

f:id:ponsuke_tarou:20190220201224j:plain

Laravelのプロジェクトを作ってみる。

  • 環境
    • macOS Mojave version10.14.3
    • PHP 7.3.1
    • Composer version 1.8.0

Laravelは、ただで使えるMVCのWeb開発用フレームワークです。

laravel.com

Laravelをインストーラを使わないでインストールします。

readouble.com

Composer Create-Projectでインストールします。

$ composer create-project --prefer-dist laravel/laravel {プロジェクトの名前}
コマンドの説明です。

利用可能なリポジトリにある既存のパッケージを複製して自身のパッケージにしたい(パッケージをフォークしたい)
$ composer create-project [vendor]/[package]

qiita.com

prefer-distオプション
GitHubなどでリポジトリを配信している場合、git cloneでソースを落としてくる(prefer-source)か、zipでダウンロードする(prefer-dist)か選ぶことができます。
通常、prefer-distでダウンロードしたほうが高速です。ただ、アクセストークンなどの認証情報をセットしておく必要があるので、設定できてない人はうまく動かないかもしれません。
そのためか、composerはprivateリポジトリの場合、デフォルトでgit cloneしようとします。
この挙動を変更してzipダウンロードを強制するのが --prefer-dist オプションで、 composer install --prefer-dist などのように使います。
blog.tojiru.net

$ composer create-project --prefer-dist laravel/laravel tryPhp
Installing laravel/laravel (v5.7.19)
  - Installing laravel/laravel (v5.7.19): Loading from cache
Created project in tryPhp
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 86 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-ctype (v1.10.0): Loading from cache
  - Installing vlucas/phpdotenv (v2.6.1): Loading from cache
  - Installing symfony/css-selector (v4.2.3): Loading from cache

# 省略

laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (^3.0).)
laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integration testing tools (^4.1).)
laravel/framework suggests installing symfony/psr-http-message-bridge (Required to psr7 bridging features (^1.0).)
lcobucci/jwt suggests installing mdanter/ecc (Required to use Elliptic Curves based algorithms.)
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)
filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.6.0)
phpunit/phpunit suggests installing phpunit/php-invoker (^2.0)
phpunit/phpunit suggests installing ext-xdebug (*)
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: laravel/nexmo-notification-channel
Discovered Package: laravel/slack-notification-channel
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
> @php artisan key:generate --ansi
Application key set successfully.

# バージョン確認します.
$ php artisan -V
Laravel Framework 5.7.26

# 作成されたLaravelプロジェクトのディレクトリ構成を見てみます.
$ find tryPhp/ -type d
tryPhp/
tryPhp//database  # データベースのマイグレーションとモデルファクトリ、初期値設定(シーディング)が格納される
tryPhp//database/migrations
tryPhp//database/seeds
tryPhp//database/factories
tryPhp//bootstrap  # フレームワークの初期処理を行うapp.phpファイルが格納される
tryPhp//bootstrap/cache  # 初期処理のパフォーマンスを最適化するため、フレームワークが生成するルートやサービスのキャッシュファイルが保存される
tryPhp//app   # アプリケーションのコアコードを格納するディレクトリ
tryPhp//app/Providers
tryPhp//app/Exceptions
tryPhp//app/Http # コントローラ、ミドルウェア、フォームリクエストを設置します。アプリケーションへのリクエストを処理するロジックは、ほぼ全てこのディレクトリ内に設置します。
tryPhp//app/Http/Middleware
tryPhp//app/Http/Controllers
tryPhp//app/Http/Controllers/Auth
tryPhp//app/Console # アプリケーションの全カスタムArtisanコマンドで構成します。これらのコマンドクラスはmake:commandコマンドにより生成されます。
tryPhp//config    # アプリケーションの全設定ファイルが格納される
tryPhp//resources   # ビューやアセットの元ファイル(LESS、SASS、JavaScript)で構成され、すべての言語ファイルも格納される
tryPhp//resources/js
tryPhp//resources/js/components
tryPhp//resources/lang
tryPhp//resources/lang/en
tryPhp//resources/sass
tryPhp//resources/views
tryPhp//tests
tryPhp//tests/Unit
tryPhp//tests/Feature
tryPhp//storage  # コンパイルされたBladeテンプレート、ファイルベースのセッション、ファイルキャッシュなど、フレームワークにより生成されるファイルが保存される
tryPhp//storage/app  # アプリケーションにより生成されるファイルを保存するために利用
tryPhp//storage/app/public  # プロファイルのアバターなどのようなユーザーにより生成され、外部からアクセスされるファイルが保存される
tryPhp//storage/framework  # フレームワークが生成するファイルやキャッシュに利用
tryPhp//storage/framework/cache
tryPhp//storage/framework/cache/data
tryPhp//storage/framework/testing
tryPhp//storage/framework/sessions
tryPhp//storage/framework/views
tryPhp//storage/logs   # アプリケーションのログファイルが保存される
tryPhp//public   # アプリケーションへの全リクエストの入り口となり、オートローディングを設定するindex.phpファイルが格納される
tryPhp//public/svg
tryPhp//public/css
tryPhp//public/js
tryPhp//routes
tryPhp//vendor  # Composerによる依存パッケージが配置される
# 省略

readouble.com

動かして画面を見てみます。

# 開発サーバをhttp://localhost:8000として起動します。
$ php artisan serve
Laravel development server started: <http://127.0.0.1:8000>

http://localhost:8000/にブラウザでアクセスするとLaravelの画面が表示されました。
f:id:ponsuke_tarou:20190219230855p:plain

PHPにはビルトインウェブサーバーというテスト用の開発サーバがくっついています。
# php -Sのコマンドでもphp artisan serveと同じように動作します。
$ php -S localhost:8000 -t public
PHP 7.3.1 Development Server started at Tue Feb 19 23:12:16 2019
Listening on http://localhost:8000
Document root is /Users/mana/Dropbox/ApacheDcumentRoot/tryPhp/public
Press Ctrl-C to quit.

ディレクトパーミッションを設定します。

Laravelをインストールした後に、多少のパーミッションの設定が必要です。storage下とbootstrap/cacheディレクトリをWebサーバから書き込み可能にしてください。設定しないとLaravelは正しく実行されません。
インストール 5.7 Laravel

$ cd tryPhp/

# 権限を確認します
$ ls -l | grep storage
drwxr-xr-x@  5 mana  staff     160 12 15 23:37 storage

$ ls -l bootstrap/
total 8
-rw-r--r--@ 1 mana  staff  1620 12 15 23:37 app.php
drwxr-xr-x@ 5 mana  staff   160  2 19 22:24 cache

# 書き込み権限を追加する
$ chmod o+w storage/
$ chmod o+w bootstrap/cache/

# 権限を確認します
$ ls -l | grep storage
drwxr-xrwx@  5 mana  staff     160 12 15 23:37 storage

$ ls -l bootstrap/
total 8
-rw-r--r--@ 1 mana  staff  1620 12 15 23:37 app.php
drwxr-xrwx@ 5 mana  staff   160  2 19 22:24 cache

www.atmarkit.co.jp

f:id:ponsuke_tarou:20190219234237j:plain
思い出の一枚

サービスマネジメントシステムの規格はJIS Q 20000です。

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : JIS Q 20000って何?

勉強のきっかけになった問題

ITサービスマネジメントの情報セキュリティ管理プロセスに対して,JIS Q 20000-1(サービスマネジメントシステム要求事項)が要求している事項はどれか。

ア. CMDBに記録されているCIの原本を,セキュリティが保たれた物理的又は電子的に格納庫で管理しなければならない。
イ. 潜在的な問題を低減させるために,予防処置をとらなければならない。
ウ. 変更要求が情報セキュリティ基本方針及び管理策に与える潜在的影響を評価しなければならない。
エ. 変更要求の受入れについての意思決定では,リスク,事業利益及び技術的実現可能性を考慮しなければならない。

https://www.sc-siken.com/kakomon/28_haru/am2_24.html

ITサービスマネジメントは、ITシステムによる利用者が必要とするサービス提供を管理することです。

  • 英語 : IT Service Management
  • 略称 : ITSM
  1. ITシステムを開発・運用することが業務の主目的になりがち・・・
    • 利用者視点が不足してしまい、ユーザーの満足度向上に課題になってしまう
  2. だから、利用者視点でITサービスの提供を考える <<< ITサービスマネジメント
    • ITシステムの開発・運用は、ITサービスを提供するための手段
    • ビジネス環境や情報技術の変化に合わせて改善を続けていく

ITサービスマネジメントにおける成功事例体系化した書籍群をITILといいます。

  • 英語 : Information Technology Infrastructure Library
サービスの企画・構築・運用というシステムライフサイクルに沿って、5つのカテゴリに分類されています。
  • サービス・ストラテジ
  • サービス・デザイン
  • サービス・トランジション
  • サービス・オペレーション
  • 継続的なサービス改善

http://104.215.0.91/wp-content/uploads/2016/10/itil.png
ITILとは – システム管理者なら押さえておきたい、ITIL用語解説 | ITサービス管理ソリューション「SmartStage|スマートステージ」

http://www.itsmf-japan.org/aboutus/images/itil-1-2017.png
ITILとは - itSMF Japanオフィシャルサイト

https://image.itmedia.co.jp/im/articles/0803/17/l_image02.jpg
ITIL V3はV2からどこが変わったか (1/3) - ITmedia エンタープライズ

ISO/IEC 20000は、ITサービスマネジメントシステムに関する国際規格です。

https://www.jqa.jp/service_list/management/service/iso20000/img/index_img01.gif
概要 | ISO/IEC 20000(ITサービス) | ISO認証 | 日本品質保証機構(JQA)

https://image.itmedia.co.jp/im/articles/0707/18/r4image01.jpg
IT管理のあるべき姿とISO 20000 (2/3) - ITmedia エンタープライズ

ISO/IEC 20000の日本版が、JIS Q 20000です。

JIS Q 20000は、2部構成になっています。

JIS Q 20000-1は、サービス提供者に対する要求事項が定義されています。
  • サービスマネジメントシステムの一般要求事項
    • 経営者の責任 / 他の関係者が運用するプロセスのガバナンス / 文書の運用管理 / 資源の運用管理 / SMS の確立及び改善
  • 新規サービス又はサービス変更の設計及び移行
    • 一般 / 新規サービス又はサービス変更の計画 / 新規サービス又はサービス変更の設計及び開発 / 新規サービス又はサービス変更の移行
  • サービス提供プロセス
    • サービスレベル管理 / サービスの報告 / サービス継続及び可用性管理 / サービスの予算業務及び会計業務 / 容量・能力管理
    • 情報セキュリティ管理 : 「新たな情報セキュリティリスク、又は変化した情報セキュリティリスク」「既存の情報セキュリティ基本方針及び管理策への潜在的影響」を特定するために変更要求を評価しなければならない
  • 関係プロセス
    • 事業関係管理 / 供給者管理
  • 解決プロセス
    • インシデント及びサービス要求管理
    • 問題管理 : 潜在的な問題を低減させるために,予防処置をとらなければならない。
  • 統合的制御プロセス
    • 構成管理 : CMDBに記録されているCIの原本を,物理的又は電子的にセキュリティが保たれた書庫で管理しなければならない。
    • 変更管理 : 変更要求の受入れについての意思決定では,リスク,事業利益及び技術的実現可能性を考慮しなければならない。
    • リリース及び展開管理
JIS Q 20000-2は、実践のための規範が定義されています。

f:id:ponsuke_tarou:20190219195334j:plain
思い出の一枚

次回の勉強内容

ponsuke-tarou.hatenablog.com

YAMLって何?

YAMLは、データ構造の書き方です。

  • 正式名称 : YAML Ain't a Markup Language(「Markup Language」と書いてあってもマークアップ言語ではありません)
  • 読み方 : ヤムル
  • 拡張子 : .yaml

JSONと同様にYAMLはキーと値を持つが、日付や時刻を始めとして、JSONよりも多くのデータ型を処理する。
https://www.oreilly.co.jp/books/images/picture978-4-87311-738-6.gif

e-words.jp

いろんな開発言語で使えます。

yaml.org

PythonにはPyYAMLというYAMLを扱うライブラリがあります。

PyYAML以外にもruamel.yamlやPySyck などがあります。

入門Python3のサンプルコードでYAMLに触れてみます。

https://www.oreilly.co.jp/books/images/picture978-4-87311-738-6.gif

これが、YAMLのファイルです。

YAMLには「ハッシュ」「配列」「スカラー」の3つの書き方を組み合わせてデータを表現します。

「キー: 値」形式で表されるのもがハッシュです。

「:」のあとには半角スペースを必ず入れます。

name:
  first: James
  last: McIntyre
「- 値とかキー」形式で配列になります。

「-」のあとには半角スペースを必ず入れます。

poems:
  - title: 'Motto'
    text: |
      Politeness, perseverance and pluck,
      To their possessor will bring good luck.
  - title: 'Canadian Charms'
    text: |
      Here industry is not in vain,
      For we have bounteous crops of grain,
      And you behold on every field
      Of grass and roots abundant yield,
      But after all the greatest charm
      Is the snug home upon the farm,
      And stone walls now keep cattle warm.
値がスカラーです。

true, false, yes, no, on, offは、Pythonで読み込むと真偽値となります。
整数と文字列は、Pythonで読み込むとPythonの整数と文字列になります。

dates:
  birth: 1828-05-25
  death: 1906-03-31
details:
  bearded: true
  themes: [cheese, Canada]

PyYMLをインストールします。

# 仮想環境をつくって、
$ python3 -m venv tryYaml
$ source tryYaml/bin/activate
(tryYaml) $ cd tryYaml/

# PyYAMLをインストールします。
$ pip3 install PyYAML
Collecting PyYAML
  Downloading https://files.pythonhosted.org/packages/9e/a3/1d13970c3f36777c583f136c136f804d70f500168edc1edea6daa7200769/PyYAML-3.13.tar.gz (270kB)
    100% |████████████████████████████████| 276kB 1.1MB/s 
Installing collected packages: PyYAML
  Running setup.py install for PyYAML ... done
Successfully installed PyYAML-3.13

$ pip list
Package    Version
---------- -------
pip        19.0.1   
PyYAML     3.13   
setuptools 39.0.1 

# YAMLファイルをGitHubからダウンロードします。
(tryYaml) $ wget https://raw.githubusercontent.com/madscheme/introducing-python/master/storage/mcintyre.yaml
--2019-01-31 00:43:54--  https://raw.githubusercontent.com/madscheme/introducing-python/master/storage/mcintyre.yaml
raw.githubusercontent.com (raw.githubusercontent.com) をDNSに問いあわせています... 151.101.108.133
raw.githubusercontent.com (raw.githubusercontent.com)|151.101.108.133|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 654 [text/plain]
`mcintyre.yaml' に保存中

mcintyre.yaml                                100%[===========================================================================================>]     654  --.-KB/s 時間 0s       

2019-01-31 00:43:54 (13.0 MB/s) - `mcintyre.yaml' へ保存完了 [654/654]

(tryYaml) $ ls -l
total 136
drwxr-xr-x@ 12 mana  staff  384  1 30 23:54 bin
drwxr-xr-x@  2 mana  staff   64  1 30 23:52 include
drwxr-xr-x@  3 mana  staff   96  1 30 23:46 lib
-rw-r--r--@  1 mana  staff  654  1 31 00:43 mcintyre.yaml
-rw-r--r--@  1 mana  staff   61  1 30 23:53 pip-selfcheck.json
-rw-r--r--@  1 mana  staff  114  1 30 23:52 pyvenv.cfg

コードを書きます。

# ソースファイルを作って
(tryYaml) $ echo -n > tryyml.py

# SublimeTextで開きます。
(tryYaml) $ subl tryyml.py 


実行するとYAMLファイルの内容を読み込めたことがわかります。

(tryYaml) $ python3 tryyml.py 
detailsの内容: {'bearded': True, 'themes': ['cheese', 'Canada']}
poemsの数: 2
poemsの1つ目のタイトル: Motto
datesの型: <class 'dict'>
datesのbirthの型: <class 'datetime.date'>
detailsのbeardedの型: <class 'bool'>
detailsのthemesの型: <class 'list'>
booksのurlの型: <class 'str'>
poemsのtextの型: <class 'str'>

(tryYaml) $ 

思い出の一枚

f:id:ponsuke_tarou:20190131201017j:plain
偕楽園