Примеры кода

Приведенные ниже запросы иллюстрируют управление политиками с помощью Policy API. Прежде чем начать, обязательно ознакомьтесь с обзором Chrome Policy API , чтобы получить общее описание функций этого API.

Все запросы, представленные ниже, используют следующие переменные:

  • $TOKEN — токен OAuth 2.
  • $CUSTOMER - Идентификатор клиента или буквальный my_customer

Получение списка схем для политик принтеров

Чтобы составить список схем, которые касаются только политик для принтеров, мы применим параметр filter к запросу списка службы схем. Вы можете управлять нумерацией страниц результата, используя параметры pageSize и pageToken .

Запрос

  curl -X GET \
  -H "Authorization: Bearer $TOKEN" \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policySchemas?filter=chrome.printers&pageSize=2"

Ответ

{
  "policySchemas": [
    {
      "name": "customers/C0202nabg/policySchemas/chrome.printers.AllowForUsers",
      "policyDescription": "Allows a printer for users in a given organization.",
      "additionalTargetKeyNames": [
        {
          "key": "printer_id",
          "keyDescription": "Id of printer as visible in Admin SDK printers API."
        }
      ],
      "definition": {
        "messageType": [
          {
            "name": "AllowForUsers",
            "field": [
              {
                "name": "allowForUsers",
                "number": 1,
                "label": "LABEL_OPTIONAL",
                "type": "TYPE_BOOL"
              }
            ]
          }
        ]
      },
      "fieldDescriptions": [
        {
          "field": "allowForUsers",
          "description": "Controls whether a printer is allowed for users in a given organization."
        }
      ],
      "schemaName": "chrome.printers.AllowForUsers"
    },
    {
      "name": "customers/C0202nabg/policySchemas/chrome.printers.AllowForDevices",
      "policyDescription": "Allows a printer for devices in a given organization.",
      "additionalTargetKeyNames": [
        {
          "key": "printer_id",
          "keyDescription": "Id of printer as visible in Admin SDK printers API."
        }
      ],
      "definition": {
        "messageType": [
          {
            "name": "AllowForDevices",
            "field": [
              {
                "name": "allowForDevices",
                "number": 1,
                "label": "LABEL_OPTIONAL",
                "type": "TYPE_BOOL"
              }
            ]
          }
        ]
      },
      "fieldDescriptions": [
        {
          "field": "allowForDevices",
          "description": "Controls whether a printer is allowed for devices in a given organization."
        }
      ],
      "schemaName": "chrome.printers.AllowForDevices"
    }
  ],
  "nextPageToken": "AEbDN_obE8A98T8YhIeU9VCIZhEBylLBwZRQpGu_DUug-mU4bnzcDx30UnO2xMuuImvfVpmeuXRF6VhJ4OmZpZ4H6EaRvu2qMOPxVN_u"
}

Поиск схем

Вы можете создавать сложные поисковые запросы, используя параметр filter= в запросе списка службы схемы. Например, если вы хотите найти схемы, в названии которых есть слово «принтер», а в описании — слово «устройства», вы можете применить следующее значение к фильтру name=printers AND description=devices .

Узнайте, как составить список схем политики .

Запрос

  curl -X GET \
  -H "Authorization: Bearer $TOKEN" \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policySchemas?filter=name=printers%20AND%20description=devices"

Ответ

{
  "policySchemas": [
    {
      "name": "customers/C0202nabg/policySchemas/chrome.printers.AllowForDevices",
      "policyDescription": "Allows a printer for devices in a given organization.",
      "additionalTargetKeyNames": [
        {
          "key": "printer_id",
          "keyDescription": "Id of printer as visible in Admin SDK printers API."
        }
      ],
      "definition": {
        "messageType": [
          {
            "name": "AllowForDevices",
            "field": [
              {
                "name": "allowForDevices",
                "number": 1,
                "label": "LABEL_OPTIONAL",
                "type": "TYPE_BOOL"
              }
            ]
          }
        ]
      },
      "fieldDescriptions": [
        {
          "field": "allowForDevices",
          "description": "Controls whether a printer is allowed for devices in a given organization."
        }
      ],
      "schemaName": "chrome.printers.AllowForDevices"
    }
  ]
}

Получить конкретную схему

В приведенном выше результате мы видим список поддерживаемых схем политик. Каждая схема имеет поле name , которое идентифицирует схему. В будущем, когда вы узнаете имя схемы, вы сможете прочитать конкретную схему напрямую, ссылаясь на имя схемы в URL-адресе запроса.

Давайте посмотрим пример схемы chrome.printers.AllowForUsers .

