Cloudfront経由でS3にID/Pass認証(Basic Authentication)をかける(CORSの場合は、かけない)方法

まる二日間格闘して設定が完了した。かなりの試行錯誤したので備忘録としてまとめてみる。

Goal

  • s3上のファイルにパスワードをかけて直接ファイルをダウンロードできなくする。
  • Webサービスにログインしているユーザは、ファイルをダウンロードできる。

結論

結論から先に書くと、下記のような感じ。前提として、https + Basic authenticationを信頼する(http + basic authはダメ)。

  • Clientにcrossorigin="anonymous"をセットし、http requestにorignを含ませる。
  • Cloudfront+LambdaでBasic Authでフィルタリングする。Originを含む場合はパスワード必要としない。
  • S3とCloudfrontではCORS関係のヘッダをパススルーする。

クライアント(Web browser/HTML)の設定

今回は動画ファイルのダウンロード・再生のUIだったので、下記のようにcrossoriginを設定する。

ちなみに<source src=””>だとうまくoriginが送信されなかった。

S3のCORSの設定

いつも悩むCORSの設定。AllowedOriginでソースを限定しておくと安心。

AWS Lambdaの設定

Requestヘッダにoriginがある場合は、Basic Authは適用せずそのままレスポンスを返す行を追加した。これによし、サーバからのアクセスは許可させる。

ハマりポイントは、リージョン。S3が東京にあってもバージニアにしないといけない。しかし、ログのCloudwatchは東京リージョンにある。

Cloudfrontの設定

  • Basic Authなのでhttpsオンリー
  • CORSにOPTIONSが必要なときがあるらしいので追加
  • whitelistでCORS関連を配信
  • TTLはゼロでテスト
  • 下記では省いたが、DNSなどを設定した。デフォルトのCloudfrontのホスト名ではなく自ドメインでアクセスできるように。
  • ViewリクエストにLambdaのARNを追加。ハマりポイントは、Lambdaのバージョンによって、最後の数字が変わること。Lamdaをpublishしたあとは変更の必要あり。

S3のパーミッション変更

ここまででCloudfront経由でのアクセスはできるはず。S3に外部からアクセスさせなくするために下記を確認。

  • Block all public accessにチェック
  • Access Control Listにeveryone等権限がないか確認

S3-Cloudfront間の設定

CloudfrontのOriginのタブからOriginを編集する。

  • Restrict Bucket Accessにチェック
  • Original Access Identityで必要ならば新しいものを作成
  • Grand read permissions on Bucketで”Yes, Update Bucket Polity”をチェック

まとめ

上記でうまくいくはず。デバッグはChromeのdevelopper toolのNetwork tabでHTTP request を確認、consoleエラーがないか確認、lambdaのconsole.logで確認とデータの中身を追っていく必要がある。

 

不眠を解消するシンプルなチェックリスト

Kindle unlimitedで睡眠に関する本を数冊読むと、だいたい書いてあることは同じ。睡眠時間は人・年齢によってそれぞれ。7時間半が理想という記事が多いが、当人にとって生活に支障がなければ問題ないという風にあまり考えすぎないことを前提として、下記のリストを挙げる。

  1. 眠くなってから寝る
  2. 15分ねむれなかったら寝室を出る
  3. 寝る前・夜中に起きたときはあまり明るくしない
  4. 最初の90分のレム睡眠がホルモン等で大事なのでそこを意識する
  5. 寝る前の決まりごとを作る。(ストレッチ、水を飲むなど)
  6. 朝日を浴びる
  7. カフェインは5−7時間効く可能性があるので意識する
  8. 寝室では寝ることだけの場所にする(スマホ・読書をベットでしない)

「やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける」読了

やり抜く力が大事という話。これは、自分の人生でも、そうだよね、と思うところがある。好きなものは時間を忘れてできるし、それを継続してできる。そのうちに、十分なスキルと経験値が貯まり、人に比べて実力がついている。私の場合、英語が日常で使えるようになるまで3年、ビジネスで使えるようになるまで7年程かかった。仕事がうまくこなせるようになるのも4、5年かかった(これは英語が足を引っ張っていたかもしれないが。。)要するに物事ができるようになるには、時間がかかるということだ。持論として、仕事は最低8時間縛られるので、この時間をしっかり自分の伸ばしたいエリアに当てるということ。そうすれば、給与をもらいつつ、数年後には実力がついている。逆を言えば、それに時間を当てられないと、そこで働く意味がない。

