← Cloudflare Fundamentals / fundamentals / api / how-to
Создание токенов через API
Создавайте новые API-токены на лету прямо через API. Прежде чем это станет возможным, создайте в панели управления Cloudflare API-токен, который сможет создавать последующие токены.
Создание первоначального токена
Прежде чем использовать API, вам нужно создать первоначальный токен через панель управления Cloudflare. Необходимое разрешение зависит от операции API. Чтобы предоставить пользователям доступ к учётной записи в качестве участников, создайте токен с Аккаунт > Account Settings > Изменить. Чтобы создать токены API уровня аккаунта, создайте токен с помощью Аккаунт > Токены API аккаунта > Изменить. Чтобы создать токены API уровня пользователя, используйте Создание дополнительных токенов шаблон.
Рекомендации
При использовании Создание дополнительных токенов шаблон, Cloudflare настоятельно рекомендует не предоставлять токену дополнительные права. Обязательно защитите новый токен, поскольку с его помощью можно создавать токены с доступом к любым ресурсам пользователя.
Cloudflare также рекомендует ограничивать использование токена с помощью фильтрации по IP-адресу клиента или TTL, чтобы снизить риск злоупотребления в случае компрометации токена. См. Ограничение использования токена, где это описано подробнее.
Создание API-токенов через API
Вы можете создать для работы с API токен, принадлежащий пользователю, или токен, принадлежащий учётной записи. См. токен, принадлежащий пользователю или токен, принадлежащий аккаунту документацию по схеме API, чтобы узнать больше.
Чтобы создать токен:
- Определите политику.
- Определите ограничения.
- Создайте токен.
1. Определите политику Access
Access Policy определяет, к каким ресурсам может обращаться токен и какие права у него есть на эти ресурсы. Этот процесс похож на то, как вы создание токенов в панели управления 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 |
Определяет, разрешает эта политика доступ или запрещает его. Если вы создаёте только одну политику, используйте allow. Порядок применения политик следующий: 1. Явные DENY политики; 2. Явные ALLOW политики; 3. Неявные DENY ALL. |
resources |
Определяет, какие ресурсы разрешено настраивать. |
permission_groups |
Определяет, какие разрешения политика предоставляет для включённых ресурсов. |
Материалы
Политики API-токенов поддерживают три типа ресурсов: User, Account, а также Zone.
Аккаунт
Включите в политику токена одну учетную запись или все учетные записи.
- одна учётная запись обозначается как:
"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.*": "*"
Пользователь
Для пользовательских ресурсов можно ссылаться только на самого себя, это обозначается так:"com.cloudflare.api.user.<USER_TAG>": "*"
Группы разрешений
Добавьте группы разрешений в API-токен, указав их id значений. Мы рекомендуем использовать id в качестве ключа для взаимодействия с Cloudflare API, при этом право доступа name носит косметический характер и может измениться. Группы разрешений привязаны к конкретным ресурсам (пользователь, аккаунт или зона), поэтому группа разрешений в политике применяется только к тому типу ресурса, для которого она предназначена.
Чтобы получить все доступные группы разрешений и их ID, используйте Список групп разрешений конечная точка:
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется: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"
]
},
// (...)
]
}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"]
}
}Каждый параметр в in и not_in объекты должны быть указаны в нотации CIDR. Например, используйте 192.168.0.1/32 чтобы указать один IP-адрес.
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"
]
}
}
}'