何が起きたか
2019年5月17日、Salesforceはマーケティング製品Pardotに関連するデータベーススクリプトを実行し、それが「意図より広範なデータアクセスをユーザーに付与する結果となった」。現役および元Pardotユーザーは、権限設定を無視して、自組織内のすべてを読み取り・編集できる状態になった。露出を封じ込めるため、Salesforceは影響を受けた顧客を含むすべてのインスタンスへのアクセスを遮断した。合計105インスタンスであり、Pardotと無関係のテナントも停止させた。
全面的な障害は15時間8分続き、5月18日0104 PDTに終了した。そして同じ分に新たな障害が始まった。インスタンスを安全に再開できるようにするため、Salesforceは影響を受けたユーザーの権限を消去し、管理者アカウントのみを復元して、顧客にユーザー権限を手作業で再割り当てするよう伝えた。週末にかけてバックアップから権限を復元するスクリプトを構築したが、日曜日までに成功率89%と報告したため、およそ10組織に1つは依然としてユーザー権限が消去されたままだった。さらに一部の実行では、そのスクリプトが除去すべき広範なアクセスを再付与してしまった。
修復は翌週まで続いた。5月20日月曜日までに数千件のチケットが未解決で、サンドボックスインスタンスは依然として停止しており、エンジニアリング担当SVPのAnmol Bhasinは顧客との通話で謝罪し、最初の修正は「成功しなかった」と述べ、利用可能なエンジニアリングリソースはすべてこの問題に投入されていると語った。修正は元の障害よりも長い第二の障害となった。
何を犠牲にしたか
105インスタンスがオフライン。約15時間の全面障害、その後数日間の読み取り専用の後処理。週末の復元スクリプトはおよそ10組織に1つで失敗した。
なぜ起きたか
変更は意図した範囲をはるかに超えて実行された。Pardot組織の一部に対する権限修正がプラットフォーム全体に及び、ユーザーが本来決して見るべきでないデータを見る前に、拡大を防ぐガードはなかった。
唯一安全な封じ込め策はインスタンス全体をオフラインにすることだったため、ある製品チームの誤りが、同じインフラ上の無関係な顧客にとって共通の障害となった。
ロールバックは決して設計されていなかった。復元スクリプトはプレッシャーの中で週末に書かれ、約11%の組織で失敗し、時には除去すべきアクセスを再付与してしまった。
復旧は顧客に作業を押し付けた。管理者がユーザー権限を手作業で再構築し、1日のインシデントが1週間の後処理とサポート負荷に引き伸ばされた。
教訓
スコープ外のデータベーススクリプトは会社レベルのリスクである。すべての変更にスコープを定め、段階的にロールアウトし、まずロールバックを構築せよ。さもなければ、治療が病気よりも多くの顧客を締め出すことになる。
その後
アクセスは5月18日から徐々に復旧した。ほとんどの組織は5月20日月曜日までに稼働を再開し、サンドボックスと遅れている組織はSalesforceが復元スクリプトをインスタンスごとに実行したため、さらに数日を要した。Salesforceは大多数の顧客にとって権限確認以外の対応は不要と述べたが、このインシデントはマルチテナントSaaSにおける変更スコープとブラストラディウス(影響範囲)管理の標準的な事例研究となり、プラットフォームチームが本番環境のデータベーススクリプトをコードデプロイと同じ慎重さで扱う理由となった。
出典をたどる
出典
- Salesforce? Salesfarce: Cloud giant in multi-hour meltdown after database blunder grants users access to all data The Register · theregister.com ·
- Salesforce says a major issue with its cloud service results in outage for some customers CNBC · cnbc.com ·
- Salesforces Pardot went down for 15 hours, exposing data in the cloud MarTech · martech.org ·
- Salesforce outage continues: 105 instances down, fix not yet functional The Register · theregister.com ·