tkhrsskの日記

技術ネタなど

AWS IAMに関するメモ

IAM ポリシー評価ロジック

下記の順で評価される。

  1. 明示的なDeny
  2. 明示的なAllow
  3. 暗黙的なDeny

ポイントは、Denyステートメントに該当すればAllowがあっても拒否されること。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_evaluation-logic.html

CloudFormationとIPアドレス制限

IPアドレス制限をしたアカウントでCloudFormationを実行すると権限エラーが発生する。 CloudFormationが内部リソースで実行され、その時のIPアドレスで評価されるため。

対策としては、IP制限無しのロールスイッチするか、CloudFormation実行時のロール指定を利用する。

参考: AWSの薄い本 IAMのマニアックな話 - 佐々木拓郎のオンライン本屋 - BOOTH

パスワード設計

アカウントロック

  • ロック頻度は10回程度 (3回は少なすぎ)
  • 30分経過で自動的に最有効化

ソルト

  • ある程度の長さを確保 (パスワード+ソルトで最低20文字)
  • ユーザ毎に異なるものにする

ストレッチング

PHP(5.5.0以降)でのライブラリ利用

ハッシュ値生成

$hash = password_hash($password, PASSWORD_DEFAULT);

(結果にソルトやストレッチ回数が含まれる)

パスワード検証

$result = password_verify($password, $hash);

参考

徳丸本 https://www.amazon.co.jp/dp/4797393165/

(Java) logbackの出力形式のベストプラクティスを考える

まずはドキュメントを読む。

http://logback.qos.ch/manual/layouts_ja.html

ログに出したい要素を考える。

日時は必須。ミリ秒単位までだす。 年月日の区切りはISOをに合わせて - にする。

ファイル名と行番号。 多少性能落ちるけど、やはり便利。 printStackTraceの形式に合わせるなら、クラス名.メソッド名(ファイル名:行番号) 。 Eclipseとかならこれでジャンプできる。

クラス名。 loggerでクラスを指定すれば、負荷が低い。 呼び出し元クラスで出そうとすると、少し負荷がかかる。 メソッド名も少し負荷がかかる。

スレッド名。 マルチスレッド環境ならスレッドが識別できる情報は必須。

ロギングレベル。 必須。見るべき場所をしぼりたい。 レベル毎に出力先ファイルを分割するという手もあるけど、時系列が追いづらい。

メッセージ。当然いる。 grepしやすいように、改行は基本含めない。

MDC(診断コンテキスト) サーバログであれば、クライアントの情報を付与するとよい。 IPアドレスやユーザ識別情報など。 Filterで付与するのがよい。

http://logback.qos.ch/manual/mdc_ja.html

こみこみで書くと下記のような感じか。

%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{0}.%method\(%file:%line\) %mdc %message%n

出力対象について

基本、jdbc.sqltiming は DEBUG で出力するのがよさそう。 jdbc.resultsettable DEBUG も開発中は有効。

https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/ArchitectureInDetail/Logging.html

その他 参考リンク

tomokazu-kozuma.com

amg-solution.jp

blog.tagbangers.co.jp

Chrome機能拡張のSeleniumIDE

Chrome機能拡張のSelenium IDEを使っているのだけど、 指定方法が直感的ではないのと、公式ドキュメントもそんなに充実していない(理解不足なだけ?)。 ググっても、旧Selenium IDE FireFox向けの情報がノイズでうまく探せないのです。 構文微妙に違うみたいだし。 なので、よく使う指定方法をまとめる。

Command Target Value 意味
store 123 id ${id}に123を格納する
echo ${id} ${id}の中身をログに出力
execute script return ${num}/2 out ${num}/2の結果を${out}に格納
while true 無限ループブロック開始。valueに値を指定すると無限ループ防止のカウンタがセットされる。
end ブロック終了
execute script return +${id}+1; id ${id}をインクリメント。先頭に+つけないと文字列結合になる。
times 3 3回繰り返すブロック。入れ子にすると2回目は繰り返さない。valueに値を指定すると無限ループ防止のカウンタがセットされる?

easyselectboxで動的に内容を切り替える

select要素(プルダウン・セレクトボックス)を装飾するプラグインとして、easyselectboxというものがある。

github.com

ぱっと見、select要素のデザインを加工しているだけに見えるが、実際にはselectを隠してdiv要素を新規に作っている。 なので、スクリプトでselect要素をいじるときにはちょっと注意が必要。

具体的には、下記のような注意点がある。

  • 値のイベント変化を拾いたい場合は、元々のselect要素を監視するのではなく、easyselectboxのonClickイベントを使う
  • seletctの内容(option)を変えたい場合は、selectのDOMをいじったあとに、easyselectboxを再度初期化する。(前に作ったeasyselectboxの要素は一度消す(消さないと選択要素が増殖する)。消す要素を覚えておくためにclass名を明示的に指定しておく)

Sample

サンプルとして、一つのプルダウンを選択したときに、ほかのプルダウンを動的に切り替える場合の処理を用意した。

f:id:tkhrssk:20181202233858p:plain
商品の選択

f:id:tkhrssk:20181202232622p:plain
商品に応じたサイズの選択1

f:id:tkhrssk:20181202234302p:plain
商品に応じたサイズの選択2

Source

gist.github.com

参考

ぼやき

プラグインのソースを見ると、そんなに難しいことはしていないけど、公式情報が少なくて、意図しない動作でプラグイン利用者を戸惑わせている気がする。 APIのドキュメントか、もうちょいサンプル増やしてもらえれば...と思ったけど、6年前(2012)に作られて、特にメンテされているわけではないんだね。 それなりに日本語の説明ページもひっかかるし、実際デザイナが使っていたんだけど、他にスタンダードなプラグインとかないのだろうか。