素人サーバー構築9
I amについての注意点
1利用者ごとにiamユーザーを払い出し、使いまわさない
2役割毎のiamグループを作成することで、管理が簡単になる
3権限は必要なものだけを割り当てて事故を防ぐ
4プログラムから使用する場合、iamロールを使用できないか考える。
複数のリモートマシンでコマンドを並列に実行するためのユーティリティのこと。
webアプリのデプロイに使用される。
デプロイメントパスとは?
個々のrailsアプリ専用に作られたディレクトリのこと。
リリースパスとは?
デプロイメントパスの下にある、releasesディレクトリ以下に作られる、パス。
デプロイが行われる毎に作成される。
共有パスとは?
デプロイメントパスの下にある、sharedディレクトリをさす。
ここにはbundle,assets,system,log,pidsなど各リリースを通じて使われるファイルが置かれる。
SSLはインターネットで安全に通信を行うためのプロトコル。
SSL証明書はwebブラウザがwebサーバーと安全に通信を行うための証明書。第三者機関が発行したSSL証明書をwebサーバーに設置する必要がある。
SSL対応のwebサイトを運用するためには、一つのIPアドレスが必要になる。
これから調べてやること
実際に自分のケースに当てはめてみる。
簡単な一枚もののhomepageのデプロイ。
1どのような組み合わせでやるのか?
2自分の場合、サーバー上の設定で何が必要か、何が必要でないのかの見極め
3railsのアプリの設定がほぼわからないから、そこのキャッチアップ。
この三つかな。
用語メモ
シンボリックリンクとは?
イメージ的にはリンクと同じ中継役みたいなイメージ。
シンボリックリンクにアクセスすると、対応するファイルが開かれる。
参考:Ruby on Rails環境構築ガイド
学習記録(Rails)2
インジェクションとは
webアプリに悪意あるスクリプトやパラメーターを記入し、それが評価されるときの権限で実行される攻撃のこと。
ユーザーに表示させるスクリプトに悪意のあるものを仕掛け、それを表示し実行させることで、任意の操作を行う攻撃のこと。
ex)
コメント機能を使ってコメントする際に<script>alert("hello");</script>を記入した際に、何の対策も行われていない場合はブラウザにスクリプトと判断されhelloというアラートが画面に表示されてしまう。
これが可能であるなら悪意あるスクリプトも実行可能になってしまうということ。
アセットパイプライン
実行速度を早めるためにJSファイル、CSSファイルなどを連結して一気に実行する。
現状の問題
Ajaxコードの具体的な書き方がわからない。
試して行くしかないけど、これはどげんかせんといかん.
豆知識
form_withはデフォルトでajax通信のため、普通にformでデータを送りたい場合はlocal: trueをつける必要がある。
Route53の使用方法の流れ(素人サーバー構築8)
DNSとは
ドメイン名とIPアドレスの紐付けを行う
ドメイン名を投げるとIPアドレスを返してくれる。
レコードタイプとは
CNAME:ドメインの別名をマッピング
ex) hogehoge.com→hoge.amazon.com
NS:そのドメイン(ゾーン)を管理するネームサーバー
後ろ二つは別名をマッピングするイメージか?
Route53について
DNSを手軽に使用できるサービス。
Failoverルーティング
プライマリとセカンダリを指定し、障害が発生した場合には、セカンダリに振る設定を行う。
ざっくりとした流れ
1Route53のホストゾーンを作成する
2Route53から割り当てられたNSをドメインと紐付ける
3レコードセットの作成にてELBとroute53を紐づける
4時間をおくと独自ドメインとipアドレスが紐づく
5failover時の設定はELBのレコード名をfailoverにして、新たにS3のレコードをセカンダリにして作成する。なおS3のバケット名とドメイン名が異なるとエイリアスにて「ターゲットがありません」となって登録できないので注意。
学習記録(Rails)
RESTfulとは
・ステートレスである事
・ここの情報へのアクセスがHTTPmethodとして統一されている
・リソースごとのURIが一意である事
RESTfulにする事で、わかりやすいコードになる。URLやHTTPmethodに悩むことがなくなる等のメリットがある。
strong parameterを条件分岐する
有料会員のみ使用可能な機能を作成するとして、そのカラムが有料会員を表す意味のpremiumだとする。premiumカラムに値が入っていれば有料サービスのspecialが使用可能とする。
def task_params
task_params = if user.premium
params.require(:task).permit(:name, :description,:special)
else
params.require(:task).permit(:name, :description)
end
end
こんな感じでuserの条件でストロングパラメーターを条件分岐する事で、対応できる。
CSRF対策とは
別のwebサイトに設置してあるリンクを踏んだ時に、自分がログインしているwebサイトに悪意ある操作を行う事を防ぐ事。
CSRFを防ぐにはそのリクエストが同じwebアプリが出したものか判断する必要がある。一般的には同じwebアプリから出したものだと証明するためにセキュリティトークンを発行する。
Railsのform_withなどのヘルパーで送った場合には、自動で適用される。
しかしgetには適用されないので、変更を行うような対応を行う時には必ずpostリクエストで行う。
参考:Ruby on Rails速習実践ガイド
素人サーバー構築7(S3)
S3
耐久性の高いオブジェクトストレージサービス。
バケットの下にディレクトリを切って下にディレクトリ作成できる。
webサイトホスティング機能
S3の静的webホスティング時に遭遇した403エラー
パブリックポリシーを記入し、エンドポイントにアクセスした所403エラー。
403error
そのファイル見る権限君にはないよ。というエラー。
アクセス権限の問題なのでパブリックアクセス設定を変更して、無事解決。
パブリックポリシーの記入時にも、保存できなくてこの部分の設定を変えたのでコアな部分かもしれない。
使用コマンド
more filename
テキストファイルの内容を1ページ単位で表示するコマンド
aws configure
iamで設定した認証情報(アクセスキー)を登録し、S3等外部と繋げるようにする。
素人サーバー構築6(RDS、ELB)
RDSとは
機能をサービスとして提供してくれている。
電源、osインストール、バッチ当て、バックアップまで。
master-slave構成を容易に構成可能。
masterに問題が怒った時に自動的にフェイルオーバーしてくれる。
自動バックアップ機能があり、スナップショットを定期的に取得できる。
RDSインスタンスにはSSHできない。mysqlコマンドとうで対応する必要がある。RDSは簡単にスナップショットの復元を行うことができる。
設計をするときの注意点はSPOFの有無
spof(単一障害点)とはリスクヘッジみたいな意味。何かが不具合が起こってもサービスが止まらないようにする事。
・DB
・webサーバー
・インメモリキャッシュ(session管理)
・メールサーバーなど
サーバーは常に故障するものだとの認識を持っておく
DBはmaster-slave構成を取る事で、フェイルオーバーにしておく。
web層はどうするのか?
ELBを利用する。
ELBとは?
配下のEC2をみて、負荷を分散してくれる。
autoacalling(条件に応じて負荷が多い時、少ない時webサーバー数を調整してくれる。)
・スケールアウト(設定に従い、webサーバーが増える)
・スケールイン(設定に従い、webサーバーが減る)
負荷分散を行える他に、おかしな挙動が発生した際に、正常なインスタンスにリクエストを行なってくれる。(ヘルスチェック)
利用の際の注意点
・AZをまたがったサーバー配置
・アプリをステートレスに構築する
用語めも
オンプレとは
情報システムを自社内で完結して管理すること。
素人サーバー構築5
自分用メモです。
スナップショットとAMIの違い
スナップショット
EBSのなかのデータを特定のタイミングで取得し、S3に保存したもの。
EBSとはec2の記憶領域みたいなもの。
AMI
EBSの中のデータと、インスタンスを構成する情報を含む起動テンプレート。
どっちもセーブポイントみたいなイメージ。
private subnetの追加
VPCの中であれば通信を許可する。
上記の条件のルートテーブルを作成する。
そのあとサブネットのルートテーブルを作成したものに切り替える。
private subnetにdbサーバーを立てる
その際publicサブネットに立てたwebサーバー経由でprivateのdbサーバー(MYSQL)に繋ぐ。条件としてセキュリティグループを指定する。
webサーバーからdbサーバーに繋ぐ
秘密鍵が必要になる。
そのためscpコマンドでdbサーバーに秘密鍵ファイルを送信する。
直接dbサーバーに繋ぐことは設定上当然できないので、その後webサーバーに接続し、その後dbサーバーに接続する。
dbサーバーが存在するprivateサブfネットは外部との通信ができないため、webサーバーがあるpublicサブネットにNGWを設置しそこを経由して外部との通信を可能にする。
使用したコマンド
scp -i
secure copyコマンド。
sshによって暗号化された通信を行う。scp -i 秘密鍵ファイル ファイル名 送信先のアドレス:ファイルを保存するディレクトリ
参考: