WordPressサイトのセキュリティ確保を甘く見ると、顧客データやオンラインの安全性を危険にさらすことになります。また、関連する基準や規制への準拠も優先事項であり、セキュリティ監視とコンプライアンスは等しく重要です。

これらの両方を実装するには、多くのサイトを管理している場合は特に複雑になります。しかし、Kinsta APIのエンドポイントを活用することで、KinstaのホスティングにAPI経由でアクセスし、あらゆるタスクを自動化することが可能です。

この記事では、Kinsta APIを活用してWordPressサイトのセキュリティを強化する方法、そしてMyKinstaの可能性をさらに引き出す方法をご紹介します。

また、継続的なデータコンプライアンス戦略についても取り上げます。Kinsta APIの機能を理解し、WordPressのワークフローにセキュリティ監視とコンプライアンスを組み込む手順を見ていきましょう。

継続的なセキュリティ監視とコンプライアンス遵守

ウェブサイトの運営は、特定のビジネスにとって非常に価値がありますが、悪意のあるユーザーは常にデータや利益を奪う機会を狙っています。2022年には、SiteLockのレポートによると、一般的なサイトは毎日およそ100件もの攻撃を受けています。

したがって、継続的にセキュリティを監視し、コンプライアンスへの遵守を定期的に見直すことが重要です。攻撃の形は常に変化しているため、継続的に進化するセキュリティ条項を評価、追跡し、対処する必要があります。例えば、OWASP Top 10は、どのような種類の攻撃が最も頻発しているかを監視しており、調査のたびにリストを更新しています。

継続的なセキュリティ監視には、以下のようなメリットもあります。

  •  潜在的な脅威を特定し、問題になる前に先回りして対応できる。
  • 定期的な監視により、堅牢なセキュリティを維持し、サイトの保護を継続することができる。
  • 一般的な業界標準やデータ保護ガイドラインの遵守ができる。
  • 中核的なレベルにおいては、サイトからデータが漏えいし、評判が低下するリスクを低減できる。

WordPressサイトの場合、監視とコンプライアンスへの遵守の重要性と課題はさらに大きくなります。

  • WordPressには固有のセキュリティ機能があるが、市場シェアの高さから攻撃の標的になる傾向がある。
  • 監視が必要なテーマやプラグインのエコシステムが複雑。
  • 複数のサイトを運営している場合は、信頼性の高い監視戦略を確実に実施しなければならない。
  • セキュリティ監視を既存の開発ワークフローにシームレスに統合する必要がある。

幸い、セキュリティ監視を既存にワークフローに統合し、WordPressの更新通知と組み合わせることは簡単です。また、Kinsta APIを介してこれを制御することができます。

Kinsta APIとは

Kinstaをご利用の場合、Kinsta APIを使って多くのタスクを自動化することができます。エンドポイントは多数あり、サイト、ユーザー役割、テーマやプラグインなどの依存関係を管理可能です。さらに、MyKinstaからログを取得して、同じアプリケーション指標にアクセスすることもできます。

MyKinstaのダッシュボード
MyKinstaの「ダッシュボード」

Kinsta APIは、WordPressホスティングに大きな焦点を当てているため、WordPressワークフローに簡単に取り入れることができます(詳しくは後ほど)。またでは、サイトの更新やログなど、WordPressの主要な側面に対するセキュリティ監視を積極的かつ自動で行うことができます。

そしてその機能の多くは、WordPressのセキュリティに関する考慮すべき点をカバーします。

セキュリティ監視とコンプライアンス遵守に関するWordPressのプラクティス

WordPressは、その成熟したコードベースとセキュアなプラクティスへの厳格な依存により、強力でセキュアなプラットフォームと言えます。コンテンツ管理システム(CMS)自体に、脆弱性を報告する以下のような手段があります。

リポジトリページには以下のようなセクションがあり、エンドユーザーがテーマに関する問題を報告することも可能です。

WordPress.orgのテーマページの「テーマを報告」ボタン
WordPress.orgのテーマページの「テーマを報告」ボタン

セキュリティを重視するWordPressは、コアのコードベースにも以下のような取り組みを行っています。

  • 定期的な更新:WordPressはコアソフトウェアの定期的な更新をリリースしており、セキュリティやパフォーマンスの問題に対処するためのパッチが含まれている。管理画面からコア、テーマ、プラグインを自動更新することもできる。
  • 高度なアクセス制御:定義されたアクセス制限を様々なユーザーにできるユーザー権限機能、パスワード強化ツール、コメントの作成と管理機能などが標準搭載されている。
  • ホスティングセキュリティの確保:WordPressのドキュメントには、安全なホスティングに関する多くの言及があり、コアチームのWordPressに対する取り組みと同等にセキュリティに配慮しているホスティングを利用することが推奨されている。