Запрос

  curl -X GET \
  -H "Authorization: Bearer $TOKEN" \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policySchemas/chrome.printers.AllowForUsers"

Ответ

{
  "name": "customers/C0202nabg/policySchemas/chrome.printers.AllowForUsers",
  "policyDescription": "Allows a printer for users in a given organization.",
  "additionalTargetKeyNames": [
    {
      "key": "printer_id",
      "keyDescription": "Id of printer as visible in Admin SDK printers API."
    }
  ],
  "definition": {
    "messageType": [
      {
        "name": "AllowForUsers",
        "field": [
          {
            "name": "allowForUsers",
            "number": 1,
            "label": "LABEL_OPTIONAL",
            "type": "TYPE_BOOL"
          }
        ]
      }
    ]
  },
  "fieldDescriptions": [
    {
      "field": "allowForUsers",
      "description": "Controls whether a printer is allowed for users in a given organization."
    }
  ],
  "schemaName": "chrome.printers.AllowForUsers"
}

Приведенный выше ответ схемы политики описывает схему политики chrome.printers.AllowForUsers . Обратите внимание на поле additionalTargetKeyNames . В этом поле объясняется, что политика требует предоставления дополнительных ключей/значений при работе с этой политикой. В частности, для этой политики нам всегда необходимо указывать идентификатор принтера.

Чтение значения политики

Давайте прочитаем политику chrome.printers.AllowForUsers для конкретного принтера. Обратите внимание на использование поля additionalTargetKeys для указания идентификатора принтера в запросе.

Вы можете прочитать политику организационного подразделения или группы.

В ответе обратите внимание на поле sourceKey , которое указывает, из какого организационного подразделения или группы поступает значение политики. Для организационных подразделений существуют следующие возможности:

  • Если исходное организационное подразделение совпадает с организационным подразделением, указанным в запросе, это означает, что политика применяется локально в этом организационном подразделении.
  • Если исходное организационное подразделение отличается от организационного подразделения, указанного в запросе, это означает, что политика унаследована от исходного организационного подразделения.
  • Если sourceKey отсутствует или ответ пуст, это означает, что политика не установлена ​​для клиента и имеет системное значение по умолчанию.

Для групп sourceKey всегда будет таким же, как группа, указанная в запросе.

Следующий пример относится к организационному подразделению. Запрос группы будет таким же, за исключением targetResource, в котором перед идентификатором будет стоять «groups/» вместо «orgunits/».

Запрос

  curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
        policyTargetKey: {
          targetResource: "orgunits/04fatzly4jbjho9",
          additionalTargetKeys: {"printer_id":"0gjdgxs208tpef"}
        },
        policySchemaFilter: "chrome.printers.AllowForDevices"
    }' \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies:resolve"

Ответ

{
  "resolvedPolicies": [
    {
      "targetKey": {
        "targetResource": "orgunits/03ph8a2z1xdnme9"
        "additionalTargetKeys": {"printer_id":"0gjdgxs208tpef"}
      },
      "value": {
        "policySchema": "chrome.users.AllowForDevices",
        "value": {
          "allowForDevices": true
        }
      },
      "sourceKey": {
        "targetResource": "orgunits/03ph8a2z3qhz81k"
      }
    }
  ]
}

Обратите внимание, что все объекты в целевых ресурсах можно получить, опустив в запросе additionalTargetKeys . Например, если в приведенном выше запросе не указаны additionalTargetKeys , он вернет все принтеры в указанном целевом ресурсе.

Прочтите несколько политик

Если пространство имен схемы отмечено звездочкой (например, chrome.printers.* ), вы сможете читать значения для всех политик в этом пространстве имен в определенном организационном подразделении или группе. Узнайте больше о схемах политик .

Следующий пример относится к организационному подразделению. Запрос группы будет таким же, за исключением targetResource, в котором перед идентификатором будет стоять «groups/» вместо «orgunits/».

Запрос

  curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
        policyTargetKey: {
          targetResource: "orgunits/04fatzly4jbjho9",
        },
        policySchemaFilter: "chrome.printers.*"
    }' \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies:resolve"

Ответ

