初動対応更新日
#StudioのAPIキーを差し替える手順は?
外部サービス側で新しいAPIキーを先に発行し、Studioのデザインエディタで認証設定を更新したあと、古いキーを削除します。
- 外部サービス(microCMSなど)で新しいAPIキーを発行する
- Studioのデザインエディタで[接続]→[API]→[認証]を開き、値を新しいキーに書き換えて保存する
- エンドポイントでその認証が選ばれていることを確かめ、[接続を確認]を押す
- 公開サイトでも、外部のデータが表示されているか見る
- 外部サービス側で古いキーを失効・削除する
認証の画面には「キー」と「値」の2つの欄があります。microCMSの場合、キーの欄はヘッダー名の X-MICROCMS-API-KEY のままでかまいません。書き換えるのは値の欄に入っている認証用の文字列です(StudioのmicroCMS連携手順)。
[接続を確認]に成功すると、画面の右側に取得したデータのサンプルが出ます。ただし、この確認は接続テストです。エンドポイントの設定を保存すると公開サイトにすぐ反映されるため、保存した後は実際のページも開いて確かめてください。
なお、microCMSでキーを作ったり消したりできるのは、管理者権限を持つユーザーだけです。新しいキーはAPIキー管理の一覧にある[追加]から作り、名前と権限を決めます(microCMSのAPIキー仕様)。また、プランごとに作成できるキーの上限数も定められており、Hobbyプランは1個、Teamプランは3個、Businessプランは10個、Enterpriseプランは20個となっています。新旧のキーを一時的に並行稼働させるためには、キー枠に空きがあるか事前の確認が欠かせません。自分のアカウントに管理者権限がなければ、先に権限を持つ人へ頼むことになります。
#自分のStudioサイトはAPIキー漏えいと関係がありますか?
外部サービスと連携していないサイトでは、APIキーの差し替えは要りません。ただし、アカウント情報やデザインエディタ・CMSの内容は、すべての利用者について流出の可能性がある情報に入っています。外部サービスからデータを取得するAPI連携を設定していたサイトは、キーの確認と差し替えが必要です。
Studioのセキュリティ告知によると、Data Connect APIや旧API連携(Beta)の設定に登録されていた外部サービスのAPIキーやトークンについて、暗号化して保存されていたデータも含めて復号用の鍵が読み出され、第三者に知られた可能性があると公表されました。
- キーの差し替えが要らないケース:外部サービスと連携せず、Studioのデザインエディタや組み込みのCMSだけで完結しているサイト(アカウント情報やデザインエディタ・CMSの内容は、この場合も流出の可能性がある情報に含まれます)。
- キーの差し替えが必要なケース:Data Connect APIや旧API連携(Beta)を使い、microCMSやNotionなどの外部データを動的リストや動的ページへ読み込んでいるサイト。
- その他の確認項目:Embedボックスなどのカスタムコード内に、外部サービスの秘密トークンを直接記述しているサイト。
もうひとつ迷いやすいのが料金プランです。Data Connect APIはBusiness以上が対象です。旧API連携(Beta)で連携済みのデータは、引き続き全プランで使えますが、今後の継続利用は保証されていません(Data Connect APIの仕様)。今のプランがBusiness未満でも、過去に連携していればキーの差し替えが必要になりえますね。
ちなみに、Studioはアカウントのパスワード変更も求めています。GoogleログインやFacebookログインだけを使い、Studioのパスワードを一度も設定していない人は、変更しなくて大丈夫です。
#漏えいしたAPIキーが不正利用されていないか確かめるには?
Studioに登録していたAPIキーが勝手に使われていないかは、どうやって確かめればよいでしょうか。
使われたかどうかは、Studioではなくキーを発行したサービスの管理画面で見ます。利用履歴や利用状況のページを開き、心当たりのないアクセスや操作がないかを確かめてください。いつ以降の記録を見ればよいかは、上で挙げたStudioのセキュリティ告知で確かめておきましょう。おかしな利用が見つかったら、そのサービスの提供元と、Studioの問い合わせ窓口の両方に知らせます。
ここで気をつけたいのが、Studio側の機能とキー自体の権限の違いです。StudioのData Connect APIは、GETでもPOSTでもデータを取ってくるだけで、外部サービスのデータを作ったり消したりはしません。ただ、漏れたキーそのものは、Studioを通さずに直接使えます。microCMSでは、キーに付けた権限によって外部からの書き込みができたり、下書きのコンテンツが公開状態にされたりすることがあります。キーに書き込み権限を付けていたなら、記事の追加・変更・公開状態もあわせて見るほうがよいでしょう。
また、利用量に応じて従量課金が発生するサービスでも確認を急ぐ必要があります。Google Mapsのセキュリティガイドにあるように、制限をかけていないAPIキーが悪用された場合の利用料金は契約者自身の負担となってしまいます。
#APIキーのローテーションとは何ですか?
APIキーのローテーションとは、稼働中のシステムを止めずに新しいキーを発行して設定を移し替え、古いキーを無効化するセキュリティ対策のことです。一度発行したAPIキーを長期間使い続けるのではなく、Google Cloudの認証運用ガイドが示すように定期的な再発行と破棄を繰り返すことで、万が一の漏えいによるリスクを低減させる狙いがあります。
順番を守る理由は、Studioの場合はっきりしていますね。設定を更新する前に古いキーを失効させると、サイトの連携が止まることがあります。逆に、新しいキーを発行しただけで終えると、漏れた古いキーが生きたままになります。発行、Studioの更新、発行元での古いキーの失効まで終えて、ひと回りです。
入れ替えとあわせて、キーの権限と使い道も見直せます。microCMSでは初期設定の権限として取得(GET)のみを許可し、更新が必要な通信にだけ限定して書き込み権限を付与する運用が可能です。キーをウェブサイト用、iOS用、Android用のように分けておけば、用途ごとに入れ替えの時期やアクセスできる範囲を決められます。
#移行後はAPIキーをどう管理すれば安全ですか?
Studioから別の環境へサイトを移したあと、キーをどこに置けばいいのでしょうか。再発防止の基本となるのは、秘匿すべき認証情報をブラウザから直接見える場所に配置せず、サーバーサイドの環境変数に格納して通信を中継させる仕組みの採用です。Webブラウザから外部APIを直接呼び出す構成を取ると、通信ログや画面のソースコードを解析することで誰でもキーの文字列を取得できてしまいます。
Cloudflare Workersには、暗号化した文字列をWorkerに設定するSecretsがあり、APIキーの保管に使えます。Astroの場合、PUBLIC_ で始まる環境変数はブラウザー側のコードからも使えるので、秘密のキーには付けません。astro:envでサーバー用のsecretとして定義した変数は、最終的な配布ファイルに含まれません。
どこに置いても、キーの権限は使う分だけに絞ります。microCMSなら必要最低限のGET権限、Google Maps Platformなら使うAPIやアプリへの制限です。
もっとも、すべてのキーをサーバーに隠す必要があるわけではありません。microCMSでは、標準の権限をすべて外し、公開してよいAPIにだけGETを許し、非公開のAPIには個別の権限を付けない設定にすれば、キーをそのままブラウザー側に埋め込む使い方も示されています。中継用のサーバーを作らずに済みますが、GETだけのキーでも非公開の情報を取れる設定なら安全とはいえません。
こんな聞き方も
- Studioに登録していたAPIキーが漏えいした場合、どう対応すればよいですか?
- StudioのAPIキーを差し替える手順は?
- 新キー発行→Studioの設定更新→旧キー失効の順番で進めればよいですか?
- 先に旧キーを失効させると連携が止まってしまうのですか?
- Data Connect APIで使っていたキーやトークンはどう対応しますか?
- Data Connect APIに設定したキーやトークンも対象ですか?
- Data Connect APIの接続先サーバー側でも認証トークンを変える必要がありますか?
- 漏えいしたAPIキーが不正利用されていないか確かめるには?
- APIキーが不正利用されていないかログで確かめるには?
- APIキー漏洩の影響範囲はどう調べればよいですか?
- APIキーのローテーションとは何ですか?
- 自分のStudioサイトはAPIキー漏えいと関係がありますか?
- 複数クライアントのAPIキーをまとめて差し替えるには?
- 移行後はAPIキーをどう管理すれば安全ですか?
- Cloudflare WorkersではAPIキーをどこに保存すればよいですか?
- 今後のためにAPIキーの権限を最小限にするにはどうすればよいですか?
あわせて知りたい(関連する疑問)
QData Connect APIの接続先サーバー側でも認証トークンを変える必要がありますか?
たとえば、自社の独自APIサーバーや外部のデータベースからStudioへ情報を読み込んでいる場合、Studio側の登録値を新しくするだけでは不十分で、接続先サーバー側でのトークン変更も欠かせません。
認証トークンの有効性を判定しているのは接続先サーバー自身です。Studio側の設定欄にどれだけ新しい文字列を保存したとしても、サーバー側で古い認証トークンを有効なまま放置していれば、外部に漏れた古いトークンを使って誰でもサーバーへアクセスできる状態が続いてしまいます。
接続先サーバーでの対処は以下の流れに沿って進めます。
- サーバーの設定ファイルや認証データベースに新しい認証トークンを追加する。
- StudioのAPI接続設定を開き、認証ヘッダーの値を新しいトークンへ書き換える。
- Studio側の[接続を確認]を実行し、正常にデータを受信できているかテストする。
- 接続先サーバー側から古いトークンを削除し、古い値でのリクエストを拒否する設定にする。
発行元での操作はサービスによって違いますね。CloudflareのAPIトークンは、新しいトークンへ切り替える「ロール」をすると、それまでのトークンが無効になります。この方式だと発行と失効が同時に起きるので、新しい値をすぐStudioに入れ直す段取りを先に決めておきたいところです。Google Cloudでは、新しいキーの文字列をコピーして、使っているアプリ側を更新してから古いキーを消す流れになります。
Q制作会社はクライアントのAPIキー漏えいにどう対応すればよいですか?
クライアントのWebサイト制作や保守を担っている制作会社は、どのような手順で調査と連絡を進めるべきでしょうか。最初に手をつけるべき作業は、自社が制作・管理に関わっている全Studioプロジェクトの中から、Data Connect APIや旧API連携(Beta)を使用しているサイトを網羅的に洗い出すことです。
制作会社で詰まりやすいのが、発行元のアカウントを誰が持っているかです。microCMSのキーを作成・編集・削除できるのは管理者権限を持つユーザーだけなので、クライアント名義の契約で制作会社が管理者でなければ、新しいキーの発行も古いキーの失効もクライアントにお願いすることになります。Studioの更新は制作会社、発行元の作業はクライアント、のように分担を決めてから連絡すると話が早いですね。
利用履歴の確認も依頼に含めます。心当たりのない利用がないかを各サービスで見てもらい、見つかったら提供元とStudioの窓口へ知らせてもらいましょう。どの時期から記録を見るかは、Studioのセキュリティ告知をクライアントと一緒に確かめて決めます。
個人データがからむ場合は、法令上の手続きも出てきます。個人データの漏えいなどが報告の対象になる事態にあたり、委託先が委託元へ通知することで報告に代える扱いを使うときは、事態を知ったあと速やかに通知しなければなりません。通知したあとも、必要に応じて委託元の報告に協力します(個人情報保護委員会のガイドライン)。キーが漏れただけで必ず当てはまるわけではないため、そのキーで個人データを取れたかを先に確かめます。
Q複数クライアントのAPIキーをまとめて差し替えるには?
まとめて片付けたくなりますが、作業はプロジェクトごとに1件ずつ、同じ手順で回すのが現実的です。Studioの認証は、プロジェクトのデザインエディタで[接続]→[API]→[認証]から登録し、エンドポイントごとに使う認証を選ぶ作りになっています。
作業の抜け漏れを防ぎ、サイトの表示崩れを起こさないためには、案件ごとの進捗を管理するチェック表を用意して1件ずつ丁寧に対処していく方法が適していますね。
| 管理項目 | 確認内容 | 完了チェック |
|---|
| 対象サイト名 | プロジェクト名と利用している外部サービス | 未着手 / 完了 |
|---|
| キー発行権限 | クライアント側で発行が必要か、自社で発行可能か | 要依頼 / 自社対応 |
|---|
| 新キーの発行 | 接続先サービスで新しいAPIキーを生成したか | 未 / 済 |
|---|
| Studio設定更新 | エディタの認証設定に新キーを登録し保存したか | 未 / 済 |
|---|
| 表示の目視確認 | 公開サイト上で動的データが正常に表示されているか | 未 / 済 |
|---|
| 旧キーの失効 | 接続先サービス側で古いキーを削除・無効化したか | 未 / 済 |
|---|
手を付ける順番は、書き込み権限を付けたキーを使っているクライアントからにします。microCMSでは、書き込み権限付きのキーが漏れると、コンテンツを不正に書き換えられるおそれがあるためです。
古いキーを消す前に、そのキーがまだ使われていないかを見る方法もあります。Google Maps Platformでは、削除前に古いキーの使用状況を見て、すべてのアプリが新しいキーへ移ったことを確かめる手順になっています。ただ、これは移行漏れを見つけるためのもので、漏えいしたキーの失効を後回しにする理由にはなりません。
QAPIキーが悪用されるとどんな被害がありますか?
外部サービスと連携していたAPIキーが第三者に渡ってしまった場合、具体的にどのような実害に結びつくのでしょうか。被害の大きさは、漏れたキーに何ができる権限があったかで変わります。
読み取りの権限がある場合、その権限で取れるコンテンツを第三者に読まれる可能性があります。microCMSでは、エンドポイントさえわかれば任意のAPIを呼び出せるため、下書きなど公開前の内容まで取れるかは権限の設定しだいです。
書き込みの権限があると、さらに深刻です。microCMSでPOST・PUT・PATCH・DELETEの権限を付けたキーが漏れた場合、コンテンツを不正に書き換えられるリスクがあります。お知らせの文面を差し替えられる、記事を消されるといったことが、サイトの見た目に直接出てきます。
加えて、金銭的な損失が発生する懸念も無視できません。アクセス回数に応じて課金される従量制のAPIキーが悪用された場合、短時間で大量のリクエストを送りつけられることで高額な請求が発生するリスクがあります。Studio自体の料金が増えるわけではなく、請求は連携先のサービスから来ます。
AWSのセキュリティチェック案内でも、外部へ露出した認証キーは可能な限り速やかに削除するよう強く促されていました。想定外の被害を広げないためにも、異変を感じた時点で速やかに無効化へ踏み切りたいですね。
QmicroCMSと連携していた場合も対象ですか?
microCMSで管理している記事やお知らせをData Connect APIでStudioのサイト上に読み込んでいた場合は、今回のキー差し替え対象に該当します。
具体的な交換手順は、microCMSの管理画面から始めましょう。
- microCMSのAPIキー管理一覧で[追加]を押し、新しいキーを作る
- Studioの接続パネルで、APIの認証の値を新しいキーに書き換える
- microCMSで古いキーを失効させる
あわせて、作れるキーの数にはプランごとの上限があります。
| microCMSのプラン | 作成できるキーの数 |
|---|
| Hobby | 1個 |
|---|
| Team | 3個 |
|---|
| Business | 10個 |
|---|
| Enterprise | 20個 |
|---|
上限に達していると、新しいキーを追加できません。Hobbyプランで使っている人や、Teamプランですでに3個作っている人は、追加の前にキー管理一覧で今の数を確かめてください。
この内容をChatGPTで相談