Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

API でトークンを作成する

最終更新 Markdown で表示Agent セットアップ

API 経由で、その場で新しい API トークンを生成できます。その前に、後続トークンを作成できる API トークンを Cloudflare ダッシュボードで作成する必要があります。

最初のトークンを生成する

API を使う前に、Cloudflare ダッシュボードで 最初のトークンを生成 する必要があります。必要な権限は API 操作によって異なります。利用者をメンバーとしてアカウントに追加するには、Account > Account Settings > Edit のトークンを作成します。アカウント所有の API トークンを作成するには、Account > Account API Tokens > Edit のトークンを作成します。ユーザー所有の API トークンを作成するには、Create additional tokens テンプレートを使います。

推奨事項

Create additional tokens テンプレートを使う場合、そのトークンにほかの権限を付与しないことを強く推奨します。新しいトークンは、ユーザーの任意のリソースにアクセスできるトークンを作成できるため、適切に保管してください。

トークンが漏洩した場合の悪用リスクを下げるため、クライアント IP アドレスのフィルタリングまたは TTL でトークンの利用を制限することも推奨します。詳細は トークンの利用を制限する を参照してください。

API で API トークンを作成する

API で使うトークンとして、ユーザー所有トークンまたはアカウント所有トークンを作成できます。詳細は ユーザー所有トークン または アカウント所有トークン の API スキーマドキュメントを参照してください。

トークンを作成する手順は次のとおりです。

  1. ポリシーを定義します。
  2. 制限を定義します。
  3. トークンを作成します。

1. アクセスポリシーを定義する

アクセスポリシーは、トークンが操作できるリソースと、それらのリソースに対する権限を定義します。手順は Cloudflare ダッシュボードでトークンを作成する 場合と似ています。

各トークンには複数のポリシーを含められます。

[
	{
		"id": "f267e341f3dd4697bd3b9f71dd96247f",
		"effect": "allow",
		"resources": {
			"com.cloudflare.api.account.zone.eb78d65290b24279ba6f44721b3ea3c4": "*",
			"com.cloudflare.api.account.zone.22b1de5f1c0e4b3ea97bb1e963b06a43": "*"
		},
		"permission_groups": [
			{
				"id": "c8fed203ed3043cba015a93ad1616f1f",
				"name": "Zone Read"
			},
			{
				"id": "82e64a83756745bbbb1c9c2701bf816b",
				"name": "DNS Read"
			}
		]
	}
]
フィールド 説明
id 作成後に生成される、ポリシーの一意な読み取り専用識別子です。
effect このポリシーがアクセスを許可するか拒否するかを定義します。ポリシーが 1 つだけの場合は allow を使います。ポリシーの評価順は次のとおりです。1. 明示的な DENY ポリシー、2. 明示的な ALLOW ポリシー、3. 暗黙の DENY ALL
resources 設定を許可するリソースを定義します。
permission_groups 含めたリソースに対して、ポリシーが付与する権限を定義します。

リソース

API トークンポリシーは、UserAccountZone の 3 つのリソースタイプに対応します。

Account

トークンポリシーには、単一アカウントまたは全アカウントを含められます。

  • 単一アカウント は次のように表します:"com.cloudflare.api.account.<ACCOUNT_ID>": "*"
  • 全アカウント は次のように表します:"com.cloudflare.api.account.*": "*"
Zone

トークンポリシーには、単一ゾーンアカウント内の全ゾーン、または 全アカウントの全ゾーン を含められます。

  • 単一ゾーン は次のように表します:"com.cloudflare.api.account.zone.<ZONE_ID>": "*"
  • アカウント内の全ゾーン は次のように表します:"com.cloudflare.api.account.<ACCOUNT_ID>": {"com.cloudflare.api.account.zone.*": "*"}
  • 全アカウントの全ゾーン は次のように表します:"com.cloudflare.api.account.zone.*": "*"
User

ユーザーリソースでは自分自身のみを参照できます。次のように表します:"com.cloudflare.api.user.<USER_TAG>": "*"

権限グループ(permission groups)

id を指定して、API トークンに permission group を追加します。Cloudflare API では id をキーとして使うことを推奨します。権限の name は表示用で、変更されることがあります。permission group は特定のリソース(user、account、zone)にスコープされます。ポリシー内の permission group は、スコープ対象のリソースタイプにのみ適用されます。

利用できるすべての permission group と ID を取得するには、List permission groups エンドポイントを使います。

Required API token permissions

At least one of the following token permissions is required:
  • API Tokens Write
  • API Tokens Read