{
  "resolvedPolicies": [
    {
      "targetKey": {
        "targetResource": "orgunits/04fatzly4jbjho9",
        "additionalTargetKeys": {
          "printer_id": "0gjdgxs0xd59y1"
        }
      },
      "value": {
        "policySchema": "chrome.printers.AllowForUsers",
        "value": {
          "allowForUsers": false
        }
      }
    },
    {
      "targetKey": {
        "targetResource": "orgunits/04fatzly4jbjho9",
        "additionalTargetKeys": {
          "printer_id": "0gjdgxs0xd59y1"
        }
      },
      "value": {
        "policySchema": "chrome.printers.AllowForDevices",
        "value": {
          "allowForDevices": false
        }
      }
    },
    //...
  ],
  "nextPageToken": "AEbDN_pFvDeGSbQDkvMxr4UA0Ew7UEUw8aJyw95VPs2en6YxMmFcWQ9OQQEIeSkjnWFCQNyz5GGoOKQGEd50e2z6WqvM2w7sQz6TMxVOBD_4NmEHRWtIJCYymeYXWHIrNH29Ezl1wkeyYBAOKnE="
}

Изменить значение политики

Как видно из ответа схемы политики, политика chrome.printers.AllowForUsers имеет одно поле с allowForUsers . Это поле имеет логический тип. Примером значения политики может быть {allowForUsers: false} или {allowForUsers: true} . В данном конкретном случае у нас есть только одно поле, однако другие политики могут содержать несколько полей.

В запросах на изменение нам нужно указать updateMask . В маске обновления перечислены все поля, которые мы хотим изменить. Если политика уже была применена локально в организационном подразделении, то поля, которые не указаны в маске обновления, останутся нетронутыми. Если политика еще не была применена локально в организационной единице и все поля, которые не указаны в маске обновления, при необходимости скопируют свои значения из родительской организационной единицы, и вся политика будет применена локально.

Следующие примеры относятся к организационному подразделению. Групповые запросы такие же, за исключением targetResource, у которого перед идентификатором будет «groups/» вместо «orgunits/». Здесь мы запретим принтер 0gjdgxs208tpef для пользователей с идентификатором организационного подразделения 04fatzly4jbjho9 :

Запрос

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
        requests: [{
                policyTargetKey: {
                        targetResource: "orgunits/04fatzly4jbjho9",
                        additionalTargetKeys: {"printer_id":"0gjdgxs208tpef"}
                        },
                policyValue: {
                        policySchema: "chrome.printers.AllowForUsers",
                        value: {allowForUsers: false}
                        },
                updateMask: {paths: "allowForUsers"}
                }]
      }' \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies/orgunits:batchModify"

Ответ

Успешный ответ пуст.

{}

Поля с несколькими значениями, такие как списки или массивы, помечаются меткой «LABEL_REPEATED». Чтобы заполнить поля с несколькими значениями, используйте следующий формат массива JSON: [value1, value2, value3, ...] .

Например, чтобы установить исходные URL-адреса для пакетов приложений и расширений как «test1.com», «test2.com» и «test3.com», нам нужно отправить следующий запрос:

Запрос

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d "{
        requests: [
          {
            policy_target_key: {
              target_resource: 'orgunits/03ph8a2z28rz85a'
            },
            updateMask: {
              paths: ['extensionInstallSources']
            },
            policy_value: {
              policy_schema: 'chrome.users.appsconfig.AppExtensionInstallSources', 
              value: {
                extensionInstallSources: ['test1.com', 'test2.com', 'test3.com']
              }
            }
          }
        ]
      }" \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies/orgunits:batchModify"

Ответ

Успешный ответ пуст.

{}

Для всех политик, содержащих поля NullableDuration, существует две версии. Исходная версия принимает только строку в качестве входных данных для NullableDuration и теперь устарела. Используйте версию V2, в которой тип продолжительности заменяется числовым вводом. Например, чтобы установить максимальную продолжительность сеанса пользователя в 10 минут, нам нужно отправить следующий запрос:

Запрос

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d "{
        requests: [
          {
            policy_target_key: {
              target_resource: 'orgunits/03ph8a2z28rz85a'
            },
            updateMask: {
              paths: ['sessionDurationLimit']
            },
            policy_value: {
              policy_schema: 'chrome.users.SessionLengthV2',
              value: {
                sessionDurationLimit: {
                  duration: 10
                }
              }
            }
          }
        ]
      }" \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies/orgunits:batchModify"

Ответ

Успешный ответ пуст.

{}

Изменение нескольких политик одновременно

Метод batchModify позволяет одновременно отправлять несколько изменений политики. Однако не все политики можно объединить вместе. Дополнительные сведения см. в разделе Политики пакетного обновления .

В этом примере мы будем изменять в одном запросе две разные политики ( chrome.printers.AllowForDevices и chrome.printers.AllowForUsers ) для одного и того же принтера.