WordPress管理画面の「ツール」>「サイトヘルス」で、これらの側面を監視することができます。

WordPress管理画面のサイトヘルスページ
WordPress管理画面のサイトヘルスページ

コンプライアンスに関しては、WordPressはプライバシーポリシーテンプレートを提供しており、脆弱性開示フォームの使用も推奨しています。この上にKinsta APIを利用することで、堅牢なセキュリティを確立することができます。

Kinsta APIでセキュリティ監視を実装する

継続的なセキュリティ監視を含むセットアップを行うには、コードで実行するのが最善です。Kinsta APIを使用する以外にも方法はありますが、活用できるエンドポイントは多数あります。

APIを使用したセキュリティ監視の一般的なアプローチを見てみます。まずは、APIキーを取得するところから始めます。

1. API認証情報の取得

APIキーがなければ、サイトのどの側面にもアクセスできません。APIキーを作成するには、MyKinstaにログインし、画面右上のユーザー名をクリックして、「企業の設定」>「APIキー」画面に移動します。APIキーを初めて作成する場合は、以下のように空の画面が表示されます。

MyKinstaのAPIキー画面
MyKinstaのAPIキー画面

APIキーを作成」をクリックし、キーの有効期限と名前を設定します。

MyKinstaのAPIキー作成画面
MyKinstaのAPIキー作成画面

生成」をクリックすると、APIキーをコピーできます。キーはこのウィンドウでしか表示されないため、必ずコピーして安全な場所に保管してください。

生成されたAPIキーをコピーして安全に保管
生成されたAPIキーをコピーして安全に保管

APIキーを手元に用意したら、続いてはKinsta APIに接続します。

2. Kinsta APIで利用可能なエンドポイントを確認

エンドポイントを使用する際は、APIのドキュメントを開いておくことをお勧めします。数あるエンドポイントの中でも、以下がセキュリティ監視に有用です。

  • sites:企業アカウントに紐付くサイトの一覧を取得するのに使用でき、名前、ID、ステータスなどの基本情報を返す。
  • backups: GETおよびPOSTリクエストでサイトのバックアップの作成・復元が可能で、ディザスタリカバリやセキュリティインシデント対応の一環になる。
  • logs:単純なエラーログやアクセスログに使用でき、監視やデバッグに役立つ。

3. 接続を検証してサイトの一覧を取得

コーディングの開始前に、目標を明確化するために計画を立てておくことをおすすめします。どのようなエンドポイントを利用できるかを確認し、セキュリティ監視プロセスと組み合わせて、うまくいくように調整しておきます。

例えば、WordPressのコア、テーマ、プラグインが最新バージョンであるかを定期的に確認する方法がほしいとします。これにはsitesエンドポイントが役立ちますが、単に1つのエンドポイントにアクセスしたり、1つのリクエストを行うだけはありません。ここでKinsta APIの柔軟性が発揮されます。

APIへのアクセスを認証し、サイトを取得する簡単なPythonスクリプトをご紹介します。まずはいくつかのコア変数を設定します。わかりやすいように、APIキーと企業IDは含めません。

変数を設定したら認証ヘッダーを設定し、アクセスの検証を行います。3つの短い関数でトークンを検証し、サイト一覧が返され、特定のサイトを取得します。

import requests
import os


# スクリプト内でAPIキーと企業IDを定義
api_token = 'APIキー'
company_id = '企業ID'

# Kinsta APIのベースURLを設定
base_url = 'https://api.kinsta.com/v2'

# 認証用のヘッダーを設定
headers = {
    'Authorization': f'Bearer {api_token}'
}


def validate_token():
    """APIトークンの確認と認証を実行""" 
    url = f'{base_url}/validate'
    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        print('APIトークンが有効です')
    else:
        print('APIトークンが無効です')
        exit(1)


def get_sites():
    """企業IDに基づいたサイトの一覧を取得"""
    url = f'{base_url}/sites?company={company_id}'
    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        data = response.json()
        company_data = data.get('company', {})
        sites = company_data.get('sites', [])
        return sites
    else:
        print(f'サイトの取得に失敗しました。ステータスコード {response.status_code}')
        return None


def get_single_site(site_id):
    """URLテンプレートとレスポンスを受け取り、ステータスコードを確認して、存在すればJSONデータを返す"""
    url = f'{base_url}/sites/{site_id}'
    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        site = response.json()
        return site
    else:
        print(f'サイトの取得に失敗しました。ステータスコード {response.status_code}')
        return None

