Laravelのプロジェクトを作ってみる。
Laravelをインストーラを使わないでインストールします。
Composer Create-Projectでインストールします。
$ composer create-project --prefer-dist laravel/laravel {プロジェクトの名前}
コマンドの説明です。
利用可能なリポジトリにある既存のパッケージを複製して自身のパッケージにしたい(パッケージをフォークしたい)
$ composer create-project [vendor]/[package]
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による依存パッケージが配置される # 省略
動かして画面を見てみます。
# 開発サーバをhttp://localhost:8000として起動します。 $ php artisan serve Laravel development server started: <http://127.0.0.1:8000>
http://localhost:8000/にブラウザでアクセスするとLaravelの画面が表示されました。
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
サービスマネジメントシステムの規格はJIS Q 20000です。
- 前回の勉強内容
- 今回の勉強内容 : JIS Q 20000って何?
- ITサービスマネジメントは、ITシステムによる利用者が必要とするサービス提供を管理することです。
- ISO/IEC 20000は、ITサービスマネジメントシステムに関する国際規格です。
- 次回の勉強内容
前回の勉強内容
今回の勉強内容 : JIS Q 20000って何?
勉強のきっかけになった問題
ITサービスマネジメントの情報セキュリティ管理プロセスに対して,JIS Q 20000-1(サービスマネジメントシステム要求事項)が要求している事項はどれか。
ア. CMDBに記録されているCIの原本を,セキュリティが保たれた物理的又は電子的に格納庫で管理しなければならない。
イ. 潜在的な問題を低減させるために,予防処置をとらなければならない。
ウ. 変更要求が情報セキュリティ基本方針及び管理策に与える潜在的影響を評価しなければならない。
エ. 変更要求の受入れについての意思決定では,リスク,事業利益及び技術的実現可能性を考慮しなければならない。
ITサービスマネジメントは、ITシステムによる利用者が必要とするサービス提供を管理することです。
- 英語 : IT Service Management
- 略称 : ITSM
- ITシステムを開発・運用することが業務の主目的になりがち・・・
- 利用者視点が不足してしまい、ユーザーの満足度向上に課題になってしまう
- だから、利用者視点でITサービスの提供を考える <<< ITサービスマネジメント
- ITシステムの開発・運用は、ITサービスを提供するための手段
- ビジネス環境や情報技術の変化に合わせて改善を続けていく
ITサービスマネジメントシステムは、ITサービスマネジメントをPDCAサイクルに基づいて維持管理と継続的改善を行っていくための仕組みです。
- 略称 : ITSMS
ITSMSの構築
ITSMS(ITサービスマネジメントシステム)とは - 情報マネジメントシステム認定センター(ISMS-AC)
ITサービスマネジメントシステム(ISO/IEC20000): 品質向上のための取り組み | NECネクサソリューションズ
ITサービスマネジメントにおける成功事例体系化した書籍群をITILといいます。
- 英語 : Information Technology Infrastructure Library
サービスの企画・構築・運用というシステムライフサイクルに沿って、5つのカテゴリに分類されています。
- サービス・ストラテジ
- サービス・デザイン
- サービス・トランジション
- サービス・オペレーション
- 継続的なサービス改善
ITILとは – システム管理者なら押さえておきたい、ITIL用語解説 | ITサービス管理ソリューション「SmartStage|スマートステージ」
ISO/IEC 20000は、ITサービスマネジメントシステムに関する国際規格です。
ISO/IEC 20000の日本版が、JIS Q 20000です。
JIS Q 20000は、2部構成になっています。
JIS Q 20000-1は、サービス提供者に対する要求事項が定義されています。
- サービスマネジメントシステムの一般要求事項
- 経営者の責任 / 他の関係者が運用するプロセスのガバナンス / 文書の運用管理 / 資源の運用管理 / SMS の確立及び改善
- 新規サービス又はサービス変更の設計及び移行
- 一般 / 新規サービス又はサービス変更の計画 / 新規サービス又はサービス変更の設計及び開発 / 新規サービス又はサービス変更の移行
- サービス提供プロセス
- サービスレベル管理 / サービスの報告 / サービス継続及び可用性管理 / サービスの予算業務及び会計業務 / 容量・能力管理
- 情報セキュリティ管理 : 以下を特定するために変更要求を評価しなければならない
- 新たな情報セキュリティリスク、又は変化した情報セキュリティリスク
- 既存の情報セキュリティ基本方針及び管理策への潜在的影響
- 関係プロセス
- 事業関係管理 / 供給者管理
- 解決プロセス
- インシデント及びサービス要求管理
- 問題管理 : 潜在的な問題を低減させるために,予防処置をとらなければならない。
- 統合的制御プロセス
- 構成管理 : CMDBに記録されているCIの原本を,物理的又は電子的にセキュリティが保たれた書庫で管理しなければならない。
- 変更管理 : 変更要求の受入れについての意思決定では,リスク,事業利益及び技術的実現可能性を考慮しなければならない。
- リリース及び展開管理
JIS Q 20000-2は、実践のための規範が定義されています。
次回の勉強内容
YAMLって何?
YAMLは、データ構造の書き方です。
入門Python3のサンプルコードでYAMLに触れてみます。
これが、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.
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) $
思い出の一枚
Slack-Python-Onboarding-Tutorialをできるように Slack側の準備をします。
- 前回は、Slack-Python-Onboarding-Tutorial をできるようにローカル環境に必要なものを準備しました。
- チュートリアル用のSlack AppとBotユーザーを作成します。
- 作ったBotにイベントを登録します。
- 環境変数にアプリの資格情報を設定します。
- 認証の設定を行います。
- 思い出の一枚
前回は、Slack-Python-Onboarding-Tutorial をできるようにローカル環境に必要なものを準備しました。
今回は、Slack-Python-Onboarding-Tutorialをできるように Slack側の準備をします。
チュートリアル用のSlack AppとBotユーザーを作成します。
新規にSlack Appをapi.slack.comで作ります。
作ったAppがSlackと対話できるようにBotユーザを作ります。
作ったBotにイベントを登録します。
Ngrokを起動して一時的に外部からローカルへアクセスするURLを取得します。
$ ngrok http 8080 ngrok by @inconshreveable (Ctrl+C to quit) Session Status online Session Expires 7 hours, 57 minutes Version 2.2.8 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://cd36dfb5.ngrok.io -> localhost:8080 Forwarding https://cd36dfb5.ngrok.io -> localhost:8080 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00
app.pyを起動します。
Ngrokを起動したターミナルとは別のターミナルを起動してapp.pyを起動します。
(slackTutorial) $ python3 app.py * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger pin code: 218-532-055
Slackの[Enable Events]をONにします。
[Request URL]には、{Ngrokで表示されているURL} + {app.pyのhearsメソッドのルートである/listening} の値を設定します。
ちゃんとサーバを使用している場合は、そのサーバのURLを設定します。
{Ngrokで表示されているURL}は、起動のたびに変わるのでその都度[Change]ボタンで[Request URL]を変えます。
環境変数にアプリの資格情報を設定します。
チュートリアルのBotでは、osモジュールを使用して環境変数からアプリの資格情報を読み込んで利用します。
そのため、環境変数に資格情報を設定する必要があります。
# bot.py # -*- coding: utf-8 -*- u"""lack-Python-Onboarding-TutorialのBotクラス.""" import os import message # 省略 # When we instantiate a new bot object, we can access the app # credentials we set earlier in our local development environment. self.oauth = {"client_id": os.environ.get("CLIENT_ID"), "client_secret": os.environ.get("CLIENT_SECRET"), # Scopes provide and limit permissions to what our app # can access. It's important to use the most restricted # scope that your app will need. "scope": "bot"} self.verification = os.environ.get("VERIFICATION_TOKEN") # 省略
認証の設定を行います。
- 左サイドのメニューにある[OAuth & Permissions]からページを開いて[Redirect URLs]を設定します。
- [Add New Redirect URL]ボタンを押下してRedirect URLを入力し、[Add]ボタンで追加します。
- Redirect URLには、{Ngrokで表示されているURL} + {app.pyのthanksメソッドのルートである/thanks} の値を設定します。
- {Ngrokで表示されているURL}は、起動のたびに変わるのでその都度[Change]ボタンで[Request URL]を変えます。
- [Save URLs]ボタンを押下して保存します。
思い出の一枚
PythonのウェブフレームワークであるFlaskを学ぶ。
Flaskは、Pythonのウェブフレームワークです。
- 和英 : (flǽsk)〔実験で使う〕フラスコ〔ウイスキーなどの〕フラスコ瓶
Flaskは、Bottleと同じくらい簡単に使えるが、Facebook認証やデータベース統合など、本格的なウェブ開発で役に立つ様々な拡張を備えている。
ウェブフレームワークは、クライアントからの要求とサーバの応答を処理してくれます。
Python Webフレームワーク Django vs Pyramid vs Flask 2015年12月 - Qiita
WSGIライブラリのwerkzeugとjinja2が入っています。
WSGIとは、PythonでのWebサーバとWebアプリケーションをつなぐインターフェースを定義した仕様です。
- 正式名称 : Web Server Gateway Interface
- 読み方 : ウィズギー
- 定義 : PEP 333 -- Python Web Server Gateway Interface v1.0 | Python.org
WSGIはJavaにおけるJava Servelet APIと同じように,WebサーバとWebアプリケーション間の汎用的なインターフェースを定義しています。WSGIを利用することで,WebサーバとWebアプリケーションの実装を切り離すことができ,WebサーバとWebアプリケーションフレームワークの組み合わせを柔軟に選択することができるようになりました。
gihyo.jp
本を見ながら実際にFlaskを使ってみます。
Flaskをインストールします。
# インストールします。 $ pip3 install flask Collecting flask Downloading https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl (91kB) 100% |████████████████████████████████| 92kB 701kB/s Collecting click>=5.1 (from flask) Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB) 100% |████████████████████████████████| 81kB 2.3MB/s Collecting Jinja2>=2.10 (from flask) Downloading https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl (126kB) 100% |████████████████████████████████| 133kB 1.3MB/s Collecting Werkzeug>=0.14 (from flask) Downloading https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl (322kB) 100% |████████████████████████████████| 327kB 2.2MB/s Collecting itsdangerous>=0.24 (from flask) Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask) Downloading https://files.pythonhosted.org/packages/da/fc/2979c425ad23d528d6ac2e1f3efdc28e572fa1e1fbd5a75171cbdd7ddaa5/MarkupSafe-1.1.0-cp36-cp36m-macosx_10_6_intel.whl Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask Successfully installed Jinja2-2.10 MarkupSafe-1.1.0 Werkzeug-0.14.1 click-7.0 flask-1.0.2 itsdangerous-1.1.0 # バージョン確認します。 $ flask --version Flask 1.0.2 Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 03:03:55) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] $ pip3 -V pip 18.1 from /Users/mana/Dropbox/ApacheDcumentRoot/Slack-Python-Onboarding-Tutorial/tryFlask/lib/python3.6/site-packages/pip (python 3.6)
リクエストの入口にする try_flask.py を作ります。
ホーム画面用の index.html を作ります。
jinja2を体験してみます。
jinja2は、Python用のテンプレートエンジンです。
テンプレートのHTMLを作ります。
# templatesディレクトリを作成して、 $ mkdir templates # その中にHTMLを作ります。 $ echo -n > templates/jinja2.html
動かしてみます。
$ python3 try_flask.py * Serving Flask app "try_flask" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: on * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 256-786-415 127.0.0.1 - - [09/Jan/2019 23:23:34] "GET /echo/ponsuke_tarou HTTP/1.1" 200 - 127.0.0.1 - - [09/Jan/2019 23:24:45] "GET /echo?name=ponsuke_tarou&do=%27write%20HatenaBlog%27 HTTP/1.1" 301 - 127.0.0.1 - - [09/Jan/2019 23:24:45] "GET /echo/?name=ponsuke_tarou&do=%27write%20HatenaBlog%27 HTTP/1.1" 200 - 127.0.0.1 - - [09/Jan/2019 23:34:24] "GET /echo/?name=ponsuke_tarou&do=HatenaBlog%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6 HTTP/1.1" 200 - * Detected change in '/path/to/try_flask.py', reloading * Restarting with stat * Debugger is active! * Debugger PIN: 256-786-415
Slack-Python-Onboarding-Tutorial をできるように必要なものを準備する。
- 前回は、Incoming webhooksでメッセージを送ってみました。
- Incoming webhooksではない方法でメッセージを送れるようにSlack-Python-Onboarding-Tutorialをやりたいとおもいます。
- Pythonをインストールします。
- チュートリアルのリポジトリをクローンします。
- 仮想環境を準備します。
- local環境へLANの外からアクセスできるようにするNgrokをインストールします。
- Web API用のテストツールPostmanをインストールします。
- 次回は、Slack側の準備をします。
- 環境
前回は、Incoming webhooksでメッセージを送ってみました。
Incoming webhooksではない方法でメッセージを送れるようにSlack-Python-Onboarding-Tutorialをやりたいとおもいます。
Onboardingは、新規メンバへの教育的なことです。
今回は、チュートリアルに必要なものを準備します。
Pythonをインストールします。
パッケージ管理ツールのpipはPythonにくっついています。
(google翻訳)python.orgからダウンロードしたPython 2> = 2.7.9またはPython 3> = 3.4を使用している場合、またはvirtualenvまたはpyvenvによって作成された仮想環境で作業している場合は、pipは既にインストールされています。
Installation — pip 19.1.1 documentation
Python開発用の仮想環境を作るツールであるVirtualenv的なものはvenvとしてPythonにくっついています。
(google翻訳)virtualenvは独立したPython環境を作成するためのツールです。
Python 3.3以降、そのサブセットがvenvモジュールの下で標準ライブラリに統合されました。
ただし、venvモジュールはこのライブラリのすべての機能を提供するわけではありません(たとえば、ブートストラップスクリプトを作成できない、ホストpython以外の他のバージョンのPython用の仮想環境を作成できない、再配置できないなど)。
Virtualenv — virtualenv 17.0.0 documentation
venv モジュールは、軽量な "仮想環境" の作成のサポートを提供します。仮想環境には、仮想環境ごとの site ディレクトリがあり、これはシステムの site ディレクトリから分離させることができます。それぞれの仮想環境には、それ自身の Python バイナリ (様々な Python バージョンで環境を作成できます) があり、仮想環境ごとの site ディレクトリに独立した Python パッケージ群をインストールできます。
venv --- 仮想環境の作成 — Python 3.7.3 ドキュメント
チュートリアルのリポジトリをクローンします。
# コピーしたURLでクローンします。 $ git clone https://github.com/slackapi/Slack-Python-Onboarding-Tutorial.git Cloning into 'Slack-Python-Onboarding-Tutorial'... remote: Enumerating objects: 19, done. remote: Total 19 (delta 0), reused 0 (delta 0), pack-reused 19 Unpacking objects: 100% (19/19), done.
仮想環境を準備します。
venvで仮想環境を作ります。
# クローンしたディレクトリへ移動します。 $ cd Slack-Python-Onboarding-Tutorial # 仮想環境を作ります。 $ python3 -m venv slackTutorial # 仮想環境を有効化します。 $ source slackTutorial/bin/activate
pip3で必要なパッケージをインストールします。
# パッケージをインストールする前に import文でモジュールを検索するディレクトリを確認しておきます。 (slackTutorial) $ python3 Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 03:03:55) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', '/Users/mana/Dropbox/ApacheDcumentRoot/Slack-Python-Onboarding-Tutorial/slackTutorial/lib/python3.6/site-packages'] >>> exit() # pip3の情報を確認しておきます。 (slackTutorial) $ pip3 show pip Name: pip Version: 18.1 Summary: The PyPA recommended tool for installing Python packages. Home-page: https://pip.pypa.io/ Author: The pip developers Author-email: pypa-dev@groups.google.com License: MIT Location: /path/to/Slack-Python-Onboarding-Tutorial/slackTutorial/lib/python3.6/site-packages Requires: Required-by: # チュートリアルに必要なパッケージをインストールします。 (slackTutorial) $ pip3 install -r requirements.txt Collecting click==6.6 (from -r requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/1c/7c/10b4132dd952b6a04e37626258825b8aa8c1eb99545f2eb26a77c21efb55/click-6.6-py2.py3-none-any.whl (71kB) 100% |████████████████████████████████| 71kB 1.6MB/s Collecting Flask==0.11.1 (from -r requirements.txt (line 2)) Downloading https://files.pythonhosted.org/packages/63/2b/01f5ed23a78391f6e3e73075973da0ecb467c831376a0b09c0ec5afd7977/Flask-0.11.1-py2.py3-none-any.whl (80kB) 100% |████████████████████████████████| 81kB 2.6MB/s Collecting itsdangerous==0.24 (from -r requirements.txt (line 3)) Downloading https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz (46kB) 100% |████████████████████████████████| 51kB 10.1MB/s Collecting Jinja2==2.8 (from -r requirements.txt (line 4)) Downloading https://files.pythonhosted.org/packages/96/a1/c56bc4d99dc2663514a8481511e80eba8994133ae75eebdadfc91a5597d9/Jinja2-2.8-py2.py3-none-any.whl (263kB) 100% |████████████████████████████████| 266kB 2.2MB/s Collecting MarkupSafe==0.23 (from -r requirements.txt (line 5)) Downloading https://files.pythonhosted.org/packages/c0/41/bae1254e0396c0cc8cf1751cb7d9afc90a602353695af5952530482c963f/MarkupSafe-0.23.tar.gz Collecting pyaml==16.9.0 (from -r requirements.txt (line 6)) Downloading https://files.pythonhosted.org/packages/e3/bb/e920e88da947f3915229dedd7a3c77267d37bcfbfc2e0aa350f33f25f9b3/pyaml-16.9.0.tar.gz Collecting PyYAML==3.12 (from -r requirements.txt (line 7)) Downloading https://files.pythonhosted.org/packages/4a/85/db5a2df477072b2902b0eb892feb37d88ac635d36245a72a6a69b23b383a/PyYAML-3.12.tar.gz (253kB) 100% |████████████████████████████████| 256kB 3.1MB/s Collecting requests==2.11.1 (from -r requirements.txt (line 8)) Downloading https://files.pythonhosted.org/packages/ea/03/92d3278bf8287c5caa07dbd9ea139027d5a3592b0f4d14abf072f890fab2/requests-2.11.1-py2.py3-none-any.whl (514kB) 100% |████████████████████████████████| 522kB 4.2MB/s Collecting six==1.10.0 (from -r requirements.txt (line 9)) Downloading https://files.pythonhosted.org/packages/c8/0a/b6723e1bc4c516cb687841499455a8505b44607ab535be01091c0f24f079/six-1.10.0-py2.py3-none-any.whl Collecting slackclient==1.0.2 (from -r requirements.txt (line 10)) Downloading https://files.pythonhosted.org/packages/db/12/e5198d6e10ead20acdbba5f6a7c22d153d8ea08946ea06e4580f6666cb52/slackclient-1.0.2.tar.gz Collecting websocket-client==0.37.0 (from -r requirements.txt (line 11)) Downloading https://files.pythonhosted.org/packages/a3/1e/b717151e29a70e8f212edae9aebb7812a8cae8477b52d9fe990dcaec9bbd/websocket_client-0.37.0.tar.gz (194kB) 100% |████████████████████████████████| 194kB 1.9MB/s Collecting Werkzeug==0.11.11 (from -r requirements.txt (line 12)) Downloading https://files.pythonhosted.org/packages/a9/5e/41f791a3f380ec50f2c4c3ef1399d9ffce6b4fe9a7f305222f014cf4fe83/Werkzeug-0.11.11-py2.py3-none-any.whl (306kB) 100% |████████████████████████████████| 307kB 5.1MB/s Installing collected packages: click, itsdangerous, MarkupSafe, Jinja2, Werkzeug, Flask, PyYAML, pyaml, requests, six, websocket-client, slackclient Running setup.py install for itsdangerous ... done Running setup.py install for MarkupSafe ... done Running setup.py install for PyYAML ... done Running setup.py install for pyaml ... done Running setup.py install for websocket-client ... done Running setup.py install for slackclient ... done Successfully installed Flask-0.11.1 Jinja2-2.8 MarkupSafe-0.23 PyYAML-3.12 Werkzeug-0.11.11 click-6.6 itsdangerous-0.24 pyaml-16.9.0 requests-2.11.1 six-1.10.0 slackclient-1.0.2 websocket-client-0.37.0 # 一旦仮想環境から抜けます。 $ deactivate
local環境へLANの外からアクセスできるようにするNgrokをインストールします。
If you are running this project locally, you'll need to set up tunnels for Slack to connect to your endpoints. Ngrok is an easy to use tunneling tool that supports HTTPS, which is required by Slack.
github.com
Web API用のテストツールPostmanをインストールします。
You'll likely want to test events coming to your server without going through the actions on your Slack team. Postman is a useful tool you can use to recreate requests sent from Slack to your server. This is especially helpful for events like user join, where the workflow to recreate the event requires quite a bit of set up.
github.com
はじめてのPythonでSlackとつながってみる
- SlackAPIってなんだ?
- 1. Webhockする用のAppを用意する
- 2. Incoming Webhooksを設定する
- 3. PythonでIncoming Webhooksを使ってSlackにメッセージを送ってみる
- うまく行かなかったこと
- 環境
SlackAPIってなんだ?
よくわからないでSlackのIncoming Webhooksを実際に使ってみます。
とりあえず概要だけ見ておきます。
Webhookとは?
Webhookの説明を見ると「通知する、Webhookを送る」などの言葉が用いられているが、
これはPOSTリクエストのことを指している。
Webhookとは? - Qiita
じゃ、SlackのIncoming Webhooksって?
get.slack.help
1. Webhockする用のAppを用意する
2. Incoming Webhooksを設定する
Incoming Webhooksを設定する
以下サイトの[Incoming Webhooksのエンドポイントを取得する]に従ってIncoming Webhooksを設定する
qiita.com
3. PythonでIncoming Webhooksを使ってSlackにメッセージを送ってみる
Pythonのインターネットにアクセスできる外部モジュール「Requests」をインストールする
Requestsを使ってPythonでメッセージを送ってみる
slack_webhook.pyというPythonのファイルを作って実行すると簡単にできた。
import json, requests WEB_HOOK_URL = "https://hooks.slack.com/services/" WEB_HOOK_URL += "WebhookURLの後半" requests.post(WEB_HOOK_URL, data=json.dumps({ 'text': 'PythonでIncoming Webhooksを使ってSlackにメッセージを送ってみる.', }))
# 作ったコードを実行する。
python3 slack_webhook.py
もう少し使ってみる
slack_webhook.pyというPythonのファイルを作って実行するともう少し楽しいメッセージが送信できた。
はじめてのPythonでSlackとつながってみる
うまく行かなかったこと
リクエストにTokenがなくて not_authed が返却されました。
よくわからないでブラウザのURL欄に https://otsecbsol.slack.com/api/conversations.createと入力してみました・・・。
{"ok":false,"error":"not_authed"}
Apacheを触ってみる
Apacheは、Webサーバです。
- 正式名称 : Apache HTTP Server
「Apacheという名前はインディアン部族、Apacheに対する敬意の念をあらわすため選んだ」らしいです。
Webサーバで利用されているアプリケーションで、Netcraft社によるとシェアはここ数年下がりつつあるとはいえそれなりにあります。
Web Server Survey | Netcraft
Webサーバは、HTMLファイルやそれに付随する画像などのファイルをクライアントコンピュータに配信するサーバコンピュータのことです。
インストールの方法
起動と停止の方法
ターミナルを使います。
# 起動する $ apachectl start # 停止する $ apachectl restart # 再起動する $ apachectl restart
Apacheを起動してからブラウザで「http://localhost:80」を表示すると「It works!」と表示されます。
Apacheを設定してみる
どこに「It works!」が書かれているのでしょう?こういった情報はApacheの設定ファイルで確認できます。
設定ファイルの名前は「httpd.conf」です。
設定ファイルは、Macにデフォルトで入っているApacheの場合は「/etc/apache2/httpd.conf」です。ただ「etc」というディレクトリは「Finder」では見えないのでターミナルで開きます。
$ open /etc/apache2/
アクセスするポート番号をListenに設定します。
# # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the <VirtualHost> # directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses. # #Listen 12.34.56.78:80 Listen 80
設定するポート番号の注意 : 80番はよく他のアプリケーションに使われています。
環境によっては「It works!」が表示されない事があります。原因は沢山あるのですが、1つにポート番号があります。
例えば、「Listen 80」と httpd.conf に設定したとします。これはApacheが 80番 のポートを使いますよってことです。
ところが、意外と他のアプリケーションが 80番を使っていてApacheが80番を使えず起動できないことがあります。
qiita.com
まずは現在使われているポート番号を調べます。
Macでは Network Utility を使います。
何のアプリケーションとポート番号がバッティングしているか判ったら方法は2つ
① 使っているアプリのポート番号を変更する
② Apacheのポート番号を変更する
②の場合は、「Listen 80」の 80 を変更します。
「8080」あたりが無難です。
そして、Apacheを再起動するとポート番号のバッティングが治ります。
表示するファイルを格納するディレクトリをDocumentRootに設定します。
# # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/Library/WebServer/Documents"
「/Library/WebServer/Documents」を開いてみると「index.html」というファイルが入っています。ここに「It works!」が書かれています。
< html >< body><h1 >It works!</h1></body></html>
DirectoryIndexに設定されたファイルがデフォルトで表示されます。
ここまででDocumentRootに設定されたディレクトリにある「index.html」が表示されたことがわかりました。
この「index.html」を指定するのがDirectoryIndexになります。
「http://localhost:80/」のようにファイル名が指定されない場合はDirectoryIndexに設定されたファイル名が返されて「http://localhost:80/index.html」となります。
# # DirectoryIndex: sets the file that Apache will serve if a directory # is requested. # <IfModule dir_module> DirectoryIndex index.html </IfModule>
PHPでの変数名の決め方
- 前回
- ルール1:変数名の前には$をつける
- ルール2:$の次はアルファベットかアンダースコアから始める
- ルール3:使えるのは「aからz」「AからZ」「_」(厳密にはもっとあります。)
- ルール4:規約には従いましょう。
ルール1:変数名の前には$をつける
じゃぁ「$34」でいい?
ルール2:$の次はアルファベットかアンダースコアから始める
じゃぁ「$A-34」でいい?
ルール3:使えるのは「aからz」「AからZ」「_」(厳密にはもっとあります。)
じゃぁ「$A_34」でどうだ
PHP: 基本的な事 - Manual
ルール4:規約には従いましょう。
みんなてんでばらばらだったら他の人が見てさっぱり分からない・・・ただ、規約っていっぱいあるし・・・・。
なので基本的なマナーレベルは押さえましょう。
マナー1:大文字と小文字の違いだけの変数名を分けて使わない。
「$a_34」「$A_34」読む人も誤記なんだかわざとなんだか・・・分かりにくい。次に書く時だって・・・・間違いやすい。
マナー2:名前に明確な単語を選んで情報を詰め込む
「$A_34」は何に使うためにこの変数を作っているか不明です。
実は、自分の年齢をこの変数に入れたかった・・・のであれば「$myoldis34」みたいな。
マナー3:誤解されない名前にする
年齢は毎年変わります・・・今の年齢を表したければ「$nowmyold」な感じ。
マナー4:読みやすく単語の区切れが分かるように。
単語の区切り方は、Pascal形式とかCamelCaseとかスネーク形式とかいろいろあって規約ごとに違います。
ここは「_」でつなぐスネーク形式で「$now_my_old」な感じ。
超ざっくりPHPってこんなもの
PHPはWebページ作成するサーバサイドのプログラミング言語です。
PHPは「フリー」です。
無料のフリー
PHPは、タダで手に入ります。
ライセンス料、サポート料、アップグレード料もダタです。
※. 個人使用でない場合や別途ツールなんかを使う場合は調べてくださいね。
自由のフリー
PHPはオープンソースなので中身をだれでも参照できます。
ソースは見たくないけど機能の使い方は知りたいっていう時でも世の中の誰かが調べた情報がインターネットにたくさん散らばっています。
自由に使っていいんです!(ある程度のルールは守ってくださいね)
造るのに好きなものを自由に選んでいいんです!
OSはWindows、Mac OS、Linux、Slaris、Unixで使えます。特別な専用サーバを用意しなくても造れるんです!
Webサーバプログラムだって特別なものを用意しなくていいんです!
CGI規格をサポートしていれば、Apach、Microsift Internet InfomationServer ( IIS ) でもいいのです。
データベースもいろいろ選べます。
MySQL、Oracle、Microsoft SQL Server、Sybase、PostgreSQLといろいろあります。
ODBC規格のデータベースもサポート済みです。
LDAP:なんとなくわかった気がしている言葉をはっきりと
LDAPとは、ディレクトリサービスを提供するサーバへアクセスするときに使うプロトコルです。
正式名称 : Lightweight Directory Access Protocol
TCPポート番号の「389」(ウェルノウンポート)を使ってサーバへ接続します。
X.500という規格の1つであるDAPというプロトコルを軽量化(Lightweight)したものです。
DAPはとても重かったので軽くしたそうです。
例えば、オープンソースのLDAPであるOpenLDAP、Windowsでよく使われるActive DirectoryなどにLDAPは実装されています。
LDAPに対応してディレクトリサービスを提供するサーバをLDAPサーバといいます。
ディレクトリサービスとは、ネットワークの情報を一元管理し情報提供などを行うサービスです。
ネットワーク内のユーザ情報や機器情報を管理して、参照・更新などを行うサービスです。
ユーザ名から部署や電話番号を検索したり、プリンターの情報を参照できたりします。
例えば、名前解決してくれるDNSやオープンソースのLDAPであるOpenLDAP、Windowsでよく使われるActive Directoryなどがディレクトリサービスです。
第1回 認証統合の概要[Active Directory編]:Active DirectoryとLinuxの認証を統合しよう【2017年版】|gihyo.jp … 技術評論社
階層型にデータを管理するデータベースを使います。
リレーショナルデータベースとは違うのです。
ディレクトリサービスと設定によってはリレーショナルデータベースも使えます。
ディレクトリサービスのように更新より参照が多く組織などから情報を見つけていく場合は階層型のデータベースのが向いています。
Pythonのインターネットにアクセスできる外部モジュール「Requests」をインストールする
- インターネットにアクセスするライブラリは標準で「urllib」がありますが、「Requests」のほうが簡単らしいです。
- pipコマンドはPyPIからライブラリをインストールして設定までをしてくれるパッケージ管理システムです。
- pip3コマンを使ってRequestsをインストールします。
- 参考文献
MacにPythone3をインストールしたので、ライブラリをインストールします。
ponsuke-tarou.hatenablog.com
インターネットにアクセスするライブラリは標準で「urllib」がありますが、「Requests」のほうが簡単らしいです。
はじめてのPythonなので簡単な方を選びます。
pipコマンドはPyPIからライブラリをインストールして設定までをしてくれるパッケージ管理システムです。
Pythone3.4以降であれば標準ではいっています。
MacのPython3では「pip3」というコマンドになります。
$ pip3 --version pip 9.0.3 from /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (python 3.6) $ pip3 --help Usage: pip <command> [options] Commands: install Install packages. download Download packages. uninstall Uninstall packages. freeze Output installed packages in requirements format. list List installed packages. show Show information about installed packages. check Verify installed packages have compatible dependencies. search Search PyPI for packages. wheel Build wheels from your requirements. hash Compute hashes of package archives. completion A helper command used for command completion. help Show help for commands. General Options: -h, --help Show help. --isolated Run pip in an isolated mode, ignoring environment variables and user configuration. -v, --verbose Give more output. Option is additive, and can be used up to 3 times. -V, --version Show version and exit. -q, --quiet Give less output. Option is additive, and can be used up to 3 times (corresponding to WARNING, ERROR, and CRITICAL logging levels). --log <path> Path to a verbose appending log. --proxy <proxy> Specify a proxy in the form [user:passwd@]proxy.server:port. --retries <retries> Maximum number of retries each connection should attempt (default 5 times). --timeout <sec> Set the socket timeout (default 15 seconds). --exists-action <action> Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort. --trusted-host <hostname> Mark this host as trusted, even though it does not have valid or any HTTPS. --cert <path> Path to alternate CA bundle. --client-cert <path> Path to SSL client certificate, a single file containing the private key and the certificate in PEM format. --cache-dir <dir> Store the cache data in <dir>. --no-cache-dir Disable the cache. --disable-pip-version-check Don't periodically check PyPI to determine whether a new version of pip is available for download. Implied with --no-index.
pip3コマンを使ってRequestsをインストールします。
# Requestsをインストール $ pip3 install requests Collecting requests Downloading https://files.pythonhosted.org/packages/ff/17/5cbb026005115301a8fb2f9b0e3e8d32313142fe8b617070e7baad20554f/requests-2.20.1-py2.py3-none-any.whl (57kB) 100% |████████████████████████████████| 61kB 1.6MB/s Collecting idna<2.8,>=2.5 (from requests) Downloading https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl (58kB) 100% |████████████████████████████████| 61kB 6.2MB/s Collecting urllib3<1.25,>=1.21.1 (from requests) Downloading https://files.pythonhosted.org/packages/62/00/ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/urllib3-1.24.1-py2.py3-none-any.whl (118kB) 100% |████████████████████████████████| 122kB 3.7MB/s Collecting chardet<3.1.0,>=3.0.2 (from requests) Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB) 100% |████████████████████████████████| 143kB 4.2MB/s Collecting certifi>=2017.4.17 (from requests) Downloading https://files.pythonhosted.org/packages/56/9d/1d02dd80bc4cd955f98980f28c5ee2200e1209292d5f9e9cc8d030d18655/certifi-2018.10.15-py2.py3-none-any.whl (146kB) 100% |████████████████████████████████| 153kB 3.0MB/s Installing collected packages: idna, urllib3, chardet, certifi, requests Successfully installed certifi-2018.10.15 chardet-3.0.4 idna-2.7 requests-2.20.1 urllib3-1.24.1 You are using pip version 9.0.3, however version 18.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. # インストールされたことを確認する $ pip3 list Package Version ---------- ---------- certifi 2018.10.15 chardet 3.0.4 idna 2.7 pip 18.1 requests 2.20.1 setuptools 39.0.1 urllib3 1.24.1
pip3コマンドのバージョンが古い場合はアップグレードします。
インターネットの通信を安全にするIPsec
- 前回の勉強内容
- 勉強のきっかけになった問題
- インターネットの通信で使われるプロトコルをIPといいます。
- IPsecは、IPでの暗号化技術を使って安全にインターネットを使うための通信プロトコルです。
- 次回の勉強内容
前回の勉強内容
勉強のきっかけになった問題
IPsecに関する記述のうち,適切なものはどれか。
インターネットの通信で使われるプロトコルをIPといいます。
- 正式:Internet Protocol = Internet(インターネット) + Protocol(手順)
プロトコルとは、パソコンなどの機械同士が通信するときのお約束ごとのことです。
インターネットの世界には危険がいっぱいです。
IPsecは、IPでの暗号化技術を使って安全にインターネットを使うための通信プロトコルです。
- 正式:Security Architecture for IP または IP Security Architecture = Security(安全) + Architecture(構造) + for IP(IPのための)
IPsecで「どんなプロトコルやアルゴリズムを使うよ」という合意をSAといいます。
- 正式 : Security Association = Security(安全) + Association(つながり)
共有鍵暗号方式をIPsecでは使っていて、そのアルゴリズムはいろいろ選べます。だから、SAでどんな物を使うかきっちり定義しておきます。
使う共通鍵を交換してSAの合意を取る鍵交換プロトコルが、IKEです。
- 正式 : Internet Key Exchange = Internet(インターネット) + Key(鍵) + Exchange(交換する)
IKEは、SAを合意するときも鍵を交換するときもISAKMP(Internet Security Association and Key Management Protocol / Internet SA と 鍵管理プロトコル)というプロトコルを使い、ISAKMPメッセージ専用のUDPの500番のポートを使います。
データはESPという入れ物に入れて暗号化して送ります。
- 正式 : Encapsulating Security Payload = Encapsulating(カプセル化している) Security(安全な) + Payload(データ伝送されるパケットのヘッダー部を除いたデータの本体)
暗号化する範囲の違いによって、トランスポート・モードとトンネル・モードに分かれます。
データが改ざんされていないことを確認できるようにMACというデータを付加します。
- 正式 : Message Authentication Code = Message(メッセージ) + Authentication(認証) + Code(コード)
- 日本語 : メッセージ認証コード
このやり方をメッセージダイジェストといいます。
SPI・MAC・通信のシーケンス番号をAHというパックにして通信する時パケットにくっつけます。
- 正式 : Authentication Header = Authentication(認証) + Header(先頭部)
次回の勉強内容
セキュリティを意識したプロトコル達
- 前回の勉強内容
- 勉強のきっかけになった問題
- IPsecは、IPでの暗号化技術を使った安全なインターネット用の通信プロトコルです。
- L2TPは、送信情報を運ぶトンネルのプロトコルです。
- RADIUSは、ネットワーク上でクライアントとサーバの認証を行うプロトコルです。
- SSHは、認証技術を利用して別のコンピュータと通信するプロトコルです。
- 次回の勉強内容
前回の勉強内容
勉強のきっかけになった問題
暗号化や認証機能を持ち,遠隔にあるコンピュータを操作する機能をもったものはどれか。
ア. IPsec イ. L2TP ウ. RADIUS エ. SSH
平成26年秋期問11 SSH|情報処理安全確保支援士.com
RADIUSは、ネットワーク上でクライアントとサーバの認証を行うプロトコルです。
- 正式 : Remote Authentication Dial In User Service
- 読み方:ラディウス、ラディアス
流れは、
- 不正なクライアントやサーバが使えないように、クライアントとサーバの間に共通暗号鍵を設定します。
- この共通暗号鍵を「Shared Secret」といいます。
- クライアントから送られてきたユーザの情報で、サーバは認証を行います。
- クライアントが送る情報を「Access-Requestメッセージ」といいます。
- サーバは、認証を行い結果をクライアントへ送信します。
サーバが送る応答 | パケットの種別 | 意味 |
---|---|---|
アクセス許可 | Access-Accept | 認証結果がOK |
アクセス拒否 | Access-Reject | 認証結果がNG |
アクセスチャレンジ | Access-Challenge | 不正アクセスを防ぐために 再度パスワードの入力などを要求 |
SSHは、認証技術を利用して別のコンピュータと通信するプロトコルです。
- 英語:(Secure:安全) + (Shell:コマンド入力を受け付けて解釈するプログラム)
Telnetも別のコンピュータと通信するプロトコルですが、暗号化はしていません。
残念なことに、暗号化していないのでのぞき見し放題です。
https://community.fs.com/blog/which-client-software-is-better-for-telnet-and-ssh.html
そこでSSH!通信経路が暗号化されているのでインターネットなどを経由しても安全に通信できます。
SSHのプロトコルには、「SSH1」と「SSH2」の2種類があります。
SSH1は、RSA公開鍵暗号方式を使います。
SSH2は、DSA公開鍵暗号方式を使います。が、RSA公開鍵暗号が使えるようになり「SSH2でRSA公開鍵暗号を使う」がおすすめです。
RSAは特許の問題から使用が制限されており、特許問題を回避するためにDSAを採用したSSH2が登場したという背景があるものの特許は2000年9月で失効し、SSH2でもRSAを利用して認証できるようになりました。
次回の勉強内容
根性で不正ログインを頑張るブルートフォース攻撃
前回の勉強内容
勉強のきっかけになった問題
共通鍵暗号の鍵を見つけ出す,ブルートフォース攻撃に該当するものはどれか。
- 1組の平文と暗号文が与えられたとき,全ての鍵候補を一つずつ試して鍵を見つけ出す。
- 平文と暗号文と鍵の関係を代数式に表して数学的に鍵を見つけ出す。
- 平文の一部分の情報と暗号文の一部分の情報との間の統計的相関を手掛かりに鍵を見つけ出す。
- 平文を一定量変化させたときの暗号文の変化から鍵を見つけ出す。
不正アクセスや不正ログインする攻撃はよくあります。
攻撃 | 手法 |
---|---|
ブルートフォース攻撃 | パスワードをどんどん変えて正解を探す |
リバースブルートフォース攻撃 | IDをどんどん変えて正解を探す |
パスワードリスト攻撃 | ヒントを仕入れてIDとパスワードを推測して正解を探す |
パスワードスプレー攻撃 | IDとパスワードをどんどん変えて正解を探す |
ブルートフォース攻撃は、ありとあらゆる文字列の組み合わせを片っ端から試してパスワードや鍵を見つける攻撃です。
- 別名:ブルートフォースアタック、総当たり攻撃
- 英語 : (brute force:力ずくの) + (attack: 攻撃)
辞書ツールやら考えられるすべての情報を使って文字列の組み合わせを全て試していく、根性の攻撃です。
パスワードの文字数や文字種が少ないと被害にあいやすいです。
独立行政法人情報処理推進機構セキュリティセンターが、パスワードに使用している文字の種類別に解読の所要時間をまとめたもの
ブルートフォースアタックとは?実験から分かる危険性と有効な4つの対策
リバースブルートフォース攻撃は、ありとあらゆる文字列の組み合わせを片っ端から試してIDを見つける攻撃です。
- 別名:リバースブルートフォースアタック、逆総当たり攻撃
- 英語 : (reverse:逆の) + (brute force:力ずくの) + (attack: 攻撃)
世の中には、規定回数パスワードを間違えるとロックされるアカウントロックというものがあります。
残念なことに、IDを変えていくのでアカウントロックされにくいです。
ブルートフォース攻撃の逆で、パスワードに固定文字列を使ってIDを変えながら試していきます。
パスワードリスト攻撃は、どっかで仕入れた情報をもとにIDとパスワードを推測して攻撃します。
- 別名:リスト型攻撃、パスワードリスト型攻撃、アカウントリスト攻撃、リストベース攻撃、リストベースアタック、リストアタック
いろんなサイトで同じようなIDやパスワードを使っていると被害にあいやすいです。
パスワードスプレー攻撃は、ブルートフォース攻撃とリバースブルートフォース攻撃をいい感じに合わせています。
- 別名:low-and-slow攻撃
決まった期間に決まった回数ログインに失敗するとアカウントロックがかかります。
だから、「パスワードを固定していろんなIDを試す」をひたすら繰り返します。
アカウントロックされたら別のIDでまた試します。
ついでに、不正を検知されないようにIPアドレスを変えたり、時間をずらして実行したりします。