Следующий пример относится к организационному подразделению. Запрос группы будет таким же, за исключением targetResource, в котором перед идентификатором будет стоять «groups/» вместо «orgunits/».

Запрос

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
        requests: [{
                policyTargetKey: {
                        targetResource: "orgunits/04fatzly4jbjho9",
                        additionalTargetKeys: {"printer_id":"0gjdgxs208tpef"}
                        },
                policyValue: {
                        policySchema: "chrome.printers.AllowForDevices",
                        value: {allowForDevices: true}
                        },
                updateMask: {paths: "allowForDevices"}
                },
                {
                policyTargetKey: {
                        targetResource: "orgunits/04fatzly4jbjho9",
                        additionalTargetKeys: {"printer_id":"0gjdgxs208tpef"}
                        },
                policyValue: {
                        policySchema: "chrome.printers.AllowForUsers",
                        value: {allowForUsers: true}
                        },
                updateMask: {paths: "allowForUsers"}
                }]
      }' \
  "https://chromepolicy.googleapis.com/v1/customers/C0202nabg/policies/orgunits:batchModify"

Ответ

Успешный ответ пуст.

{}

Наследовать значение политики в организационном подразделении

Метод batchInherit позволяет изменить статус политики в организационной единице с «локально примененной» на «унаследованной». Локальные значения будут удалены, и политика будет наследовать значения от родительского организационного подразделения, если это применимо.

Метод batchInherit также позволяет одновременно отправлять несколько запросов на наследование политики. Однако не все политики можно объединить вместе. Дополнительные сведения см. в разделе Политики пакетного обновления .

Запрос

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
        requests: [{
                policyTargetKey: {
                        targetResource: "orgunits/04fatzly12wd3ox",
                        additionalTargetKeys: {"printer_id":"0gjdgxs208tpef"}
                        },
                policySchema: "chrome.printers.AllowForUsers"
                }]
      }' \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies/orgunits:batchInherit"

Ответ

Успешный ответ пуст.

{}

Удаление значения политики в группе

Метод batchDelete позволяет удалить политику из группы. Локальные значения будут удалены.

Метод batchDelete также позволяет одновременно отправлять несколько запросов на удаление политики. Однако не все политики можно объединить вместе. Дополнительные сведения см. в разделе Политики пакетного обновления .

Запрос

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
        requests: [{
                policyTargetKey: {
                        targetResource: "groups/04fatzly12wd3ox",
                        additionalTargetKeys: {"printer_id":"0gjdgxs208tpef"}
                        },
                policySchema: "chrome.printers.AllowForUsers"
                }]
      }' \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies/groups:batchDelete"

Ответ

Успешный ответ пуст.

{}

Перечислите приоритетный порядок для группы

Метод listGroupPriorityOrdering позволяет указать приоритетность групп для приложения.

Порядок возвращаемых идентификаторов групп указывает приоритет, с которым их настройки будут применяться к приложению; политики более поздних идентификаторов будут переопределены политиками, идентификаторы которых находятся раньше в списке.

Обратите внимание, что приоритеты группы выше приоритетов подразделений.

В этом запросе мы возвращаем приоритетный порядок для пользовательского приложения Chrome «exampleapp».

Запрос

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
        policyTargetKey: {
                additionalTargetKeys: {"app_id":"chrome:exampleapp"}
                },
        policyNamespace: 'chrome.users.apps'
      }' \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies/groups:listGroupPriorityOrdering"

Ответ

{
  "policyTargetKey": {
    "additionalTargetKeys": {
      "app_id": "chrome:exampleapp"
    }
  },
  "policyNamespace": "chrome.users.apps",
  "groupIds": [
    "03ep43zb2k1nodu",
    "01t3h5sf2k52kol",
    "03q5sasy2ihwnlz"
  ]
}

Обновить порядок приоритетов для группы

Метод updateGroupPriorityOrdering позволяет обновить порядок приоритетов групп для приложения.

Порядок идентификаторов групп в запросе указывает приоритет, с которым их настройки будут применены к приложению; политики более поздних идентификаторов будут переопределены политиками, идентификаторы которых находятся раньше в списке. Запрос должен включать каждый идентификатор группы, который в настоящее время применяется в приложении.

Обратите внимание, что приоритеты группы выше приоритетов подразделений.

В этом запросе мы устанавливаем порядок приоритетов для пользовательского приложения Chrome «exampleapp».

Запрос

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
        policyTargetKey: {
                additionalTargetKeys: {"app_id":"chrome:exampleapp"}
                },
        policyNamespace: 'chrome.users.apps',
        groupIds: ['03ep43zb2k1nodu', '01t3h5sf2k52kol', '03q5sasy2ihwnlz']
      }' \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies/groups:updateGroupPriorityOrdering"