main関数は、サイト情報を一連の環境変数に送るロジックを使用してこれらの各処理を呼び出します。

def main():
    validate_token()
    sites = get_sites()

    if sites:
        print(f'サイト数:{len(sites)}')
        if len(sites) > 0:
            for site in sites:
                print(f'サイトID: {site["id"]}')
                print(f'サイト名: {site["name"]}')
                print(f'サイトの表示名: {site["display_name"]}')
                print(f'サイトのステータス: {site["status"]}')
                print('サイトのラベル:', site["site_labels"])
                print('---')


                # サイトの詳細を環境変数に保存
                os.environ[f'SITE_ID_{site["name"]}'] = site["id"]
                os.environ[f'SITE_NAME_{site["name"]}'] = site["name"]
                os.environ[f'SITE_DISPLAY_NAME_{site["name"]}'] = site["display_name"]
                os.environ[f'SITE_STATUS_{site["name"]}'] = site["status"]
                os.environ[f'SITE_LABELS_{site["name"]}'] = str(site["site_labels"])


            print('環境変数に保存されているサイト情報')
        else:
            print('サイトが見つかりませんでした')
    else:
        print('サイトの取得に失敗しました')

サイトにアクセスできたら、特定の用途に他のエンドポイントを呼び出すことができます。

4. エンドポイントを組み合わせて継続的なセキュリティ監視を開始

Kinsta APIエンドポイントを使って継続的な自動監視を実現する方法はいくつかあります。たとえば、定期的な間隔でエラーログを取得することは、先回りしたセキュリティ強化策に有用です。

前のステップと同じ認証とサイトの取得から始めます。必要なサイトを取得したら、短い関数でAPIにアクセスし、エラーログを取得します。

def get_error_logs():
    """1,000行までのエラーログを取得"""
    url = f'{base_url}/sites/environments/{company_id}/logs?file_name=error&lines=1000'
    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        logs = response.json()
        return logs
    else:
        print(f'エラーログの取得に失敗しました。ステータスコード {response.status_code}')
        return None

これを自動化するには、パッケージやライブラリを使用します。例えば、Pythonのscheduleパッケージは、一定の間隔でタスクを自動的に実行します。実装するには、ログを出力する別の関数を作り、mainscheduleを使用して呼び出します。

def fetch_and_print_logs():
    """エラーログをチェックし、存在すればスクリーンに表示"""
    logs = get_error_logs()

    if logs:
        print('エラーログ:')
        for log in logs:
            print(log)
        print('---')


# 1日1回、特定の時間にログ取得タスクを実行するように設定
schedule.every().day.at('09:00').do(fetch_and_print_logs)


#main.py
…

    while True:
        schedule.run_pending()
        time.sleep(1)

これはbackupsなどの任意のエンドポイントにも応用できます。工夫次第で、サイトのIPアドレスを自動化し、継続的にブロックするシステムを構築することも可能です。

Kinsta APIとWordPressプラグインを併用する

Kinstaは、MyKinstaとその内部構造にセキュリティを組み込んでいるため、ほぼすべてのセキュリティプラグインのインストールを禁止しています。IPブロックなど、同等の機能を有効にするには、MyKinsta内蔵ツールを使用することができます。

Kinsta APIは、セキュリティ監視や自動化のための基本的な手段を提供しますが、一部プラグインと組み合わせることでさらに効果的に利用することができます。例えば、トラフィックのログを有効にすることはできませんが(高いIOPSを引き起こすため)、Wordfenceプラグインのその他の機能には価値があります。

Wordfenceプラグイン(WordPress.orgより)
Wordfenceプラグイン(WordPress.orgより)

Wordfenceは、IPの認証と設定のインポートのための独自のエンドポイントを複数提供しています。後者は、多くの異なるサイト間で既知の適切な設定を複製したい場合に便利です。しかしWordfence CLIは、Kinsta APIと組み合わせるとより多くの活用方法があります。

今回は割愛しますが、例えばNode.jsを使用して子プロセスを生成し、Pythonスクリプトを実行するなど。

つまり、MyKinstaとWordfenceの機能の両方を実行しながら、タスクを自動化する手段を確立することができます。Sucuri Securityには、サイトスキャンを実行できるシンプルなAPIもあります。

もっと簡単な方法でプラグインを使用することもでき、例えばWP Activity LogはMyKinstaのログ機能を拡張します。サードパーティのプラグインを含め、サイト上で起こるほぼすべてのアクションを記録することができます。

WP Activity Logプラグイン(WordPress.orgより)
WP Activity Logプラグイン(WordPress.orgより)

