クラウドワークス エンジニアブログ

日本最大級のクラウドソーシング「クラウドワークス」の開発の裏側をお届けするエンジニアブログ

週刊ポストモーテム継続への道のり

f:id:bayashi_ok:20210318092810p:plain

こんにちは、SREチームの @bayashi_ok です。

今回はクラウドワークスで週1回ペースで実施している「週刊ポストモーテム」の取り組みをご紹介していきます。

  • ポストモーテムとは
  • 週刊ポストモーテムとは
  • 復刻:週刊ポストモーテム
    • 障害対応した人もしくはそのチームの人が発表
    • 障害がなくても開催
    • ゆるく開催
  • 継続して開催していくメリット
    • みんなの交流の場にもなる
    • 課題を見つけ、なにかをはじめるきっかけになる
    • 他部門の人に知ってもらえる
    • 監視ツールの使い方や見方がわかる
  • 今後の課題
  • 最後に

ポストモーテムとは

まずポストモーテムという単語について少し説明します。

ポストモーテムの意味は各分野でも変わっており、医学の世界では「検死」、プロジェクトマネジメントの世界では「事後検証」などの意味を指します。

SREの文脈では主に、

  • 障害などが発生した際の影響
  • そのとき行われたアクション
  • 障害発生の根本原因
  • 再発防止のためのアクション

などを記録するために書かれるもので、いわゆる「障害報告書」のようなものになります。

ただ、記録としての報告書というだけではなく、組織的な学びのために蓄積していくものだということです。

・SRE公式本(WEB無料公開版)

https://landing.google.com/sre/sre-book/chapters/postmortem-culture/

・その他参考記事

https://tech.mti.co.jp/entry/2017/11/25/000316

https://note.com/campfire_dev/n/n2a46e3832207

週刊ポストモーテムとは

週刊ポストモーテムとはこれを毎週継続的に実施して行く取り組みです。

始まりは2019年2月で、障害が発生したときに、どんな情報から・どんな判断をしているのかというのを共有する場として設けられ、実際のアラートやタイムラインの流れを見ていくなどの取り組みから始められました。

続きを読む

脆弱性に対する取り組みを紹介します

始めに

皆さん、こんにちは。@shimopataです。 つい先日、ストリートファイター5のバージョンアップが行われましたね。新システムの追加で大きく戦略が変わる予感がしており、ワクワクしています。 さて、そんなスト5ですが、開発・販売元から不正アクセスによる情報漏洩があったと発表されましたね。こちらの事例はランサムウェアによる不正アクセスですが、webサービスを提供している身としては、あまり対岸の火事という気もしませんね。

私たちが運営しているクラウドワークスも、日本を超え世界中からご利用いただいております。新しいサービス・機能を提供する一方で、不正な利用を行われない様に強固なシステムを作っていく必要があります。私のチームではその様な不正利用を防ぐために、システムの脆弱性を撲滅する活動をしています。プロダクトを運営していく上での脆弱性対策に関する取り組みをトピックにした記事も少ないかと思うので、記事にさせていただきました。

取り組み全てをご紹介できるわけではありませんが、いくつかアプリケーションレイヤー層における脆弱性への取り組みをピックアップしてご紹介できたらと思います。

なぜ脆弱性に対する取り組みを行うのか

一言で表現すると「持続的なプロダクトを運営していく」ためです。 プロダクトに脆弱性があった場合、どの様なことが発生するでしょうか? パッと思いつくだけでも

  • 不正にユーザーデータが取得されてしまう。
  • 不正な値を入力されることでサイトのデザインが破壊されてしまう。
  • 不正にユーザーの権限昇格が行われ、本来アクセスしてはいけない管理者ページにアクセスできてしまう。
  • 別のユーザーに成り代わってログインし、アカウントを乗っ取ることが出来てしまう。

など、枚挙に遑がありません。

この様な脆弱性を含んだWebサイトを頻繁に利用したいと思いませんよね? Webサイトを提供し続けていくには、この様な脆弱性と向き合っていく必要がありますね。

脆弱性に対する具体的な取り組み

取り組みの方針は「脆弱性を検知する・減らす・増やさない」です。具体的な取り組みを次にいくつかご紹介します。

脆弱性を検知する

dependabot-alertsの活用

dependabot-alertsとは脆弱性のある依存関係を検知し、通知してくれるGithubの機能です。リポジトリのトップ画面にある、Securityタブから、Dependabot alertsを選択することで簡単に確認することが出来ます。

dependabot-alertの活用

CrowdWorksではbundleryarnを使用しているため、使用しているgemやモジュールについて脆弱性が報告されると、Dependabot alertsの一覧に追加されます。 上がってきたアラートに対して、影響の調査(どの様な脆弱性なのか、自分たちのプロダクトに関係している脆弱性なのか)などを行い、対応の優先度を決めています。

しかし、公式のドキュメントにある様に、全ての脆弱性がこのアラートに上がってくる訳ではないので注意が必要です。

Note: GitHub's security features do not claim to catch all vulnerabilities. Though we are always trying to update our vulnerability database and generate alerts with our most up-to-date information, we will not be able to catch everything or tell you about known vulnerabilities within a guaranteed time frame. These features are not substitutes for human review of each dependency for potential vulnerabilities or any other issues, and we recommend consulting with a security service or conducting a thorough vulnerability review when necessary.

サイトから情報を収集する

日頃から以下で紹介するサイトをチェックすることで、いち早く新規の脆弱性報告をキャッチし、パッチを当てています。また、時間を取って過去に見つかった脆弱性に目を通し「どんな類の脆弱性が存在したか」「どのように直したのか」など多くを学ぶことができます。

Ruby on Rails: Security https://groups.google.com/g/rubyonrails-security

Ruby on Railsのセキュリティに関する報告が上がってきます。これらの更新をチームのチャンネルにPOSTしています。

GitHub Advisory Database https://github.com/advisories

パッケージ管理ツールや脆弱性の種別ごとに脆弱性レポートを参照することができます。ただし、あるリポジトリで見つかった脆弱性のすべてがここに集約されているわけではないということは覚えておかなればいけません。

HackerOne https://www.hackerone.com/

登録している企業や組織が、脆弱性を報告してくれたハッカーに報奨金を払うサービスです。 以下のアクティビティに目を通して、自社で扱っているライブラリに新たに脆弱性レポートが上がっていないかチェックします。

https://hackerone.com/hacktivity

脆弱性を減らす取り組み

brakemanの指摘を元に修正

Rubygemの一つにbrakemanというものがあります。このgemRailsに対して脆弱性の観点で静的解析を行う事が出来ます。このgemを導入し、

brakeman -o output_file.html

と、実行するとコード内に存在する脆弱性が含まれる可能性のある箇所をhtmlとして一覧で出力してくれます。また、オプションによってcsv形式など、別の形式で出力可能なので、気になる方はリポジトリreadmeをご確認ください。 この一覧を元に、一つずつ、どの様な指摘をされているのか確認し、必要があれば、脆弱性が無い形へ機能の改修、そもそも必要とされていない機能であれば、機能の削除を行いました。 正直、指摘されている個数は少なくなく、一個一個見ていくのは大変ではありましたが、指摘箇所に対して全て対応を行いました。

gem、モジュールの更新、削除

日々、ソフトウェアの脆弱性を突いた攻撃は増え続けています。当然、自分たちの書いたコードだけでなく、gemに書かれているコードもその対象です。そのため、利用しているgemやモジュールをアップデートし続けていく必要があります。全てのgemやモジュールについて、最新版がリリースされたら追従するのが望ましいですが、現実的には難しいのが実態です。 そこで、dependabot-alertsやサイトの情報などを元に対応優先度を決め、アップグレードを行っています。また、Railsなど影響範囲の大きいものに関しては、最新のセキュリティパッチがリリースされ次第すぐに対応する様にしています。

脆弱性を増やさない取り組み

PR作成時にbrakemanの実行

CrowdWorksではSiderを取り入れています。SiderではPR作成時に、様々な静的解析ツールを実行し、コードの検査を行うことが出来ます。Siderの提供している静的解析ツールの中に、brakemanがあるため、これを有効にし、脆弱性が含まれそうなコードを検知し、PRのコメントとしてエンジニアに通知をしています。

brakemanの指摘

試しに脆弱性を含む可能性のあるコードを含んだPRを作成した場合、上記の画像の様にコメントしてくれます。

社内向けに勉強会の開催

機械的脆弱性の危険性を検知し通知しようとも、通知内容がエンジニアに理解されなければ、意味はありません。そこで、brakemanの指摘を元に修正した内容を社内のエンジニア向けに勉強会を開催し、脆弱性の危険性や、どの様なコードが脆弱性となり得るのかを伝えました。

終わりに

脆弱性の対策を行うと言ってもアプリケーションの改修に限らず、検知する仕組みを作ったり、脆弱性の危険性を社内のエンジニアに伝えたり、色々行うことがあります。 利用者様に安全にクラウドワークスをご利用いただくために、日々、改善を続けていきます!!

We're hiring!

クラウドワークスでは、安心安全なシステム作りに興味のあるエンジニアを募集しています! https://www.wantedly.com/projects/73940

Internet Explorerを推奨ブラウザから除外します

f:id:tatsuhiro-oishi:20210216172425p:plain

はじめに

クラウドワークスでは、ユーザーのみなさまに快適なサービスをより提供しやすくするために、Internet Explorer(以下IE)を推奨利用環境から外す予定です。

クラウドワークス 〜お知らせブログ〜 Internet Explorer 11を推奨利用環境の対象外といたします

IEをお使いのお客さまにはご不便をおかけしますが、Microsoft Edgeなどの別ブラウザへのご移行をお願いさせていただくことになります。 今回のエンジニアブログでは、なぜIEを推奨環境から外すのかをエンジニア観点でお話させていただこうと思います。

なぜIEを推奨環境から外すのか

今回この決断をしたのは以下の2つの理由からです。

現状のIEはセキュリティ更新プログラムの配信のみで、新規開発は止まっている状況です。昨今のEdgeやChromeなどでサポートされているモダンな機能はサポートされていません。 今後のクラウドワークスのサービス拡充において、IE対応による制限がユーザーへの不利益・不便となることを避けたいという思いからです。

IE特有の対応について

実装面

IEはブラウザ標準の機能に追従していないため、特有の開発対応が必要となります。例えば、利用可能なJavaScriptCSSの機能が限られるため、同等の機能を自分で提供するPolyfill(ポリフィル)が必要になるケースがあります。

以下の記事が参考になります。

また、SlackがIEOperaサポートを終了した時に出した表現がとても良いので引用させていただきます。

Slack の品質向上に集中するため、対応 OS やブラウザをできる限り限定するようにしています。古いバージョンの OS やブラウザも含めて幅広い対象をサポートすることにより、新機能の開発など、Slack の品質向上のための作業にかけられる時間がその分少なくなってしまいます。ですがこれは、私たちにとっても、ユーザーの皆さんの利便性を考えると、とても難しい決断でした。一部のユーザーの方にはご迷惑をおかけすることになり大変申し訳ありませんが、どうぞご理解いただけますよう、よろしくお願いします。

推奨環境として存在する以上、動作確認は必要となります。しかし、現実には確認漏れにより、動作が不完全な状態でリリースされたこともありました。 そのような低品質なリリースではなく、対象を限定して高品質なリリースを継続していきたいです。

一部のブラウザ専用の手法を試したり、コードの自動変換を用いれば、対応はできます。 しかし、それらの手間を考慮するより、より使いやすい機能とはなにかなどのUXに対して時間を割きたいと考えています。

コードの自動変換(Polyfill)

サポートするブラウザを減らすことで、Polyfill の量が減り、パフォーマンス改善とコードサイズの削減が期待できます。 しかし、現在は ES5 を対象としていますが、全体のコードベースから考えると ES2015 に変更するほどの効果はありません。積極的に動かなくするほどではありません。

クラウドワークスのフロントエンドの実装はまだ改善の途上であり、Polyfill の設定変更は効果をみながら行っていきます。 現在のところ、動作保証はしませんが、積極的に動かないようにもしません。

スタイルシートの適用

IEのサポートに際し、スタイルシートの適用が一番の困りごとではないかと思います。IEは他の最新のブラウザと比べて未対応要素独自の拡張仕様が多いためです。OSSで公開されているCSSフレームワークの中身を見てみると、IEのためのHackやFallbackのコメントをよく見かけ、また、IECSSで検索をするとflexboxの不具合を始めとした多くの不具合と、その回避策の記事を見つけることができます。 Microsoft自身もIEを使い続けることは技術負債を抱え続けることになり、"もううんざりだ!"と述べています。 The perils of using Internet Explorer as your default browser

このような問題と向き合い、なるべく多くのブラウザでの動作保証も大事です。しかし、Microsoftの動向を鑑みると、表現の制約を減らし新しいことへの挑戦や、UIの効果的な表現の実現に時間を使いたいと考えます。

動作確認の難しさ

クラウドワークスのエンジニア・デザイナが開発する環境はMacOSとなっており、Windowsでの開発環境がほぼ整備されていません。また、Windows(IE)のE2Eテスト環境も整っていないので、これまでは手動で動作確認していました。

エンジニアが開発中でも手軽に動作確認できる環境ではないので、そこが非常に辛い部分でした。

IEの今

クラウドワークスでのブラウザ利用率

クラウドワークスでのIEの利用率はブラウザ全体の2%程度となっており、直近5ヶ月で見たときのグラフは以下の通りでした。

  • ブラウザ種別

Chrome勢が半数を超えており、次点のSafari勢とで2強の状態です。

f:id:tatsuhiro-oishi:20210216172924p:plain

  • OS別ブラウザ種別

OSがWindowsのユーザーが30%、その中でもChromeが人気となっています。

f:id:tatsuhiro-oishi:20210216173004p:plain

スマートフォンのブラウザからのアクセスが増加傾向にあることから、IEのシェアはこれからも下がっていくと予想しています。

Microsoftの動向とIEのリスク

MicrosoftIE から Edge への移行を強く推奨しています。

弊社としましては、Internet Explorer との後方互換性が必要な業務 Web システムには Internet Explorer を利用いただき、Internet Explorer でなければならない場合以外は Microsoft Edgeをご利用いただくことを提案してきました

加えて、IEでWebブラウジングをし続けることについて、以下のような一般的なセキュリティ上のリスクも指摘されています。

IEを推奨外とした後のクラウドワークスのご利用について

IEクラウドワークスにアクセスするユーザー向けに、Microsoftの転送設定でフォローする予定です。

2020年11月にMicrosoftInternet Explorerで互換性のないウェブサイトにアクセスした場合にはURLの読み込みを拒否し、Edgeに自動的にリダイレクトする」 機能を公開しました。

この「互換性のないウェブサイト」は、非互換リストとして公開されており、ここにクラウドワークスのURLも登録する予定です。

この機能はバージョン87以降のEdgeがインストールされていることが条件となり、IEからEdgeへのリダイレクトは自動的(強制的)に行われます。社内ウェブツールなどでIEを利用したい場合は、利用者側の設定で無効にすることもできます。

Microsoftへ申請すれば個人所有のドメインでも、この非互換リストに追加してもらえます。この申請も難しい審査がある訳ではなく、メールで申し込むだけのようです。

おわりに

繰り返しとなりますが、クラウドワークスではユーザーのみなさまに快適で安全なサービスを提供できるよう日々取り組んでいます。今回のIEの非推奨化はこの取り組みの一部となります。

これまでIEクラウドワークスをご利用いただいたユーザーのみなさまには、一時的にご不便をおかけすることになりますが、ご理解とご協力をお願いいたします。

We're hiring!

クラウドワークスでは、働き方の変革に挑戦するエンジニアを募集しています!

www.wantedly.com

300GB/day出力されるログ基盤をFluent Bit + Fargate + NLBで再構築したら、エンジニアの作業効率が上がった

これは クラウドワークス アドベントカレンダー 24日目の記事です。前日は 畑中 さんの制作会社出身のデザイナーが事業会社に入って感じた5つの悩み事でした。事業会社とデザイン制作会社の違いから生まれる悩みをどう解決したかが伝わる記事でした。

クラウドワークスSREチームの @kangaechu です。最近はM1 Macを購入しました。M1 Macはアプリケーションの対応状況がまだまだなので、Goをソースからクロスコンパイルするなど、今までやったことがないことができてちょっと楽しいです。でももう少しネイティブのアプリが揃うと嬉しいな。

アドベントカレンダーSREチームに入ってからの2年間にチームでやってきたことに続き、2つめのエントリとなります。前回の記事で、Docker化したシステムの一つとしてfluentd(ログ基盤)を挙げました。ここではそのログ基盤についての詳細を書いていきます。

続きを読む

いちエンジニアがファーストビューのデザインを改修した話

f:id:murasahi:20201219073657j:plain

この記事はクラウドワークスアドベントカレンダー19日目の記事です。

クラウドテックのエンジニアをしている久村です。 2020年5月からクラウドテックに異動し、開発をメインで担当しています。 この記事では、サービスの顔とも言えるファーストビューを改修した話ができればと思います。

クラウドテックは、ハイクラスなフリーランス IT・WEB エンジニアやデザイナーに特化したマッチングサポートサービスとして 2015年4月から始まったサービスです。

続きを読む

© 2016 CrowdWorks, Inc., All rights reserved.