Scanning Instructions & Licensing Models Explained Guide (9-17-24)
Scanning Instructions & Licensing Models Explained Guide (9-17-24)
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL 1
Guide summary
This document discusses Anaconda licensing types and provides a guide for investigating
Anaconda installations and Artifactory Anaconda users. Investigating is achieved by:
● Scanning the number of installations of Anaconda within your environments
● Counting the number of Artifactory users with access to Anaconda packages
Definition of Users
“Users" are defined as individuals, companies or systems that download, access, or use
Anaconda Paid Services.
A) Individuals that download, use or access our software on hardware such as laptops,
data science workstations, and computers. Your ”Authorized Users” are your employees,
agents, and independent contractors (including outsourcing service providers) who you
authorize to use the Anaconda Offering(s) on Your behalf for Your Internal Use, provided
that You are responsible for: (a) ensuring that such Authorized Users comply with these
TOS or an applicable Custom Agreement; and (b) any breach of these TOS by such
Authorized Users. Any other installations, usage, deployments, or access must have an
individual license per each additional usage.
Summary: We are trying to prevent cases where a single token is being shipped around
to embed into services and shared applications or servers in order to circumvent having
to get licenses for each user.
Please note any user that is downloading, accessing or using Anaconda Paid Services
requires a license.
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL 2
Anaconda Licensing Types
Per-user model
With the per-user model, Anaconda strongly encourages you to enforce tokens and track users
for each individual developer to ensure the correct users have access to the premium
repository repo.anaconda.cloud. Not enforcing usage may result in non-licensed users
accessing the premium repository and needing to pay for that additional use. Your account
administrators assign/manage seats for each user within the User Management section in
Anaconda.
Each user has their own unique token to access the premium repository repo.anaconda.cloud.
Any overage above your licensed amount on Anaconda repositories is trued-up on a quarterly
or bi-annual cadence.
Organization-wide model
Some organizations prefer to roll out an org-wide token if there is a preference to keep both
the premium repository repo.anaconda.cloud and base repository repo.anaconda.com open.
This might be because they want to provide unlimited growth or they do not have the ability to
track users and enforce tokens on an individual level. Many organizations take this approach
when they do not have a token for each user.
Org-wide tokens allow customers to leverage mirroring software like Artifactory for creating
copies of our commercial package repository.
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL 3
Scanning for Anaconda installations
Anaconda recommends combining different types of scans to gain a full understanding of
where Anaconda is being used within your organization. Note that the number of installations
does not directly correspond to the number of Anaconda users or admins.
Endpoint Scans
Endpoint scans help you determine which endpoints in your environment have Anaconda
installed. Anaconda provides example scanning scripts to check for Anaconda across
Windows, MacOS, and Linux end user devices as well as cloud instances such as EC2 Servers.
These scripts:
● Scan for the following Anaconda files across all platforms and cloud instances:
○ conda
○ conda.exe
○ .condarc
● Look for conda in a Linux user’s shell history files:
○ .bash_history
○ .history
○ .sh_history
○ .zsh_history
● Look for conda in a Windows user’s ConsoleHost_history.txt file
Network Scans
Review your network traffic for communication with the following Anaconda domains:
● repo.anaconda.com
● repo.anaconda.cloud
● anaconda.org/anaconda
● anaconda.org/main
● anaconda.org/r
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL 4
Device Scans
The results for each device are output to anaconda_scan.csv, which by default is located in
the directory where the script is run. To test the sample script on a single device before
deploying via MDM, follow the instructions below.
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL 5
NOTE: These scripts only scan the most common installation paths, and may not necessarily
cover all potential installation paths. See the Appendix for additional details about which
paths are scanned by default.
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL 6
-------------------------
Locating environments
-------------------------
Examining packages (anaconda/miniconda/total)
-------------------------
Anaconda environments: 0
Anaconda packages: 0
Miniconda packages: 0
-------------------------
Inventory created: anaconda_scan.csv
-------------------------
2. Below is an example of what you will see if Anaconda or Miniconda are installed:
-------------------------
Anaconda Scanner
-------------------------
UName: Windows
Time: 2024-06-17T17:21:52
Hostname: hostname1234
Host ID: 00-1A-2B-3C-4D-55
Inventory log: anaconda_scan.csv (creating)
-------------------------
Locating environments
| C:\Users\username\anaconda3: base + 0 children
-------------------------
Examining packages (anaconda/miniconda/total)
| C:\Users\username\anaconda3\conda-meta: 403/88/491
-------------------------
Anaconda environments: 1
Anaconda packages: 403
Miniconda packages: 153
-------------------------
Inventory created: anaconda_scan.csv
-------------------------
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL 7
Service and are within the use limits of your license. The process uses a Python script to count
all enabled Artifactory users who have read permissions to repositories within Artifactory that
mirror Anaconda’s repository. The script outputs information on Artifactory users and their
access levels, which must be delivered to your Anaconda Technical Account Manager (TAM)
for analysis and, if necessary, license adjustment.
Prerequisites
● Artifactory Pro or Enterprise version 7.61.3 or greater for the artifactory-user-
counts.py script and version 7.49.3 or greater for the artifactory-user-
counts-legacy.py script (not OSS)
● Administrator level permissions in Artifactory
● Anaconda Distribution installed on your machine
● The artifactory-user-counts.py script or the artifactory-user-counts-legacy.py script
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL 8
5. Complete the Generate Token form as follows:
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL 9
values are no longer available!
8. Click Close.
9. Verify that your access token appears on the Access Tokens page.
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL
10
Running the Python script
1. Open a terminal and create a conda environment with the necessary packages to run the
artifactory-user-counts.py or artifactory-user-counts-legacy.py script
by running the following command:
# Replace <ENV_NAME> with a name for your environment
conda create -n <ENV_NAME> python requests
2. Activate the conda environment by running the following command:
# Replace <ENV_NAME> with the environment you just created
conda activate <ENV_NAME>
3. Execute the python script from its stored location by running the following command:
python path/to/artifactory-user-counts.py
OR
python path/to/artifactory-user-counts-legacy.py
4. When prompted by the script, enter:
a. Your Artifactory Fully Qualified Domain Name: Artifactory’s Base URL
Example: ARTIFACTORY_SERVER_HOSTNAME:8082
Example: artifactory.jfrog.io
b. Artifactory Access Token: The Reference Token you generated earlier.
c. Artifactory Protocol (http or https): The protocol used by Artifactory, which will be
http or https.
5. Allow the script time to complete.
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL
11
Please reach out to your Anaconda sales representative directly for any topics related to User
Licensing.
For any support-related topics concerning your usage as a Customer, please visit our Support
Center.
For any other general questions related to Anaconda, please refer to the FAQ’s page on our
website.
Appendix
Updated base paths that the scripts will check while scanning:
● Windows (Powershell) script base paths:
○ "C:\*", "C:\*\*", "C:\*\*\*", "C:\*\*\*\*"
● Shell script (MacOS/UNIX/Linux) base paths:
○ MacOS: "/Users/*/*", "/opt/*"
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL
12
○ Linux/UNIX: "/home/*/*", "/opt/*"
Confidentiality Notice: Anaconda’s Confidential Information includes the terms and conditions of this Guide, the
Products, any technical or performance information about the Products, any non-public Documentation provided by
Anaconda, and any new product information regarding the Products. Please do not share this document externally.
108 Lavaca Street Suite 110-645, Austin, TX 7870 | 512-222-5440 | anaconda.com CONFIDENTIAL
13