何点か覚えてる範囲で、自分に刺さったところは、

  • やり抜く力は育てられる
  • 才能よりも努力を褒める
  • 課外活動はやり抜く力を育むのに重要な土壌
  • 16歳ぐらいには、課外活動を最低1年は継続しなければいけない。
  • とはいえ、色々試すことも大切。
  • プラスアルファの目標が大事。単純なルーティンではスキルは見につかない

「僕は君たちに武器を配りたい」読了

2020年2冊目。故瀧本氏の本。就職活動・転職活動をしている人に向けた本だが社会人を15年やってきている私が読んでも、納得する箇所が多かった。リーマン不況の真っ只中に(2012頃?)に執筆しているので不況を前提として話が書かれている。投資家的視点を持ったビジネスマンになれよ。間違ってもコモディティになるな、と警笛を鳴らしている。エキスパートを目指すなというのもがあるが、これはソフトウェアエンジニアにも当てはまるのであろうか。当時は、インド等にソフトウェアをアウトソースする流れだったが現在では、プログラミングという知的生産物はアウトソースできない部類のものとう認識が一般的であろう。そして、コモディティというより、需要が高まる一方の職種になっている。

また、英語に関しては、コモディティというよりも読み書きそろばんのたぐいの必要不可欠のツールになると私は強く思う。だからこそ、国際教育のビジネスをしている。日本は人口が減少し国力が衰える。そうなると母国語だけではお金が稼げなくなる。だから、ヨーロッパ諸国の英語力はネイティブ並であると思っている。英語を使いこなせるまで5,6年はかかるように思うし、始めるなら早い方が良い。英語はツールで専門は別に持つというは前提である。

リスクを取らないことが一番のリスク

私が日頃思っている言葉が出てきたのは印象深い。

「スタンフォードの自分を変える教室」読了

新年はじめに良さそうな本を選び聴き終えた。意思の力は自己に責任があるのではなく、科学的・心理学的な要因により決まるということを説明した本。ダイエットの例が沢山出てくるが、個人での問題に置き換えて話を聞いていた。自分を許す、認める等を意識的に行い負のスパイラルから抜け出す等は使えそうだ。

オーディオブックの問題として、すぐに忘れてしまう。一週間かけて聴いたら、最初の方は忘れてしまっている。本ならページを戻れるが、それが厳しい。要約ブログなどを最後に読み、記憶の整理をするのが良さそう。

2020 Goals

40歳にもなると一年があっという間なので今年のゴールを設定しておく。

  • Todo Listを毎日使う
  • 本を月に2冊読む・聞く
  • 毎日運動する
  • 毎週一つブログでアウトプットする

Todo Listを毎日使う

Todo Listを使うと非常に生産性の高くなるのだが、すぐに使わなくなってしまう。今年は毎日使うことを目標にする。ツールは、Todoist + Toggl(pomodoro)に決めた。

本を月に2冊読む・聞く

通勤が徒歩になり、本を読まなくなった。英語のAudio bookは続かなかったので今年は日本語で挑戦する。2週間に1冊が目標。

毎日運動する

半年ほど毎日軽いジョギングorウォーキングを行っているのでこれを継続する

毎週一つブログでアウトプットする

日々思うことがあるのに何もアウトプットしていないとダラダラとしてしまう。毎週なにか書き留めておこうと思う。

これからの教育に思うこと

教育という業界に来て早いもので5年が経とうとしている。

CTOとして開発メインで事業に参画したが、早いうちからビジネスに関わるようになり、教育というものをいつも考えるようになっている。子供の教育に関して、大事なものを3つあげるとしたら、

  1. 情報収集する力
  2. 目的達成のための学習
  3. 継続する習慣

他にもコラボレーションも大事だが、まずは個として自立するためにはこの3つが必要に思う。