Ответ

Успешный ответ пуст.

{}

Обработка политик, требующих подтверждения

Некоторые схемы политик определяют «уведомления» для определенных значений определенного поля, требующих подтверждения.

Пример политики chrome.users.PluginVmAllowd :

{
  "name": "customers/C0202nabg/policySchemas/chrome.users.PluginVmAllowed",
  "policyDescription": "Parallels Desktop.",
  # ...
  "fieldDescriptions": [
    {
      "field": "pluginVmAllowed",
      "description": "N/A",
      "knownValueDescriptions": [
        {
          "value": "true",
          "description": "Allow users to use Parallels Desktop."
        },
        {
          "value": "false",
          "description": "Do not allow users to use Parallels Desktop."
        }
      ]
    },
    {
      "field": "ackNoticeForPluginVmAllowedSetToTrue",
      "description": "This field must be set to true to acknowledge the notice message associated with the field 'plugin_vm_allowed' set to value 'true'. Please see the notices listed with this policy for more information."
    }
  ],
  "notices": [
    {
      "field": "pluginVmAllowed",
      "noticeValue": "true",
      "noticeMessage": "By enabling Parallels Desktop, you agree to the Parallels End-User License Agreement specified at https://www.parallels.com/about/legal/eula/. Warning: Device identifiers may be shared with Parallels. Please see privacy policy for more details at https://www.parallels.com/about/legal/privacy/. The minimum recommended configuration includes an i5 processor, 16 GB RAM, and 128 GB storage: https://support.google.com/chrome/a/answer/10044480.",
      "acknowledgementRequired": true
    }
  ],
  "supportUri": "...",
  "schemaName": "chrome.users.PluginVmAllowed"
}

В приведенном выше примере установка значения true для поля pluginVmAllowed связана с уведомлением, имеющим acknowledgementRequired . Чтобы правильно установить для этого поля значение true , вам необходимо отправить запрос, в котором для поля подтверждения ackNoticeForPluginVmAllowedSetToTrue указано значение true , в противном случае вы получите ошибку в своем запросе.

В этом примере вам нужно будет отправить следующий запрос на пакетное изменение.

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d "{
  'requests': [
    {
      'policyTargetKey': {
        'targetResource': 'orgunits/03ph8a2z10ybbh2'
      },
      'policyValue': {
        'policySchema': 'chrome.users.PluginVmAllowed',
        'value': {
          'pluginVmAllowed': true,
          'ackNoticeForPluginVmAllowedSetToTrue': true
        }
      },
      'updateMask': {
        'paths': [
          'pluginVmAllowed',
          'ackNoticeForPluginVmAllowedSetToTrue'
        ]
      }
    }
  ]
}" \
"https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies/orgunits:batchModify"

Настройка файловой политики

В некоторых политиках поля имеют тип UploadedFile . Вам необходимо загрузить файл, который вы хотите установить в качестве значения этих политик, на сервер API, чтобы получить URL-адрес для использования в запросах BatchModify .

В этом примере мы будем устанавливать chrome.users.Wallpaper , загрузив файл JPEG.

Загрузите файл

Запрос

curl -X POST \
  -H "Content-Type: image/jpeg" \
  -H "Authorization: Bearer $TOKEN" \
  -T "/path/to/the/file" \
  "https://chromepolicy.googleapis.com/upload/v1/customers/$CUSTOMER/policies/files:uploadPolicyFile?policy_field=chrome.users.Wallpaper.wallpaperImage"

Ответ

Успешный ответ должен содержать URL-адрес для доступа к файлу:

{
  "downloadUri": "https://storage.googleapis.com/chromeos-mgmt/0gjdgxs370bkl6/ChromeOsWallpaper/32ac50ab-b5ae-4bba-afa8-b6b443912897"
}

Установите файловую политику

Запрос

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
        requests: [{
                policyTargetKey: {
                        targetResource: "orgunits/04fatzly4jbjho9",
                        },
                policyValue: {
                        policySchema: "chrome.users.Wallpaper",
                        value: {
                          wallpaperImage: {downloadUri: "https://storage.googleapis.com/chromeos-mgmt/0gjdgxs370bkl6/ChromeOsWallpaper/32ac50ab-b5ae-4bba-afa8-b6b443912897"}
                          }
                        },
                updateMask: {paths: "wallpaperImage"}
                }]
      }' \
  "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies/orgunits:batchModify"

Ответ

Успешный ответ должен быть пустым.

{}