WordPressサイトのセキュリティは、一度設定して放っておけるほどシンプルではありません。対策として常に監視する必要があり、その作業は大変なものです。
複数のウェブサイトのセキュリティを監視しなければならない状況では、Kinsta APIが便利なツールになります。これは、特に、独立した多数のサイトを管理している場合に当てはまります。そのような状況では、APIによる自動化と可視性が効果的です。
今回の記事では、セキュリティ強化にKinsta APIを使用する方法をご紹介します。主な焦点は、様々なエンドポイントを使用してIPアドレスをブロックし、その効果を監視することです。まずは、サイトのセキュリティ管理という困難なタスクの検討から行う必要があります。
ウェブサイトのセキュリティ管理の課題
世界で最も人気のコンテンツ管理システム(CMS)であるWordPressは、ハッカーにとって格好の標的です。そのため、WordPressはコアのセキュリティ強化に力を入れています。
約3パーセントのサイトが何らかの感染やブロックリストに登録されたリソースを抱えているとされ、数字上は良好に見えますが、だからといって安心してはいけません。実際、WordPressサイトに関して考慮すべき脅威はたくさんあります。
- ブルートフォース攻撃
- SQLインジェクション
- クロスサイトスクリプティング(XSS)
- マルウェア感染
- 分散型サービス拒否(DDoS)攻撃
複雑な攻撃の数々を考えると、単一のWordPressサイトのセキュリティを管理することだけでも十分に困難です。しかし、複数のサイトを担当するとなると、その複雑さと範囲は倍増します。サイトをネットワーク単位で管理するには、常にセキュリティ監視のための実践的かつ積極的なアプローチが必要になります。相互に接続されていないサイトを一括管理する場合は、さらに困難です。
そのため、効率的で効果的な方法で、管理しているすべてのサイトを監視し、セキュリティを確保することには非常に大きな価値があります。Kinstaはすべてのお客様にこの術をご提供しています。
KinstaのAPIでサイトのセキュリティを強化する方法
ご契約のプランに関係なく、Kinstaの全てのお客様にKinsta APIをご利用いただけます。これを使用すると、プログラムを介してサイトと対話することができます。ホスティングの要素に「フックイン」するエンドポイントが多数利用可能です。
Kinsta APIで様々なセキュリティ関連のタスクを自動化することができます。関連するエンドポイントは以下のとおりです。
- サイトツール内のブロックリストのIPを取得し更新
- サイトのエラーログやアクセスログを見たり管理したりするエンドポイント
- パフォーマンスに関する指標を取得するエンドポイントを使い、各サイトから分析データを獲得
これらの機能はMyKinstaから直接操作して使うことができますが、APIを介して実行することも可能です。多くの点で、Kinsta APIにはコントロールパネルの操作を上回る利点があります。
- 自動化:スクリプトを書いたり、サードパーティのツールを使用することで、セキュリティタスクを自動化することができます。これにより、時間を節約し、手作業によるミスを減らすことができます。
- 一括操作:APIを使用すると、複数のサイトのセキュリティタスクを一度に実行できます。複数クライアントサイトの保守管理を行う場合や、WordPressサイトの開発を生業としている場合にはこの点が便利です。
- 統合:既になにかしらのセキュリティツール一式を使用している場合には、Kinsta APIを使用することでそれを実際のセットアップに統合することができます。これにより、特別なセキュリティ管理体制が整います。
続いては、Kinsta APIを使用してIPアドレスを扱う作業へと進みましょう。簡単なタスクから始めて、高度なアプリケーションまで進みます。
Kinsta APIでIP制限を実装する
サイトのセキュリティを強化する最も簡単な方法の1つがIP制限です。これにより、早い段階でサイトへの特定のアクセスを食い止めることができます。ここでの主な利点は、ブルートフォース攻撃の緩和です。
MyKinstaでブロックリストを編集できますが、Kinsta APIにはより大きな柔軟性があります。例えば、KinstaのAgency/エージェンシープランで複数のクライアントサイトを扱うWordPressサイト保守管理会社のケースを考えてみましょう。
Kinsta APIを使用してIPアドレスを制限する
まず、制限したいIPアドレスの一覧が必要です。Kinstaのドキュメントでは、分析画面の情報を使用して短時間に大量のキャッシュされていないリクエストを行ったIPアドレスをブロックする方法など、役立つ解説をいくつかご紹介しています。
ここから、Kinsta APIを使用して制限をかけることができます。まず最初に、サイトの一覧を取得するには環境エンドポイントを使用します。これには、本番サイトとステージングサイトの両方が含まれます。
const siteId = 'あなたのサイトID';
const resp = await fetch(
`https://api.kinsta.com/v2/sites/${siteId}/environments`,
{
method: 'GET',
headers: {
Authorization: 'Bearer <あなたのトークン>'
}
}
);
const data = await resp.text();
console.log(data);
次に、ブロック済みIPを対象としたエンドポイントにGET
リクエストを実行します。該当するIPアドレスの一覧がJSON形式で返されます。
{
- "environment": [
"id": "abc123",
"ip-list": [
"192.168.1.1",
]
}
}
PUT
リクエストを行いブロック対象一覧にIPアドレスを追加することもできます。
const resp = await fetch(
`https://api.kinsta.com/v2/sites/tools/denied-ips`,
{
method: 'PUT',
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer <あなたのトークン>'
},
body: JSON.stringify({
environment_id: '54fb80af-576c-4fdc-ba4f-b596c83f15a1',
ip_list: ['127.0.0.1']
})
}
);
const data = await resp.json();
console.log(data);
追加が完了すると、その結果として200
レスポンスコードとresult: null
がJSONファイルとして返されます。ブロック対象のIPアドレス一覧を再度編集する必要があるときはいつでも実行できるように、スクリプトやツールでプロセス全体をさらに自動化することも可能です。
Kinsta APIでウェブサイトのアクティビティを監視する
IP制限のような予防に効果のあるセキュリティ関連の対策を実装するのがおすすめですが、潜在的なセキュリティの脅威を把握できるようにサイト上でのアクティビティを監視することも非常に重要です。各サイトについて、以下のような重要な指標を調べることができます。
- 異常なトラフィックパターンやトラフィック量の急増
- ログイン失敗の頻度
- 一般的に不審と考えられるユーザーの行動
- 一貫性のないサイトパフォーマンスや異常なダウン発生パターン
MyKinstaを使って、サイトのあらゆる側面についてリアルタイムで通知やアラートを受け取ることができます。これにより、潜在的なセキュリティの問題が発生した場合に、すぐに対策を講じることが可能です。
Kinsta APIには、サイトのログなどを取得し確認できるエンドポイントが豊富に存在します。また、個々の状況に合わせて、自動モニタリングやアラートシステムを設定することもできます。
サイトのログとメトリクスで悪意のあるアクティビティを見つける
例えば、いくつもの顧客サイトを抱える代行業者が、その複数サイト上の疑わしい活動を監視する必要があるとします。通知を起点としない積極的なモニタリングを選んだとすると、いくつかの方法があります。
繰り返しになりますが、エンドポイントにはIDが必要ですので、環境の一覧を取得することから始めます。そしてIDを取得したら、logs
エンドポイントに注目します。リクエストには2つの必須フィールドがあります。
file_name
:error
、access
、kinsta-cache-perf
を対象とするlines
:ログから返される行数を指定
これは、懸念すべき点があるかどうかを知るのに便利です。さらにmetrics
エンドポイントを使い、より詳しい情報を確認することもできます。注目する指標は特定の状況によって異なります。
例えば、帯域幅をチェックすれば、サイトに対する組織的な攻撃がないかどうかがわかります。クエリパラメータでは、タイムフレームの開始点と終了点、間隔を設定できます。JSONの戻り値には、特定のサイトの帯域幅の詳細情報が表示されます。
{
"app": {
"id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
"display_name": "my-app",
"metrics": {
"timeframe": {
"start": "1679587045511",
"end": "1679587045511"
},
"bandwidth": [
{
"time": "1679587045511",
"value": "value"
}
…
他にも、1分あたりのHTTPリクエスト数や平均応答時間など、多くの指標が利用できます。このような指標やログ内のデータを、疑わしい活動や潜在的なセキュリティ面での脅威を特定するのに活用できます。
可視化が必要な場合は、Kinsta APMが便利です。
Kinstaのあらゆる機能やツール(API、MyKinstaの分析画面やダッシュボード、およびAPM)を組み合わせることで、潜在的なセキュリティの問題を素早く検出して対応し、サイトや組織の評判に損害がもたらされるリスクを抑えることができます。
Kinsta APIとMyKinstaを使用してセキュリティのエスカレーションを自動化する
セキュリティワークフローを自動化することで、対応の効率性と機動性を高めることができます。積極的な監視は、サイトのセキュリティを維持する理想的な方法ですが、時には事後の対策が必要になることもあります。
これにも自動化が活用できます。Kinstaから通知を受け取り次第、問題の解決にあたるというのが一つの手です。この用途でのKinsta APIの使用は必須ではありません。
代わりにMyKinstaの直接操作をおすすめします。Kinstaのドキュメントで、サイト監視の通知についての説明をご用意しています。サイトのダウン、DNSエラーなど、さまざまな目的に利用できます。
サイトの脅威を特定した時点で、Kinsta APIを呼び出して悪意のあるユーザーを処理することができます。ブロック対象の一覧にIPアドレスを追加したり、最悪の事態に備えてバックアップをチェックしたりすることが可能です。
どのようなバックアップがあるかはGET
リクエストを使って簡単に把握できます。1つでも欠けていれば、POSTリクエストで手動バックアップを開始できます。環境IDとバックアップの名前だけが必要になります。
const envId = ' あなたの環境ID';
const resp = await fetch(
`https://api.kinsta.com/v2/sites/environments/${envId}/manual-backups`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer <あなたのトークン>'
},
body: JSON.stringify({
tag: 'my-awesome-backup'
})
}
);
const data = await resp.json();
console.log(data);
Kinsta APIを使ってバックアップを復元することもできます。サイトのログを取得し、指標を評価し、特定のパラメータとルールに従ってバックアップを作成し、悪意のあるIPアドレスからのアクセスをブロックし、攻撃が落ち着いた時点でバックアップを復元するといった戦略が考えられます。
サイトのアクティビティを継続的に監視し、Kinsta APIとMyKinstaから確認できる洞察に基づいてセキュリティプロセスを反復するのが有効です。
セキュリティのエスカレーションプロセスを自動化し、脅威に素早く対応しセキュリティインシデントがサイトに与える影響を最小限に抑えることができます。
API主導型セキュリティ強化策実施のグッドプラクティス
APIを使用するときは常に、サイトの特定の側面をオープンなウェブにさらすことになります。このため、サイトとデータのセキュリティと完全性を保証するために、一般的なプラクティスに従うことが不可欠です。
重要なポイントがいくつかあります。何よりもまず、APIにアクセスするときは常に安全な認証方法を使用すること。これは、APIキー、OAuthトークンなどになり得ます。KinstaではこれのためにAPIキー認証エンドポイントを提供しています。
const resp = await fetch(
`https://api.kinsta.com/v2/validate`,
{
method: 'GET',
headers: {
Authorization: 'Bearer <あなたのトークン>'
}
}
);
const data = await resp.text();
console.log(data);
クライアントサイドのコードや公開リポジトリでAPI認証情報を公開してしまわないようにご注意ください。この点について、使用するプログラミング言語の機能を調べることをおすすめします。例えばPythonはconstants.py
モジュールから呼び出し、PHPはOpenSSLやその他モジュールを使って機密情報を保護します。
他にもいくつか重要な点が以下のとおりです。
- データの取り扱い:Kinsta APIを通じて機密データを取得する場合、そのデータを安全な方法で取り扱い保存してください。また、データの暗号化、アクセス制御、プライバシー規制の遵守などの慣行に従うことをお勧めします。
- 定期的なテストと更新:テストプロセスは継続的であるべきで、これはKinsta APIでも達成できます。絶え間ない継続的テストと更新により、サイトとそのセキュリティが脅威に対抗可能になります。
最後に、最小限の権限にとどめることが重要で、チームやサードパーティのサービスにどのようなレベルのアクセス権を設定する場合でも必須の原則です。各ユーザーやサービスがタスクを実行するために必要な最小レベルのアクセス権のみを付与するようにしましょう。さらに、不要なアクセス許可は定期的に見直し、取り消すこと。
IP制限とアクティビティ監視のレポート
クライアントサイトのセキュリティ管理では、戦略の効果について定期的かつ透明性の高いレポートを提供することが重要です。顧客としは、自社のサイトを保護するためにどのような手段を講じているのか、またその結果はどうなっているのかを常に把握する必要があります。これは、信頼を築き価値を実証するのに欠かせません。
そのため、レポート内でクライアントにできるだけ多くの情報を提供できるようにしたいものです。Kinstaでは個々のサイトについて様々なデータとインサイトを取得できます。
- ブロックしたIPアドレスの数
- ログインの失敗や異常なトラフィックなどの不審なアクティビティの傾向
- サイトのパフォーマンスと稼働時間(潜在的なセキュリティ上の問題を示す可能性があります)
もちろん、もっと多くの情報が入手可能です。網羅すべき点は以下のとおりです。
- サイトのバックアップやセキュリティパッチなど、特定された脅威に対して実施した措置
- データ可視化ツールの使用(サイトのセキュリティに関する情報を明確でわかりやすいグラフ、チャート、ダッシュボードで示すなど。クライアントによるセキュリティ関連対策の把握や、効果的かどうかの判断を助ける)
- 提示するデータの文脈と説明(顧客がセキュリティの概念について深い技術的理解を持っていると考えるのは間違い。平易な言葉を使い、事例を示すことで、報告する指標や傾向の重要性や重みを把握できるようにすること)
全体として、サイトのセキュリティで発生した課題や限界について透明性を確保することが重要です。困難な脅威や問題についてはそれを率直に伝え、改善するために何をしているかを説明しましょう。
そこで、さらなるセキュリティ改善のための推奨事項を提示することも有効です。提示のためには洞察と分析が必要です。例えば、二要素認証の導入や古いプラグインの更新など、セキュリティに関連したその他の対策もあり得ます。
まとめ
Kinsta APIは、サイトのあらゆるタスクをカバーします。その中のひとつとして、セキュリティについて言えば、サイトとユーザーを安全に保つ優れた術になります。ログの取得、異常なアクティビティのチェック、IPアドレスの自動ブロックなどのタスクを自動化することができます。
APIを他のアプリやツールにフックすることも可能です。これにより、サイトセキュリティの完全なシステム化が実現します。Kinsta APMを通した可視化と相まって、サイトを長期的に安全に保つことができます。
サイトのセキュリティ管理のためにKinsta APIをどのように活用していますか?以下のコメント欄でご経験をお聞かせください。
コメントを残す