情報収集する力

世の中は偏りのある情報で溢れている。あなたTwitterタイムラインが誰とも違うようにネットではすでにパーソナライズされた情報を得ているので、あなたの常識は隣人の常識ではない時代が始まっている。情報を取捨選択し、解釈・消化していく、そのプロセスを念頭に置かなければならない。Googleの検索結果自体が、すでにパーソナライズされている場合、次世代の子はどのように一般常識を学ぶことができるのだろうか。その答えの一つは、色々な情報に触れること。ネットだけでなく、実際に人と話したり、世界の小説を読んだりすることでないかと思う。共通語としての英語は非常に有用なものである。他の国の人と話すことで、そのバックグランド・文化を理解できるし、共通語に翻訳されている情報は多い。日本語は人口の減少とともによりマイナー言語となり、小さな情報源となる。

目的達成のための学習

人は忘れる。コンピュータは忘れない。忘れるといことは精神を安定させるために作られた非常に大事な機構である。小学校のときに習った社会を覚えてるであろうか。もし覚えていたとしても、その情報は古くあまり役にたたない。例えば、日本の小麦の生産量など、我々の多くは30年前の記憶をベースにしているのかもしれない。記憶はコンピュータに任せるべきで、人は概略とインデックス(目次)を覚えておけば良い。忘れないものは何かといえば、自分で考え導き出した学習だ。体験したものは忘れにくいし、自分で工夫を入れたものなら尚覚えているし、そのプロセス自体が将来に役に立つ可能性は高い。具体的には、例えば、作成中のロボットがよく転ぶ、それはなぜか、重心が問題だ。重心を調べよう、というような目的のための学習だ。そもそも、社会人になると経験から学ぶことが多い。実生活から学び、それを糧としていきていく。プログラミングなどのIT教育に熱が入るが、目的に対して実装を自分で考えるプロセスは非常に有用だと思う。プログラミングという手段は10年後必要がない、もしくは量子コンピュータなどの新しいパラダイムが現れているかもしれない。手段は時代時代に変わる。目的に対して実装を自分で行うというプロセスは不変だ。その体験は未来につながる。

継続する習慣

人は非効率。一つスキルを得るのに3年ぐらいかかる。大学が4年あるのも理解できる。スポーツでも音楽でも技術を身につけるのは時間がかかる。昔からいうように継続は力だ。これは不変なように思う。これを前提とすると、どうやって継続するか。それは、興味だ。好きなものは時間を忘れて没頭する。好きだから続けるし、続けるとその次が見えてきて、気がつくと長期間時間を使っている。では、興味をどうやって見つけるか。これは親が手伝える。選択肢をあげて、好きだったものが一つでもあったら、その結果に対して、褒めて褒めて褒めまくることだと思う。選択肢はうまく調節しないといけないが。

Released iOS/iPadOS app, Wazari Browser, to make use of external keyboard


I just released iOS/iPadOS browser. This browser has the following functions.

  • Customizable shortcuts to operate browser. e.g. Change tabs without touching screen.
  • Panes to split views vertiacally or horizontally.
  • Hit-A-Hint – without touching, click links to move pages.
  • Customizable modifiers. e.g. swap capslock with ctrl key.
  • Customizable default search engine – DuckDuckGo or Google
  • Exclude web sites not to use keymapping. Some dynamic web site doesn’t use Input type=text or textarea, which Wazari keymapping doesn’t work. But you can exclude these website so you can still type on it.
  • Histories to go back easily
  • (Optional and Paying serivce) Integrated to Wazaterm so you can terminal.

Wazari browser is my first open source project and also a sub project of Wazaterm.

Download from App store


I use react-native(iOS only) to build this to catch up recent React/React Native. I will post what technique that I used for this with the following posts.

Mov to mp4/gif with ffmpeg

For the sake of my memory.

mov to mp4

mov to animation gif

macOSでkey repeatが動かない時の対処法

実際はkeyrepeatは作動している。(例えば、$などはブラウザ上でキーリピートするし、Terminalでは問題なく動く)
この現象のときは、下記をターミナルを開いて打つ。

そして、再起動。

Scroll to top