気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

ELB、ALBの正式名称

AWSには複数の種類のロードバランサーが存在しています。正式名称とざっくりとした内容を記載しておきます。

ELBとは

ELBとは「Elastic Load Balancing」の略称で、元々はこのELBがAWSにおけるロードバランシングサービスでした。

ここにALB、CLB、NLBという3種類のロードバランサー追加されたことにより、 AWSのロードバランシングサービスの総称を指す言葉がELBとなりました。

ALB、CLB、NLBのの正式名称は?

  • ALB:「Application Load Balancing」の略称
  • CLB: 元々のELBはその名称を「Classic Load Balancer(CLB)」に変えた。
  • NLB: Network Load Balancer。

Beanを簡単にXMLに書き出す Betwixt

BetwixtはJavaBeansを簡単にXMLに書き出すためのAPIです。
詳細は以下の参考URLを参照。

公式Doc http://commons.apache.org/dormant/commons-betwixt/ http://commons.apache.org/dormant/commons-betwixt/apidocs/index.html

はじめてのJakarta Commons Betwixt http://www.xucker.jpn.org/java/other/commons_betwixt_first.html

CDNの画像キャッシュとmax-ageの関係性

CDNの画像とキャッシュの扱いについての理解を整理しておきます。

前提

  • CDNに画面で読み込む画像が保存してある
  • max-ageを用いて、CDNへの更新確認における通信量を減らしたい

CDNから画像を取得する流れ

https://knowledge.sakura.ad.jp/images/2018/11/cdn02-680x235.png

画像引用元

上記画像のコンテンツはhtmlですが、画像として参照して下さい。

①キャッシュない場合、まずはCDNから画像を読み込む。
②その後、ローカルにキャッシュする。
③次にアクセス行ったときはmax-ageをみて期限切れであれば、CDNを参照する。
CDNで画像更新がなければ、 HTTP 304 Not Modifiedが返却され、ローカルキャッシュを参照する。
CDNで画像更新があればCDNから画像を取得してローカルキャッシュを更新する。

max-ageの設定例

1 ブラウザに一切、キャッシュさせたくない場合

サーバからクライアントへのHTTP応答ヘッダ
→ Cache-Control "no-cache"

常時、アクセスが必要な動画コンテンツなどはこの設定にした方が安全。
ローカルキャッシュされないので、常にサーバーにアクセスが発生します。

2 ブラウザにキャッシュさせるけど、変更ないか都度確認するようにしたい

サーバからクライアントへのHTTP応答ヘッダ
→ Cache-Control "max-age=0"
→ Expires "Mon, 26 Jul 1997 05:00:00 GMT"

最初から既に期限切れ。
期限切れなので、常にサーバーに画像が更新されているか確認します。
変更なしであれば、 HTTP 304 Not Modified が返却され、画像を返却をせずに通信量を減らせます。
この場合は、ローカルキャッシュが参照されます。

3 ブラウザにキャッシュさせ、都度確認はそれほど必要ない

サーバからクライアントへのHTTP応答ヘッダ
→ Cache-Control "max-age=秒数" 例:86400など(この場合は1日)
→ Expires "ここに期限の日時"

max-ageの期限に達していない限り、ブラウザはサーバに問い合わせを行いません。
期限がきれた後の挙動は、2と同じです。

キャッシュ対象

一般的には2パターンの指定方法があります。

サブドメイン指定

  • サブドメイン配下の全ファイルをCDN経由にする
  • サブドメイン配下に画像や動画などデータ量が多いファイルを集めておいて、キャッシュする
  • メリデメ:ファイル転送量は削減できるが、根本的なサーバへの負荷は減らせない可能性がある

ドメイン指定

  • サイトすべてをCDN経由にする
  • ファイル単位でキャッシュするかどうかを設定
  • メリデメ:全ファイルをキャッシュできるが、更新しても反映されないという事故が発生しうる

参考URL

ブラウザのキャッシュコントロールを正しく理解する - Qiita

暗号化に用いるSaltの課題を解決するSecret Salt

パスワード暗号化でSecret Saltなるものがあることを知ったので、Qiitaの記事を読んで、 頭に叩き込むために書き出してみた。

引用(というかほぼそのまま。。)させてもらったwebページは以下
パスワードハッシュ化で用いるソルト(Salt)とペッパー(Pepper)/シークレットソルト(Secret Salt)の役割と効果 - Qiita

一般的な暗号化

パスワードの一般的な暗号化手法としてハッシュ化があります。 ただ、単なるハッシュ化だけではブルートフォース攻撃(総当たり攻撃)などで 簡単にパスワードを特定されてしまいます。

そこで、saltをパスワードと結合してからハッシュ化することで特定されにくくするというハッシュ化が 一般的に行われています。

saltとは

saltは、ランダムに生成された文字列です。

役割と効果

役割