List Token Permission Groupsbash
curl "https://api.cloudflare.com/client/v4/user/tokens/permission_groups" \
	--request GET \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
{
  "result": [
    {
      "id": "19637fbb73d242c0a92845d8db0b95b1",
      "name": "AI Crawl Control Read",
      "description": "Grants access to reading AI Crawl Control",
      "scopes": [
        "com.cloudflare.api.account.zone"
      ]
    },
    {
      "id": "1ba6ab4cacdb454b913bbb93e1b8cb8c",
      "name": "AI Crawl Control Write",
      "description": "Grants access to reading and editing AI Crawl Control",
      "scopes": [
        "com.cloudflare.api.account.zone"
      ]
    },
    // (...)
	]
}

2. 制限を定義する

トークンの使い方に制限を設けます。API トークンでは、クライアント IP アドレスのフィルタリングと TTL を制限できます。詳細は トークンの利用を制限する を参照してください。

TTL を定義するときは、not_before でトークンが有効になる時刻を、expires_on で期限切れになる時刻を設定できます。どちらのフィールドも、次の形式の UTC タイムスタンプを取ります。"2018-07-01T05:20:00Z"

次のオブジェクトで、クライアント IP アドレスフィルターによりトークンの利用を制限します。

{
	"request.ip": {
		"in": ["199.27.128.0/21", "2400:cb00::/32"],
		"not_in": ["199.27.128.0/21", "2400:cb00::/32"]
	}
}

innot_in の各パラメーターは CIDR 表記である必要があります。たとえば、単一の IP アドレスを指定するには 192.168.0.1/32 を使います。

3. トークンを作成する

これまでの情報を組み合わせて、次の例のようにトークンを作成します。

curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/tokens" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "name": "readonly token",
  "policies": [
    {
      "effect": "allow",
      "resources": {
        "com.cloudflare.api.account.zone.eb78d65290b24279ba6f44721b3ea3c4": "*",
        "com.cloudflare.api.account.zone.22b1de5f1c0e4b3ea97bb1e963b06a43": "*"
      },
      "permission_groups": [
        {
          "id": "c8fed203ed3043cba015a93ad1616f1f",
          "name": "Zone Read"
        },
        {
          "id": "82e64a83756745bbbb1c9c2701bf816b",
          "name": "DNS Read"
        }
      ]
    }
  ],
  "not_before": "2020-04-01T05:20:00Z",
  "expires_on": "2020-04-10T00:00:00Z",
  "condition": {
    "request.ip": {
      "in": [
        "199.27.128.0/21",
        "2400:cb00::/32"
      ],
      "not_in": [
        "199.27.128.1/32"
      ]
    }
  }
}'
curl "https://api.cloudflare.com/client/v4/user/tokens" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "name": "readonly token",
  "policies": [
    {
      "effect": "allow",
      "resources": {
        "com.cloudflare.api.account.zone.eb78d65290b24279ba6f44721b3ea3c4": "*",
        "com.cloudflare.api.account.zone.22b1de5f1c0e4b3ea97bb1e963b06a43": "*"
      },
      "permission_groups": [
        {
          "id": "c8fed203ed3043cba015a93ad1616f1f",
          "name": "Zone Read"
        },
        {
          "id": "82e64a83756745bbbb1c9c2701bf816b",
          "name": "DNS Read"
        }
      ]
    }
  ],
  "not_before": "2020-04-01T05:20:00Z",
  "expires_on": "2020-04-10T00:00:00Z",
  "condition": {
    "request.ip": {
      "in": [
        "199.27.128.0/21",
        "2400:cb00::/32"
      ],
      "not_in": [
        "199.27.128.1/32"
      ]
    }
  }
}'
curl "https://api.cloudflare.com/client/v4/user/tokens" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "name": "readonly token",
  "policies": [
    {
      "effect": "allow",
      "resources": {
        "com.cloudflare.api.account.zone.eb78d65290b24279ba6f44721b3ea3c4": "*",
        "com.cloudflare.api.account.zone.22b1de5f1c0e4b3ea97bb1e963b06a43": "*"
      },
      "permission_groups": [
        {
          "id": "c8fed203ed3043cba015a93ad1616f1f",
          "name": "Zone Read"
        },
        {
          "id": "82e64a83756745bbbb1c9c2701bf816b",
          "name": "DNS Read"
        }
      ]
    }
  ],
  "not_before": "2020-04-01T05:20:00Z",
  "expires_on": "2020-04-10T00:00:00Z",
  "condition": {
    "request.ip": {
      "in": [
        "199.27.128.0/21",
        "2400:cb00::/32"
      ],
      "not_in": [
        "199.27.128.1/32"
      ]
    }
  }
}'

役に立ちましたか?