ただし、Kinsta APIをサイトのプラグインと統合するには、通常プラグインへのAPIアクセスが必要になります。すべてのプラグインにあるわけではないため、場合によっては制限が見られるかもしれません。

WordPressとKinstaを組み合わせたコンプライアンスへの遵守

Kinstaは、コントロール、サブプロセス、およびコンプライアンスを公開する企業として、これらに関連する取り組みについて熟知しています。KinstaはSOC2報告書タイプ2を受領し、GDPR、およびCCPAの基準を満たしています。

Kinstaの信頼性
Kinstaの信頼性

ユーザーの信頼性を向上するには、このような基準を満たしている必要があります。GDPR(EU一般データ保護規則)はあらゆるウェブサイトに影響をあたえる規則で、個人情報の収集、処理、保存方法に関するガイドラインを定めています。CCPA(カリフォルニア州消費者プライバシー法)も同様の法律で、WordPressサイトでは、組み込みのプライバシーポリシーページ、データのエクスポート機能、Cookieに関する通知などの実装により、準拠に取り組むことができます。

金融や医療などの分野では、以下のような法律、基準、ガイドライン、指令の準拠も必要です。

  • 医療保険の携行性と説明責任に関する法律(HIPAA)は、患者の機密性の高い健康情報を保護するための基準を定める。WordPressのアクセス制限とユーザー認証機能、SSL暗号化などの機能が有用
  • Payment Card Industry Data Security Standard(PCI-DSS)は、カード取引を扱うサイト向けのセキュリティ基準で、ECサイトはPCI-DSSの要件に準拠する必要がある。HIPAA同様、サイトの暗号化接続が重要で、二要素認証(2FA)、ファイアウォール、サードパーティの決済ゲートウェイの使用も有用。

Kinstaのインフラストラクチャは、コンプライアンス戦略全体の強固な基盤となり、Kinsta APIはWordPressのAPIと並行して使用することができます。また、サードパーティのツール、サービス、プラグインを使用したファイル整合性の監視などの側面にも目を向けることをお勧めします。

セキュリティとコンプライアンスのためにKinsta APIとWordPressを併用するヒント

最後に、Kinsta APIをWordPressと併用するヒントをご紹介します。サイトのセキュリティ監視とコンプライアンス遵守は、両方を徹底することで最大の効果を得ることができます。

簡単な方法は、APIキーが有効であることを確認するために認証のエンドポイントを使用することです。

const resp = await fetch(
  `https://api.kinsta.com/v2/validate`,
  {
    method: 'GET',
    headers: {
      Authorization: 'Bearer <APIキー>'
    }
  }
);


const data = await resp.text();
console.log(data);

加えて、特にリモートGitリポジトリにコードを保存している場合は、API認証情報を非公開にしたいところ。これらのキーをウェブルートの外に保存し、以下のいずれかを使用することができます。

  • 環境変数(推奨)
  • PHPのラッパー
  • Gitコマンド(git cryptgit-remote-gcryptgit secretなど、リポジトリやファイルへのアクセスを制限し、機密情報を難読化)

APIキーの保護以外にも、Kinsta APIとWordPressをより安全に使用するためにできることは多数あります。

  • 適切なエラー処理とログの実装は、問題の特定とトラブルシューティングに役立ち、セキュリティ監視の信頼性と安定性を高めることができる。
  • ユーザーの役割と権限を割り当てる際には最小特権の原則を使用する。タスクの実行に必要な最低レベルのアクセス権のみをユーザーに付与し、定期的に見直す。

そして何より、最新のセキュリティ強化策を常に追いかけ、最も効果的なものを採用し続けること。テーマやプラグインについても、最近の脆弱性とそれに対処するソフトウェアパッチについても調べておくことが大切です。定期的に更新を行い、Kinsta APIを使ったセキュリティ監視とコンプライアンスへの遵守を自動化することで、堅牢で信頼性の高いセットアップを確立できます。

まとめ

Kinstaでは、強力で安定した安全なホスティングを提供していますが、お客様自身がサイトのセキュリティを監視することも重要です。すべてのWordPressサイトにとって、継続的なセキュリティ監視は欠かせません。

Kinsta APIを使用すると、ログへのアクセス、IPブロックリストの管理など、多くのタスクを自動化することができます。APIアクセスを提供する一部WordPressプラグインでは、サーバーよりもはるかに多くのことを自動化できます。セキュリティとコンプライアンスに関連するタスクを自動化することで、サイトと訪問者の安全を確保しながら、安心してその他のビジネスクリティカルな側面に取り組むことができます。

Jeremy Holcombe Kinsta

Content & Marketing Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems ;).