読者です 読者をやめる 読者になる 読者になる

テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

署名とACLに関する考察(2)

akka-http上でのs3実装には, akka-s3という名前をつけた. 私はプロジェクトのネーミングセンスがない. 結局, 検索性を重視した名前であれば無難じゃろうということにした.

s3: 署名チェックとACLはどちらが優先されるのか? - テストステ論

で, publicなリソースに対して, 署名あり(but間違ってる)でアクセスを試みた場合

  1. 署名なし(anonymous)にfallbackするのか
  2. 弾くのか

どちらが正しい動作なのだろうかという問いについて, もう一度考えてみたら答えは出た. 答えは2である.

なぜならば, 署名はリクエストの情報から生成されているため, 署名が間違っている場合, どこかでデータ破壊(欠損・改竄)があった可能性が高い. 従って, その状態でアクセスするのは, クライアントの意図と違った動作をする可能性が高いため許容出来ない.

では, 署名なしはどうか?これもデータが破壊されている可能性があるではないか?という問いに対しては, こちらはクライアントが最初からそこまでの保護を期待していないので, 期待を裏切っていることにはならないから許容出来るという答えになる.

だから実装としては,

  1. リクエストのヘッダから署名を探す.
  2. 署名がない -> anonymous確定
  3. 署名がある -> (正しい -> authenticated; 間違ってる -> 403)
  4. それ以降の処理(user = anonymous | authenticated)
  5. checkAcl(作成時に登録したaclメタデータ, APIの種類, user) match (OK -> 続きの処理へ; otherwise -> 403)

という感じになる.