מדריך קלאודפלייר בעברית

תיעוד 16

יצירת אסימונים דרך API

יצירת אסימוני API חדשים בזמן אמת דרך ה-API. לפני שניתן לעשות זאת, יש ליצור אסימון API בלוח הבקרה של Cloudflare שיכול ליצור אסימונים נוספים.

הערה

כדי ליצור אסימוני API בבעלות משתמש, השתמשו בתבנית Create additional tokens. ההרשאה User > API Tokens > Edit אינה זמינה באף תבנית אחרת או בבונה Custom Token.

#יצירת האסימון הראשוני

לפני שניתן להשתמש ב-API, יש ליצור אסימון ראשוני דרך לוח הבקרה של Cloudflare. ההרשאה הנדרשת תלויה בפעולת ה-API. כדי להעניק למשתמשים גישה לחשבון כחברים, צרו אסימון עם Account > Account Settings > Edit. כדי ליצור אסימוני API בבעלות חשבון, צרו אסימון עם Account > Account API Tokens > Edit. כדי ליצור אסימוני API בבעלות משתמש, השתמשו בתבנית Create additional tokens.

אזהרה

סוד האסימון מוצג פעם אחת בלבד. אל תשמרו את הסוד בטקסט גלוי במקום שאחרים יכולים לגשת אליו. כל מי שיש לו אסימון זה יכול לבצע את הפעולות המורשות מול המשאבים שיש לאסימון גישה אליהם.

#המלצות

בעת שימוש בתבנית Create additional tokens, Cloudflare ממליצה מאוד לא להעניק לאסימון הרשאות אחרות. ודאו שאתם שומרים על האסימון החדש כי הוא יכול ליצור אסימונים עם גישה לכל משאבי המשתמש.

Cloudflare גם ממליצה להגביל את השימוש באסימון באמצעות סינון כתובות IP של הלקוח או TTL כדי להפחית את הפוטנציאל לשימוש לרעה במקרה שהאסימון נחשף. עיינו ב-Restrict token use למידע נוסף.

#יצירת אסימוני API עם ה-API

ניתן ליצור אסימון בבעלות משתמש או אסימון בבעלות חשבון לשימוש עם ה-API. עיינו במסמכי סכימת ה-API של user owned token או של account owned token למידע נוסף.

כדי ליצור אסימון:

  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מגדיר אם המדיניות מאפשרת או שוללת גישה. אם יוצרים מדיניות אחת בלבד, השתמשו ב-allow. סדר ההערכה של המדיניות הוא כדלקמן: 1. מדיניות DENY מפורשת; 2. מדיניות ALLOW מפורשת; 3. DENY ALL מרומז.
resourcesמגדיר אילו משאבים מותר להגדיר.
permission_groupsמגדיר אילו הרשאות המדיניות מעניקה למשאבים הכלולים.

#משאבים

מדיניות של אסימון API תומכת בשלושה סוגי משאבים: User, Account, ו-Zone.

הערה

קבלו את מזהה כל אובייקט על ידי קריאה ל-API המתאים GET <object>. עיינו בתיעוד של User, Account, ו-Zone לפרטים נוספים.

#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>": "*"

#קבוצות הרשאות

הוסיפו קבוצות הרשאות לאסימון ה-API על ידי ציון ערכי ה-id שלהן. אנו ממליצים להשתמש ב-id כמפתח לאינטראקציה עם ממשקי ה-API של Cloudflare; ה-name של ההרשאה הוא קוסמטי ונתון לשינוי. קבוצות הרשאות מוגבלות למשאבים ספציפיים (user, account, או zone), ולכן קבוצת הרשאות במדיניות תחול רק על סוג המשאב שהיא מוגבלת אליו.

השתמשו בנקודת הקצה permission-group לסוג האסימון שברצונכם ליצור:

השתמשו בנקודת הקצה List permission groups. כדי לסייע לוודא שאתם מוסיפים רק קבוצות הרשאות הזמינות דרך מדיניות החברות שלכם, עיינו בפרמטר is_selectable הקיים בכל קבוצת הרשאות.

הרשאות אסימון API נדרשות

נדרשת לפחות אחת מההרשאות הבאות של token permissions:

  • Account API Tokens Write
  • Account API Tokens Read

List Permission Groupsbash

curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/tokens/permission_groups" \
	--request GET \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

השתמשו בנקודת הקצה List permission groups.

הרשאות אסימון API נדרשות

נדרשת לפחות אחת מההרשאות הבאות של token permissions:

  • 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. עיינו ב-Restrict token use למידע נוסף.

בעת הגדרת 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"
      ]
    }
  }
}'