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 スキーマドキュメントを参照してください。
トークンを作成する手順は次のとおりです。
- ポリシーを定義します。
- 制限を定義します。
- トークンを作成します。
アクセスポリシーは、トークンが操作できるリソースと、それらのリソースに対する権限を定義します。手順は 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 トークンポリシーは、User、Account、Zone の 3 つのリソースタイプに対応します。
トークンポリシーには、単一アカウントまたは全アカウントを含められます。
- 単一アカウント は次のように表します:
"com.cloudflare.api.account.<ACCOUNT_ID>": "*"。 - 全アカウント は次のように表します:
"com.cloudflare.api.account.*": "*"
トークンポリシーには、単一ゾーン、アカウント内の全ゾーン、または 全アカウントの全ゾーン を含められます。
- 単一ゾーン は次のように表します:
"com.cloudflare.api.account.zone.<ZONE_ID>": "*" - アカウント内の全ゾーン は次のように表します:
"com.cloudflare.api.account.<ACCOUNT_ID>": {"com.cloudflare.api.account.zone.*": "*"} - 全アカウントの全ゾーン は次のように表します:
"com.cloudflare.api.account.zone.*": "*"
ユーザーリソースでは自分自身のみを参照できます。次のように表します:"com.cloudflare.api.user.<USER_TAG>": "*"
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 WriteAPI Tokens Read
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"
]
},
// (...)
]
}トークンの使い方に制限を設けます。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"]
}
}in と not_in の各パラメーターは CIDR 表記である必要があります。たとえば、単一の IP アドレスを指定するには 192.168.0.1/32 を使います。
これまでの情報を組み合わせて、次の例のようにトークンを作成します。
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"
]
}
}
}'