User Groups は、アクセス制御の観点で同等に扱う アカウントメンバー の集まりです。User Groups には権限ポリシーを割り当てられ、グループ内の各メンバーは、その User Group に割り当てたロールの権限をすべて受け取ります。メンバーに個別の権限もある場合、実効権限は個別権限と、所属するすべての User Groups の権限の和集合になります。
-
Cloudflare ダッシュボードで Members ページを開きます。
Members を開く ↗ -
Groups タブを選びます。
-
Create a Group を選び、新しいグループの名前と説明を入力します。
-
Create group を選び、変更を確定します。Group members タブが表示されます。
-
Add members を選びます。
-
グループに含めるメンバーを選び、Add to Group を選びます。
グループを作成したら、Permission Policy をグループに追加できます。
- Groups タブの Permission policies で Add a Policy を選びます。
- グループのメンバーに適用するスコープと権限を指定します。
- Create Policy を選び、グループに適用します。
前のセクションのロール識別子を使い、グループの権限ポリシーを作成できます。
export ADMIN_ROLE='...' # id field from admin or desired role entry from permission_groups API response
$ cat <<-PAYLOAD | curl -XPUT -H "Authorization: Bearer $AOT" -H "Content-type: application/json" --data-binary @- https://api.cloudflare.com/client/v4/accounts/$ACCT/iam/user_groups/$PUSHED_GROUP | jq .
{
"policies": [
{
"access": "allow",
"permission_groups": [{"id": "$ADMIN_ROLE"}],
"resource_groups": [{
"scope": {
"key": "com.cloudflare.api.account.$ACCT",
"objects": [{"key":"*"}]
}
}]
}
]
}
PAYLOADポリシーを空の状態にリセットする
グループポリシーの作成時に誤りがあった場合や、ポリシーを空の状態に戻す必要がある場合は、空のポリシー配列を付けてグループ API に再度 PUT リクエストを送り、新しいポリシーで上書きします。
$ cat <<-PAYLOAD | curl -XPUT -H "Authorization: Bearer $AOT" -H "Content-type: application/json" --data-binary @- https://api.cloudflare.com/client/v4/accounts/$ACCT/iam/user_groups/$PUSHED_GROUP | jq .
{
"policies": []
}
PAYLOADSCIM 連携を設定している場合は、上流の Identity Provider から User Groups を Cloudflare に同期できます。Cloudflare の SCIM 連携では、アカウントごとに外部アプリケーションが 1 つ必要です。
User Group を SCIM で設定するには、SCIM によるプロビジョニングガイド を参照してください。
ダッシュボードで手動作成した場合も、SCIM 連携で作成した場合も、最後に権限を割り当てます。
- Manage members > Members > User groups を開きます。
- 権限を割り当てるユーザーグループを選びます。
- Permission policies タブを開き、Add policy を選びます。
- ポリシーに適用するスコープとロールを選びます。
- Save を選び、ポリシーを適用します。
開始する前に、内部で作成したグループ、または Cloudflare にプッシュ済みのグループを、次のコマンドで確認します。
1. ユーザーグループを取得する
$ curl -X GET -H "Authorization: Bearer $AOT" https://api.cloudflare.com/client/v4/accounts/$ACCT/iam/user_groups | jq .{
"errors": [],
"messages": [],
"result": [
{
"created_on": "2025-01-24T15:31:36.759979Z",
"id": "f234f49f66df4db8864c5189fe78c87f",
"modified_on": "2025-01-24T15:35:50.151764Z",
"name": "My Cool Demo Group",
"status": "V"
},
{
"created_on": "2025-01-16T20:43:01.019311Z",
"id": "7148c1e4d9f247f5b6dcd3ef20f998f9",
"modified_on": "2025-01-16T20:44:07.627233Z",
"name": "My Cool Demo Group, now with policies!",
"policies": [
{
"access": "allow",
"created_on": "2025-01-16T20:44:07.627233Z",
"id": "8d82cf8c15c64e07a4bee58e00d80bca",
"modified_on": "2025-01-16T20:44:07.627233Z",
"permission_groups": [
{
"created_on": "2023-06-21T18:58:29.907496Z",
"id": "a1a099e3256942259bfde18c688b67d5",
"meta": {
"description": "Grants write access to Page Shield for domain",
"editable": "false",
"label": "domain_page_shield",
"scopes": "com.cloudflare.api.account.zone"
},
"modified_on": "2023-06-21T18:58:29.907496Z",
"name": "Domain Page Shield",
"permissions": ["dev note: snipped for length"],
"status": "V"
}
],
"resource_groups": [
{
"created_on": "2025-01-16T20:44:07.627233Z",
"modified_on": "2025-01-16T20:44:07.627233Z",
"scope": {
"key": "com.cloudflare.api.account.a3324a084cd290080b563ab39c91545a",
"objects": [
{
"key": "*"
}
]
}
}
],
"status": "V"
}
],
"status": "V"
}
],
"result_info": {
"count": 2,
"page": 1,
"per_page": 100,
"total_count": 2,
"total_pages": 1
},
"success": true
}2. リソース ID に対してクエリする
IdP からプッシュしたグループのタグを特定し、そのリソース ID に対して直接クエリします。
export PUSHED_GROUP='...' # Pull this value from the "id" json field in the group list response
$ curl -XGET -H "Authorization: Bearer $AOT" https://api.cloudflare.com/client/v4/accounts/$ACCT/iam/user_groups/$PUSHED_GROUP | jq .レスポンスには、Identity Provider で指定したグループ名が含まれ、ポリシーは付いていない状態になります。
3. 利用可能な permission groups を確認する
グループのポリシーを変更する前に、アカウントの API をクエリして、利用可能な permission groups(ロール)を確認します。
$ curl -XGET -H "Authorization: Bearer $DEMO_AOT" https://api.cloudflare.com/client/v4/accounts/$ACCT/iam/permission_groups | jq .{
"result": [
{
"id": "1a0fc8bdeae24387b64d5b8de1ad052a",
"name": "Administrator Read Only",
"status": "V",
"meta": {
"description": "Can access the full account in read-only mode.",
"editable": "false",
"label": "admin_readonly",
"scopes": "com.cloudflare.api.account"
},
"created_on": "2020-07-06T12:19:13.099114Z",
"modified_on": "2020-10-13T11:18:00.208228Z"
},
{
"id": "ce2c69b09baf4ca38223910a8b7e07a9",
"name": "Administrator",
"status": "V",
"meta": {
"description": "Can access the full account, except for membership management and billing.",
"editable": "false",
"label": "admin",
"scopes": "com.cloudflare.api.account"
},
"created_on": "2020-07-06T12:19:13.099114Z",
"modified_on": "2020-10-13T11:18:00.208228Z"
}
],
"success": true,
"errors": [],
"messages": []
}SCIM 操作でプッシュしたグループとユーザーメンバーが IdP から同期されていることを確認するには、Group Members API をクエリします。
$ curl -XGET -H "Authorization: Bearer $DEMO_AOT" https://api.cloudflare.com/client/v4/accounts/$ACCT/iam/user_groups/$PUSHED_GROUP/members | jq .{
"result": [
{
"id": "a4366a09c43a0b0c4606dc5528472bb6",
"email": "[email protected]"
},
{
"id": "0329c17f6c13f5202dc38d2036efb1a9",
"email": "[email protected]"
}
],
"result_info": {
"page": 1,
"per_page": 100,
"total_pages": 1,
"count": 2,
"total_count": 2
},
"success": true,
"errors": [],
"messages": []
}