・同じパスワードでも算出されるハッシュ値が異なるようにすること

・ハッシュ化関数への入力文字列を長くすること

効果

・平文を前提に事前計算された攻撃準備の結果を無効化する

⇒(攻撃例)よく使われるパスワードの辞書等を用いてハッシュ値との対応表を作成する等

・攻撃するための事前計算で作成する逆引き表の作成コストを増大させる

⇒(攻撃例)レインボーテーブル等

必要条件

特定されにくくするためには以下が重要

  • 十分な長さの文字列
  • パスワード毎に異なるsalt文字列であること

saltの課題

懸念される状況

  • パスワードのハッシュ値が保存されるDBにSaltも保存される場合あり
  • パスワードのハッシュ値が保存されるDBの値からSaltが推測できる情報が手に入る状態になっている

上記のような状況の場合、SQLインジェクションなどでDB情報が洩れるとオンライン攻撃を行うための 十分な情報が手に入る可能性があります。

ストレッチング(ハッシュ化を複数回繰り返す)などを行っていれば、ある程度は攻撃を難しくはできるが DBの情報が洩れてしまっていてはオフライン攻撃(辞書型攻撃など)はできてしまう。

secret salt(Papper)

saltの課題をクリアするための追加の秘密情報が「secret salt(Papper)」

secret saltの特徴

  • salt同様にランダムに生成された文字列
  • パスワード+salt+ secret saltとしてからハッシュ化して用いる
  • 保存先はパスワードハッシュと別の場所に必ず保存する

効果

・DB等の情報が漏洩した状態で、オフライン攻撃を困難にすること

必要条件

特定されにくくするためには以下が重要

ハッシュ値・ソルトよりもセキュリティレベルが高い場所に分離して格納する必要がある

保存先

AWSであれば、「Secrets Manager」などが候補

ハッシュ化方法

uuidgenなどでは、最低限UUIDv4を用いることが望ましい。
ただUUIDはユニークな文字列を生成する仕組みのため、文字種が少ない。

同じ長さでも記号を含むランダム文字列を利用して文字列を生成する関数を使うのが望ましい。

【参考】AWS Secrets Managerのランダムなパスワードを生成する機能 https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetRandomPassword.html

Curl リクエストメソッド、ヘッダー指定してリクエストを送信する

以下のようにコマンドを実行します。

curl -X POST "http://stg.aaa.bbb/sampAPI/monitoring/" -H "accept: */*" -H "Content-Type: application/json" -H "header_param: value1"

-X POST:リクエストメソッド指定
-H ~:リクエストヘッダー指定

Mac版 Evernoteの便利なショートカット濃縮版

知識の整理、人への共有に重宝するEvernote、作業効率を上げるショートカットキーで使えると思ったものをまとめてみました。

使えるショートカット一覧

やりたいこと ショートカット 説明
ノートブックを検索して移動する command + J ノートブックを横断して検索して、ノートブックやノート間を移動
ノートリストを選択する command + shift + ¥(縦線、パイプ) ノートブック内のノート間を移動
ノートブックを移動する ctrl + command + M ノートブック間を移動
チェックボックスを入力する command + shift + T
箇条書きリストを入力する command + shift + U
ノートを別のウィンドウで開く リストでノートをダブルクリック 複数ノートを並べて閲覧するときに役に立つ
ノートを削除する command + delete ノートリスト上で、削除したいノートを選択した状態、コマンド実行

おまけ

ノートブック以外の階層を作る概念として「スタック」があります。
ノートブック一覧の画面でノートブックを選択した状態で、右クリックをするとスタックを作成するというメニューが見つかります。

ノートブックが煩雑になったら、スタックでまとめるとスッキリします。

Eclipse 保存時フォーマットをしない設定(スペース、タブ除去)

既存ソース修正後の保存時に修正していない箇所がフォーマットされて、本当に修正した箇所が分かりづらくなりレビュー時に怒られたことはないでしょうか。

フォーマット設定は2つあって、片方を修正したのにやっぱりフォーマットされる。。なぜだーと私はなっていましたが、 ちゃんと調べたら、保存時にフォーマットされなくなりました。

以下に記載しておきます。

保存時アクション

一つ目は、Java⇒エディタ内の保存アクションの設定です。
「保存時に選択したアクションを実行」のチェックボックスを外す。

f:id:tamata78:20201109125748p:plain

AnyEditツール

EclipseをAll in oneで入れていない場合は、もしかすると以下のメニューがないかもしれません。 ある場合は、こちらの設定も保存時に効いてきます。私はこちらの設定に気づかなくてフォーマットが消えない現象に苦労しました。。

「自動変換」タブの一番上の「末尾の空白を除去」のチェックボックスを外す。

f:id:tamata78:20201109125937p:plain

これで保存時に修正していない箇所に変更が入ることはなくなるはず。