..
# *******************************************************
# Copyright (c) Broadcom, Inc. 2020-2026. All Rights Reserved. Carbon Black.
# SPDX-License-Identifier: MIT
# *******************************************************
# *
# * DISCLAIMER. THIS PROGRAM IS PROVIDED TO YOU "AS IS" WITHOUT
# * WARRANTIES OR CONDITIONS OF ANY KIND, WHETHER ORAL OR WRITTEN,
# * EXPRESS OR IMPLIED. THE AUTHOR SPECIFICALLY DISCLAIMS ANY IMPLIED
# * WARRANTIES OR CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY,
# * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE.
.. _getting-started:
Getting Started with the Carbon Black Cloud Python SDK - "Hello CBC"
====================================================================
This document will help you get started with the Carbon Black Cloud Python SDK by installing it, configuring
authentication for it, and executing a simple example program that makes one API call.
Installation
------------
Make sure you are using Python 3. Use the command ``pip install carbon-black-cloud-sdk`` to install the SDK and all
its dependencies. (In some environments, the correct command will be ``pip3 install carbon-black-cloud-sdk`` to
use Python 3.)
You can also access the SDK in development mode by cloning the GitHub repository, and then executing
``python setup.py develop`` (in some environments, ``python3 setup.py develop``) from the top-level directory.
Setting your ``PYTHONPATH`` environment variable to the directory ``[sdk]/src``, where ``[sdk]`` is the top-level
directory of the SDK, will also work for these purposes. (On Windows, use ``[sdk]\src``.)
See also the :doc:`installation` section of this documentation for more information.
Authentication
--------------
To make use of APIs, you will need an *API token,* in case you are using Carbon Black Cloud to manage your
identity and authentication, or if you are using VMware Cloud Services Platform, an *OAuth App with Bearer* or
a *Personal API Token*. For our example, we will use a custom CBC-managed key with the ability to list devices.
To learn more about the different authentication methods, click
`here `_.
Log into the Carbon Black Cloud UI and go to ``Settings > API Access``. Start by selecting ``Access Levels`` at the
top of the screen and press ``Add Access Level``. Fill in a name and description for your sample access level, keep
``Copy permissions from`` set to ``None``, and, under the permission category ``Device`` and permission name
``General information``, check the ``Read`` check box. Press ``Save`` to save and create the new access level.
Now select ``API Keys`` at the top of the screen and press ``Add API Key``. Enter a name for the key, and, optionally,
a description. For ``Access Level type``, select ``Custom``, and for ``Custom Access Level``, select the access level
you created above. Press ``Save`` to save and create the new API key. An ``API Credentials`` dialog will be displayed
with the new API ID and secret key; this dialog may also be re-displayed at any time by finding the API key in the list,
clicking the drop-down arrow under the ``Actions`` column, and selecting ``API Credentials``.
We will use a credentials file to store the credential information by default. Create a directory named
``.carbonblack`` under your user home directory. (On Windows, this directory is generally ``C:\Users\[username]``,
where ``[username]`` is your user name.) Within this directory create a file ``credentials.cbc`` to store your
credentials. Copy the following template to this new file::
[default]
url=
token=
org_key=
ssl_verify=True
integrationName=CustomSDKScript/1.0
Following the ``url=`` keyword, add the top-level URL you use to access the Carbon Black Cloud, including the
``https://`` prefix and the domain name, but without any of the path information following it.
Following the ``token=`` keyword, add the ``API Secret Key`` from the ``API Credentials`` dialog, followed by a forward
slash (/) character, followed by the ``API ID`` from the ``API Credentials`` dialog. (The secret key is always 24
characters in length, and the API ID is always 10 characters in length.)
Following the ``org_key=`` keyword, add the organization key from your organization, which may be seen under the
``Org Key:`` heading at the top of the ``API Keys`` display under ``Settings > API Access``. It is always 8 characters
in length.
Save the completed ``credentials.cbc`` file, which should look like this *(example text only)*::
[default]
url=https://example.net
token=ABCDEFGHGIJKLMNOPQRSTUVWX/ABCDEFGHIJ
org_key=A1B2C3D4
ssl_verify=True
On UNIX systems, you must make sure that the ``credentials.cbc`` file is properly secured. The simplest commands for
doing so are::
$ chmod 600 ~/.carbonblack/credentials.cbc
$ chmod 700 ~/.carbonblack
For further information, please see the :doc:`authentication` section of the documentation, as well as the
`Authentication Guide `_ on the
Carbon Black Cloud Developer Network.
Setting the User-Agent
----------------------
The SDK supports custom ``User-Agent``s, which allow you to identify yourself when using the SDK to make API calls.
The credential parameter ``integration_name`` is used for this. If you use a file to authenticate the SDK, this is
how you could identify yourself::
[default]
url=http://example.com
token=ABCDEFGHIJKLMNOPQRSTUVWX/12345678
org_key=A1B2C3D4
integration_name=MyScript/0.9.0
See the :doc:`authentication` documentation for more information about credentials.
Running the Example
-------------------
The example we will be running is ``list_devices.py``, located in the ``examples/platform`` subdirectory of the GitHub
repository. If you cloned the repository, change directory to ``[sdk]/examples/platform``, where ``[sdk]`` is the
top-level directory of the SDK. (On Windows, use ``[sdk]\examples\platform``.) Alternately, you may view the current
version of that script in "raw" mode in GitHub, and use your browser's ``Save As`` function to save the script locally.
In that case, change directory to whichever directory you saved the script to.
Execute the script by using the command ``python list_devices.py`` (in some environments,
``python3 list_devices.py``). If all is well, you will see a list of devices (endpoints) registered in your
organization, showing their numeric ID, host name, IP address, and last checkin time.
You can change what devices are shown by adding a query value with the ``-q`` parameter, and also by using
additional parameters to modify the search criteria. Execute the command ``python list_devices.py --help`` (in some
environments, ``python3 list_devices.py --help``) for a list of all possible command line parameters.
Inside the Example Script
-------------------------
Once the command-line arguments are parsed, we create a Carbon Black Cloud API object with a call to the helper
function ``get_cb_cloud_object()``. The standard ``select()`` method is used to create a query object that queries for
devices; the query string is passed to that object via the ``where()`` method, and other criteria are added using
specific setters.
The query is an iterable object, and calling upon its iterator methods invokes the query, which, in this case, is the
`Search Devices `_
API. The example script turns those results into an in-memory list, then iterates on that list, printing only certain
properties of each retrieved Device object.
Calling the SDK Directly
------------------------
Now we'll repeat this example, but using the Python command line directly without a script.
Access your Python interpreter with the ``python`` command (or ``python3`` if required) and type::
>>> from cbc_sdk.rest_api import CBCloudAPI
>>> from cbc_sdk.platform import Device
>>> cb = CBCloudAPI(profile='default')
This imports the necessary classes and creates an instance of the base ``CBCloudAPI`` object. By default, the file
credentials provider is used. We set it to use the ``default`` profile in your ``credentials.cbc`` file, which you
set up earlier.
.. note::
On Windows, a security warning message will be generated about file access to CBC SDK credentials being
inherently insecure.
This creates a query object that searches for all devices::
>>> query = cb.select(Device)
For convenience, we load the entirety of the query results into an in-memory list::
>>> devices = list(query)
Using a simple ``for`` loop, we print out the ID, host name, internal IP address, and last contact time from each
returned device. Note that the contents of the list are ``Device`` objects, not dictionaries, so we access individual
properties with the ``object.property_name`` syntax, rather than ``object['property_name']``::
>>> for device in devices:
... print(device.id, device.name, device.last_internal_ip_address, device.last_contact_time)
...
Searching is an important operation in the SDK, as that is how objects are generally retrieved for other operations.
The :doc:`Guide to Searching ` contains more information about searching.
Next Steps
----------
- :doc:`guides`: Information and Examples related to specific actions you want to take on your Carbon Black Cloud data