CloudflareのAPI

Cloudflareは本日、Cloudflare APIで使用するスケーラブルで安全性の高いAPIトークンの一般提供を発表します。Cloudflareは、より良いインターネットの実現を目指し、エッジにおける顧客のプレゼンスの管理の簡素化に努めています。その方法の1つが、当社のすべての製品とサービスをAPIで構成可能にすることです。パートナーから企業、開発者まで、さまざまなお客様がCloudflareの管理を自動化したいと考えています。自動化は、APIを直接経由して行われる場合と、当社も維持に関わっているTerraform providerCloudflare-Go libraryなどのオープンソースソフトウェアを経由する場合があります。Cloudflareの管理を自動化されるお客様にとって、Cloudflareサービスを可能な限りセキュアに維持できることが重要です。

最低限の権限とそれが重要な理由

ソフトウェアシステムのセキュリティ保護は困難な仕事です。ソフトウェアの実行範囲を制限することは、間違いや悪意ある行為による影響の拡大を防ぐ良い防御法です。最小権限の原則は、任意のシステムで動作を実行するために必要なアクセス数の指針として役立ちます。これはJerome Saltzerが提唱した、「すべてのプログラムとシステムのすべての権限を持つユーザーが行使する権限は、ジョブ実行のために必要な最小数でなければならない」という原則です。 Cloudflareの場合は、多くのお客様が様々なドメインを持ち、多様なサービスを活用してトラフィックをルーティングしています。悪意ある人がシステムに不正にアクセスした場合、この人はシステムが持つ全てのアクセスを利用することができ、さらなる損害や情報盗難につながります。

APIトークンの機能が、この最小権限の原則にどのようにあてはまるのかを見ていきましょう。

APIトークンについて

APIトークンには、主に次の3つの機能があります。

  1. CloudflareのリソースによるAPIトークンのスコープ設定
  2. アクセス許可によるAPIトークンのスコープ設定
  3. 複数のAPIトークンのプロビジョニング

これらの各機能について、細かく説明します。

CloudflareのリソースによるAPIトークンのスコープ設定

Cloudflareは、通常ドメインに対応するゾーン単位でサービスの構成を分割します。さらに、一部のお客様は、それぞれ多数のゾーンを持つ複数のアカウントを持っています。APIにサービスへのアクセスを許可する際には、今あるジョブに関連するアカウントのリソースおよびゾーンにのみアクセスできるようにすることが重要です。APIトークンは、特定のアカウントと特定のゾーンのみを対象とするようスコープを設定することができます。一般的なユースケースとしては、ステージングゾーンと実運用ゾーンがある場合、APIトークンはステージングゾーンにのみ影響して実運用ゾーンにはアクセスしないよう制限することができます。

アクセス許可によるAPIトークンのスコープ設定

APIトークンを特定のゾーンのみにスコープ設定できるのは良いことですが、1つのゾーンには、ファイアウォールルールやページルール、ロードバランサーその他、多数の設定可能な異なるサービスが入っています。お客様のサービスが、トラフィックのパターンに応じた新しいファイアウォールルールのみを作成可能なサービスの場合、そのサービスにDNSレコードの変更も許可すると、最小権限の原則に反することになります。APIトークンを使用すると、各トークンのスコープを特定のアクセス許可に設定できます。複数のアクセス許可を組み合わせて、特定のユースケースに合わせたカスタムトークンを作成することができます。

複数のAPIトークン

複数のサービスの保護や高速化にCloudflareを使用する場合、CloudflareのAPIの変更は、異なるサーバーやVM、コンテナ、workerから行うことになります。サービスごとにAPIトークンを作成できるということは、各サービスは互いの変更に対して隔離された関係にあることを意味します。1つのAPIトークンがリークしたりローリングが必要になった場合にも、他のサービスのAPIトークンには影響しません。また、前述の機能は、各サービスに必要なアクションとリソースを正確にスコープ設定できることを意味します。これによりお客様は、APIによってCloudflareにアクセスする際に最小権限をより正しく実践することができます。

次に、APIトークンの作成および使用方法について説明します。

APIトークンの使用

最初のAPIトークンを作成するには、次のユーザープロファイルの、「API Tokens」セクションに移動します。dash.cloudflare.com/profile/api-tokens

1.このページには、グローバルAPIキーとオリジンのCAのキーに加え、すべてのAPIトークンのリストも表示されます。

APIトークンの使い方 - トークンの作成

最初のAPIトークンを作成するには、「Create Token(トークンの作成)」を選択します。


2.作成画面には、トークンを作成する方法が2つあります。「Custom(カスタム)」オプションを使用して最初から作成することも、「Start with a template(テンプレートから開始)」を選択して定義済みのテンプレートから開始することもできます。

APIトークンテンプレートの選択

この場合、「Edit zone DNS(ゾーンDNSの編集)」テンプレートを使用して、単一ゾーンのDNSレコードを編集できるAPIトークンを作成します。


3.テンプレートを選択したら、スコープを設定するAPIトークンのゾーンを選択する必要があります。DNS編集権限が既に事前に選択されていることにご留意ください。

トークンがDNSを制御できるゾーンの指定

この場合、APIトークンがDNSレコードを編集できるCloudflareゾーンとして「garrettgalow.com」が選択されています。


4.サマリーに進むを選択すると、選択内容を確認する機会が与えられます。この場合、リソースとアクセス許可はきわめて単純ですが、ここで作成前にAPIトークンに正しい数の権限を与えていることを確認することができます。

トークンの概要 - 確認

5.作成されると、APIトークンが表示されます。この画面にしか表示されませんので、必ず安全な場所にこのシークレット情報を保管するようにしてください。このシークレットを持っている人は、リソースに許可されている操作を実行できるため、パスワード同様に保護してください。次のスクリーンショットでは、当然ながらシークレットは黒塗りにしています。このシークレットをうっかり紛失した場合でも、APIトークンテーブルから再生成することができますので、再度すべての許可を設定する必要はありません。

トークンシークレットを使用したトークン作成の完了画面

シークレットに加えて、この画面には、トークンが正常に作成されたことを確認するために使用できる、curl要求の例が表示されます。また、直接HTTP要求に対してトークンを使用する方法の例も示されます。APIトークンは、RFC Authorization Bearer標準に基づいています。このAPIを呼び出すと、トークンが有効でアクティブであることを示す正常な応答が表示されます。

~$ curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
>      -H "Authorization: Bearer vh9awGupxxxxxxxxxxxxxxxxxxx" \
>      -H "Content-Type:application/json" | jq

{
  "result": {
    "id": "ad599f2b67cdccf24a160f5dcd7bc57b",
    "status": "active"
  },
  "success": true,
  "errors": [],
  "messages": [
    {
      "code": 10000,
      "message": "This API Token is valid and active",
      "type": null
    }
  ]
}

今後の予定

Cloudflare APIを使用しているユーザーには、前身のAPIキーからAPIトークン使用に移行されることをおすすめします。今回の発表をもって、当社はTerraformプロバイダーCloudflare-Goライブラリ、およびWordPressプラグインをすべて、APIトークン互換にアップデートします。他のライブラリにも間もなく更新が届きます。お客様が安全に移行できるように、APIトークンとAPIキーの両方が当分サポートされます。APIトークンには、トークン使用手順や使用時の安全性をより強化するための機能の追加を予定していますので、今後の発表にご期待ください。

ご意見や、APIのセキュリティに今後期待されることなど、Cloudflareコミュニティまでお寄せください。