cartography 0.98.0rc2__py3-none-any.whl → 0.98.0rc4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cartography might be problematic. Click here for more details.
- cartography/_version.py +16 -0
- cartography/intel/gcp/__init__.py +6 -6
- cartography/intel/gsuite/__init__.py +29 -23
- cartography/util.py +2 -6
- cartography-0.98.0rc4.dist-info/METADATA +187 -0
- {cartography-0.98.0rc2.dist-info → cartography-0.98.0rc4.dist-info}/RECORD +10 -9
- cartography-0.98.0rc2.dist-info/METADATA +0 -53
- {cartography-0.98.0rc2.dist-info → cartography-0.98.0rc4.dist-info}/LICENSE +0 -0
- {cartography-0.98.0rc2.dist-info → cartography-0.98.0rc4.dist-info}/WHEEL +0 -0
- {cartography-0.98.0rc2.dist-info → cartography-0.98.0rc4.dist-info}/entry_points.txt +0 -0
- {cartography-0.98.0rc2.dist-info → cartography-0.98.0rc4.dist-info}/top_level.txt +0 -0
cartography/_version.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# file generated by setuptools_scm
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
TYPE_CHECKING = False
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from typing import Tuple, Union
|
|
6
|
+
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
7
|
+
else:
|
|
8
|
+
VERSION_TUPLE = object
|
|
9
|
+
|
|
10
|
+
version: str
|
|
11
|
+
__version__: str
|
|
12
|
+
__version_tuple__: VERSION_TUPLE
|
|
13
|
+
version_tuple: VERSION_TUPLE
|
|
14
|
+
|
|
15
|
+
__version__ = version = '0.98.0rc4'
|
|
16
|
+
__version_tuple__ = version_tuple = (0, 98, 0)
|
|
@@ -7,9 +7,10 @@ from typing import Set
|
|
|
7
7
|
|
|
8
8
|
import googleapiclient.discovery
|
|
9
9
|
import neo4j
|
|
10
|
+
from google.auth import default
|
|
11
|
+
from google.auth.credentials import Credentials as GoogleCredentials
|
|
12
|
+
from google.auth.exceptions import DefaultCredentialsError
|
|
10
13
|
from googleapiclient.discovery import Resource
|
|
11
|
-
from oauth2client.client import ApplicationDefaultCredentialsError
|
|
12
|
-
from oauth2client.client import GoogleCredentials
|
|
13
14
|
|
|
14
15
|
from cartography.config import Config
|
|
15
16
|
from cartography.intel.gcp import compute
|
|
@@ -295,10 +296,9 @@ def get_gcp_credentials() -> GoogleCredentials:
|
|
|
295
296
|
"""
|
|
296
297
|
try:
|
|
297
298
|
# Explicitly use Application Default Credentials.
|
|
298
|
-
# See https://
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
except ApplicationDefaultCredentialsError as e:
|
|
299
|
+
# See https://google-auth.readthedocs.io/en/master/user-guide.html#application-default-credentials
|
|
300
|
+
credentials, project_id = default()
|
|
301
|
+
except DefaultCredentialsError as e:
|
|
302
302
|
logger.debug("Error occurred calling GoogleCredentials.get_application_default().", exc_info=True)
|
|
303
303
|
logger.error(
|
|
304
304
|
(
|
|
@@ -5,11 +5,14 @@ import os
|
|
|
5
5
|
from collections import namedtuple
|
|
6
6
|
|
|
7
7
|
import googleapiclient.discovery
|
|
8
|
-
import httplib2
|
|
9
8
|
import neo4j
|
|
9
|
+
from google.auth.exceptions import DefaultCredentialsError
|
|
10
|
+
from google.auth.transport.requests import Request
|
|
11
|
+
from google.oauth2 import credentials
|
|
12
|
+
from google.oauth2 import service_account
|
|
13
|
+
from google.oauth2.credentials import Credentials as OAuth2Credentials
|
|
14
|
+
from google.oauth2.service_account import Credentials as ServiceAccountCredentials
|
|
10
15
|
from googleapiclient.discovery import Resource
|
|
11
|
-
from oauth2client.client import ApplicationDefaultCredentialsError
|
|
12
|
-
from oauth2client.client import GoogleCredentials
|
|
13
16
|
|
|
14
17
|
from cartography.config import Config
|
|
15
18
|
from cartography.intel.gsuite import api
|
|
@@ -26,21 +29,21 @@ logger = logging.getLogger(__name__)
|
|
|
26
29
|
Resources = namedtuple('Resources', 'admin')
|
|
27
30
|
|
|
28
31
|
|
|
29
|
-
def _get_admin_resource(credentials:
|
|
32
|
+
def _get_admin_resource(credentials: OAuth2Credentials | ServiceAccountCredentials) -> Resource:
|
|
30
33
|
"""
|
|
31
34
|
Instantiates a Google API resource object to call the Google API.
|
|
32
35
|
Used to pull users and groups. See https://developers.google.com/admin-sdk/directory/v1/guides/manage-users
|
|
33
36
|
|
|
34
|
-
:param credentials: The
|
|
37
|
+
:param credentials: The credentials object
|
|
35
38
|
:return: An admin api resource object
|
|
36
39
|
"""
|
|
37
40
|
return googleapiclient.discovery.build('admin', 'directory_v1', credentials=credentials, cache_discovery=False)
|
|
38
41
|
|
|
39
42
|
|
|
40
|
-
def _initialize_resources(credentials:
|
|
43
|
+
def _initialize_resources(credentials: OAuth2Credentials | ServiceAccountCredentials) -> Resources:
|
|
41
44
|
"""
|
|
42
45
|
Create namedtuple of all resource objects necessary for Google API data gathering.
|
|
43
|
-
:param credentials: The
|
|
46
|
+
:param credentials: The credentials object
|
|
44
47
|
:return: namedtuple of all resource objects
|
|
45
48
|
"""
|
|
46
49
|
return Resources(
|
|
@@ -61,14 +64,17 @@ def start_gsuite_ingestion(neo4j_session: neo4j.Session, config: Config) -> None
|
|
|
61
64
|
"UPDATE_TAG": config.update_tag,
|
|
62
65
|
}
|
|
63
66
|
|
|
67
|
+
creds: OAuth2Credentials | ServiceAccountCredentials
|
|
64
68
|
if config.gsuite_auth_method == 'delegated': # Legacy delegated method
|
|
65
69
|
logger.info('Attempting to authenticate to GSuite using legacy delegated method')
|
|
66
70
|
try:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
creds = service_account.Credentials.from_service_account_file(
|
|
72
|
+
config.gsuite_config,
|
|
73
|
+
scopes=OAUTH_SCOPE,
|
|
74
|
+
)
|
|
75
|
+
creds = creds.with_subject(os.environ.get('GSUITE_DELEGATED_ADMIN'))
|
|
70
76
|
|
|
71
|
-
except
|
|
77
|
+
except DefaultCredentialsError as e:
|
|
72
78
|
logger.error(
|
|
73
79
|
(
|
|
74
80
|
"Unable to initialize GSuite creds. If you don't have GSuite data or don't want to load "
|
|
@@ -83,18 +89,18 @@ def start_gsuite_ingestion(neo4j_session: neo4j.Session, config: Config) -> None
|
|
|
83
89
|
auth_tokens = json.loads(str(base64.b64decode(config.gsuite_config).decode()))
|
|
84
90
|
logger.info('Attempting to authenticate to GSuite using OAuth')
|
|
85
91
|
try:
|
|
86
|
-
|
|
87
|
-
None,
|
|
88
|
-
auth_tokens['client_id'],
|
|
89
|
-
auth_tokens['client_secret'],
|
|
90
|
-
auth_tokens['refresh_token'],
|
|
91
|
-
None,
|
|
92
|
-
auth_tokens['token_uri'],
|
|
93
|
-
|
|
92
|
+
creds = credentials.Credentials(
|
|
93
|
+
token=None,
|
|
94
|
+
client_id=auth_tokens['client_id'],
|
|
95
|
+
client_secret=auth_tokens['client_secret'],
|
|
96
|
+
refresh_token=auth_tokens['refresh_token'],
|
|
97
|
+
expiry=None,
|
|
98
|
+
token_uri=auth_tokens['token_uri'],
|
|
99
|
+
scopes=OAUTH_SCOPE,
|
|
94
100
|
)
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
except
|
|
101
|
+
creds.refresh(Request())
|
|
102
|
+
creds = creds.create_scoped(OAUTH_SCOPE)
|
|
103
|
+
except DefaultCredentialsError as e:
|
|
98
104
|
logger.error(
|
|
99
105
|
(
|
|
100
106
|
"Unable to initialize GSuite creds. If you don't have GSuite data or don't want to load "
|
|
@@ -106,6 +112,6 @@ def start_gsuite_ingestion(neo4j_session: neo4j.Session, config: Config) -> None
|
|
|
106
112
|
)
|
|
107
113
|
return
|
|
108
114
|
|
|
109
|
-
resources = _initialize_resources(
|
|
115
|
+
resources = _initialize_resources(creds)
|
|
110
116
|
api.sync_gsuite_users(neo4j_session, resources.admin, config.update_tag, common_job_parameters)
|
|
111
117
|
api.sync_gsuite_groups(neo4j_session, resources.admin, config.update_tag, common_job_parameters)
|
cartography/util.py
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import logging
|
|
3
3
|
import re
|
|
4
|
-
import sys
|
|
5
4
|
from functools import partial
|
|
6
5
|
from functools import wraps
|
|
6
|
+
from importlib.resources import open_binary
|
|
7
|
+
from importlib.resources import read_text
|
|
7
8
|
from string import Template
|
|
8
9
|
from typing import Any
|
|
9
10
|
from typing import Awaitable
|
|
@@ -30,11 +31,6 @@ from cartography.stats import get_stats_client
|
|
|
30
31
|
from cartography.stats import ScopedStatsClient
|
|
31
32
|
|
|
32
33
|
|
|
33
|
-
if sys.version_info >= (3, 7):
|
|
34
|
-
from importlib.resources import open_binary, read_text
|
|
35
|
-
else:
|
|
36
|
-
from importlib_resources import open_binary, read_text
|
|
37
|
-
|
|
38
34
|
logger = logging.getLogger(__name__)
|
|
39
35
|
|
|
40
36
|
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: cartography
|
|
3
|
+
Version: 0.98.0rc4
|
|
4
|
+
Summary: Explore assets and their relationships across your technical infrastructure.
|
|
5
|
+
Maintainer: Cartography Contributors
|
|
6
|
+
License: apache2
|
|
7
|
+
Project-URL: Homepage, https://cartography-cncf.github.io/cartography
|
|
8
|
+
Project-URL: Documentation, https://cartography-cncf.github.io/cartography
|
|
9
|
+
Project-URL: Repository, https://github.com/cartography-cncf/cartography
|
|
10
|
+
Project-URL: Issues, https://github.com/cartography-cncf/cartography/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/cartography-cncf/cartography/releases
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Natural Language :: English
|
|
16
|
+
Classifier: Programming Language :: Python
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Topic :: Security
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: backoff>=2.1.2
|
|
26
|
+
Requires-Dist: boto3>=1.15.1
|
|
27
|
+
Requires-Dist: botocore>=1.18.1
|
|
28
|
+
Requires-Dist: dnspython>=1.15.0
|
|
29
|
+
Requires-Dist: neo4j<5.0.0,>=4.4.4
|
|
30
|
+
Requires-Dist: policyuniverse>=1.1.0.0
|
|
31
|
+
Requires-Dist: google-api-python-client>=1.7.8
|
|
32
|
+
Requires-Dist: google-auth>=2.37.0
|
|
33
|
+
Requires-Dist: marshmallow>=3.0.0rc7
|
|
34
|
+
Requires-Dist: oci>=2.71.0
|
|
35
|
+
Requires-Dist: okta<1.0.0
|
|
36
|
+
Requires-Dist: pyyaml>=5.3.1
|
|
37
|
+
Requires-Dist: requests>=2.22.0
|
|
38
|
+
Requires-Dist: statsd
|
|
39
|
+
Requires-Dist: packaging
|
|
40
|
+
Requires-Dist: python-digitalocean>=1.16.0
|
|
41
|
+
Requires-Dist: adal>=1.2.4
|
|
42
|
+
Requires-Dist: azure-cli-core>=2.26.0
|
|
43
|
+
Requires-Dist: azure-mgmt-compute>=5.0.0
|
|
44
|
+
Requires-Dist: azure-mgmt-resource>=10.2.0
|
|
45
|
+
Requires-Dist: azure-mgmt-cosmosdb>=6.0.0
|
|
46
|
+
Requires-Dist: msrestazure>=0.6.4
|
|
47
|
+
Requires-Dist: azure-mgmt-storage>=16.0.0
|
|
48
|
+
Requires-Dist: azure-mgmt-sql<=1.0.0
|
|
49
|
+
Requires-Dist: azure-identity>=1.5.0
|
|
50
|
+
Requires-Dist: kubernetes>=22.6.0
|
|
51
|
+
Requires-Dist: pdpyras>=4.3.0
|
|
52
|
+
Requires-Dist: crowdstrike-falconpy>=0.5.1
|
|
53
|
+
Requires-Dist: python-dateutil
|
|
54
|
+
Requires-Dist: xmltodict
|
|
55
|
+
Requires-Dist: duo-client
|
|
56
|
+
Provides-Extra: dev
|
|
57
|
+
Requires-Dist: backoff>=2.1.2; extra == "dev"
|
|
58
|
+
Requires-Dist: moto; extra == "dev"
|
|
59
|
+
Requires-Dist: pre-commit; extra == "dev"
|
|
60
|
+
Requires-Dist: pytest>=6.2.4; extra == "dev"
|
|
61
|
+
Requires-Dist: pytest-mock; extra == "dev"
|
|
62
|
+
Requires-Dist: pytest-cov==2.10.0; extra == "dev"
|
|
63
|
+
Requires-Dist: pytest-rerunfailures; extra == "dev"
|
|
64
|
+
Requires-Dist: types-PyYAML; extra == "dev"
|
|
65
|
+
Requires-Dist: types-requests<2.31.0.7; extra == "dev"
|
|
66
|
+
|
|
67
|
+

|
|
68
|
+
|
|
69
|
+
Cartography is a Python tool that consolidates infrastructure assets and the relationships between them in an intuitive graph view powered by a [Neo4j](https://www.neo4j.com) database.
|
|
70
|
+
|
|
71
|
+

|
|
72
|
+
|
|
73
|
+
## Why Cartography?
|
|
74
|
+
Cartography aims to enable a broad set of exploration and automation scenarios. It is particularly good at exposing otherwise hidden dependency relationships between your service's assets so that you may validate assumptions about security risks.
|
|
75
|
+
|
|
76
|
+
Service owners can generate asset reports, Red Teamers can discover attack paths, and Blue Teamers can identify areas for security improvement. All can benefit from using the graph for manual exploration through a web frontend interface, or in an automated fashion by calling the APIs.
|
|
77
|
+
|
|
78
|
+
Cartography is not the only [security](https://github.com/dowjones/hammer) [graph](https://github.com/BloodHoundAD/BloodHound) [tool](https://github.com/Netflix/security_monkey) [out](https://github.com/vysecurity/ANGRYPUPPY) [there](https://github.com/duo-labs/cloudmapper), but it differentiates itself by being fully-featured yet generic and [extensible](https://cartography-cncf.github.io/cartography/dev/writing-analysis-jobs.html) enough to help make anyone better understand their risk exposure, regardless of what platforms they use. Rather than being focused on one core scenario or attack vector like the other linked tools, Cartography focuses on flexibility and exploration.
|
|
79
|
+
|
|
80
|
+
You can learn more about the story behind Cartography in our [presentation at BSidesSF 2019](https://www.youtube.com/watch?v=ZukUmZSKSek).
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
## Supported platforms
|
|
84
|
+
|
|
85
|
+
- [Amazon Web Services](https://cartography-cncf.github.io/cartography/modules/aws/index.html) - API Gateway, Config, EC2, ECS, ECR, Elasticsearch, Elastic Kubernetes Service (EKS), DynamoDB, IAM, Inspector, KMS, Lambda, RDS, Redshift, Route53, S3, Secrets Manager, Security Hub, SQS, SSM, STS, Tags
|
|
86
|
+
- [Google Cloud Platform](https://cartography-cncf.github.io/cartography/modules/gcp/index.html) - Cloud Resource Manager, Compute, DNS, Storage, Google Kubernetes Engine
|
|
87
|
+
- [Google GSuite](https://cartography-cncf.github.io/cartography/modules/gsuite/index.html) - users, groups
|
|
88
|
+
- [Oracle Cloud Infrastructure](docs/setup/config/oci.md) - IAM
|
|
89
|
+
- [Okta](https://cartography-cncf.github.io/cartography/modules/okta/index.html) - users, groups, organizations, roles, applications, factors, trusted origins, reply URIs
|
|
90
|
+
- [GitHub](https://cartography-cncf.github.io/cartography/modules/github/index.html) - repos, branches, users, teams
|
|
91
|
+
- [DigitalOcean](https://cartography-cncf.github.io/cartography/modules/digitalocean/index.html)
|
|
92
|
+
- [Microsoft Azure](https://cartography-cncf.github.io/cartography/modules/azure/index.html) - CosmosDB, SQL, Storage, Virtual Machine
|
|
93
|
+
- [Kubernetes](https://cartography-cncf.github.io/cartography/modules/kubernetes/index.html) - Cluster, Namespace, Service, Pod, Container
|
|
94
|
+
- [PagerDuty](https://cartography-cncf.github.io/cartography/modules/pagerduty/index.html) - Users, teams, services, schedules, escalation policies, integrations, vendors
|
|
95
|
+
- [Crowdstrike Falcon](https://cartography-cncf.github.io/cartography/modules/crowdstrike/index.html) - Hosts, Spotlight vulnerabilities, CVEs
|
|
96
|
+
- [NIST CVE](https://cartography-cncf.github.io/cartography/modules/cve/index.html) - Common Vulnerabilities and Exposures (CVE) data from NIST database
|
|
97
|
+
- [Lastpass](https://cartography-cncf.github.io/cartography/modules/lastpass/index.html) - users
|
|
98
|
+
- [BigFix](https://cartography-cncf.github.io/cartography/modules/bigfix/index.html) - Computers
|
|
99
|
+
- [Duo](https://cartography-cncf.github.io/cartography/modules/duo/index.html) - Users, Groups, Endpoints
|
|
100
|
+
- [Kandji](https://cartography-cncf.github.io/cartography/modules/kandji/index.html) - Devices
|
|
101
|
+
- [SnipeIT](https://cartography-cncf.github.io/cartography/modules/snipeit/index.html) - Users, Assets
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
## Philosophy
|
|
105
|
+
Here are some points that can help you decide if adopting Cartography is a good fit for your problem.
|
|
106
|
+
|
|
107
|
+
### What Cartography is
|
|
108
|
+
- A simple Python script that pulls data from multiple providers and writes it to a Neo4j graph database in batches.
|
|
109
|
+
- A powerful analysis tool that captures the current snapshot of the environment, building a uniquely useful inventory where you can ask complex questions such as:
|
|
110
|
+
- Which identities have access to which datastores?
|
|
111
|
+
- What are the cross-tenant permission relationships in the environment?
|
|
112
|
+
- What are the network paths in and out of the environment?
|
|
113
|
+
- What are the backup policies for my datastores?
|
|
114
|
+
- Battle-tested in production by [many companies](#who-uses-cartography).
|
|
115
|
+
- Straightforward to extend with your own custom plugins.
|
|
116
|
+
- Provides a useful data-plane that you can build automation and CSPM (Cloud Security Posture Management) applications on top of.
|
|
117
|
+
|
|
118
|
+
### What Cartography is not
|
|
119
|
+
- A near-real time capability.
|
|
120
|
+
- Cartography is not designed for very fast updates. Cartography writes to the database in a batches (not streamed).
|
|
121
|
+
- Cartography is also limited by how most upstream sources only provide APIs to retrieve assets in a batched manner.
|
|
122
|
+
- By itself, Cartography does not capture data changes over time.
|
|
123
|
+
- Although we do include a [drift detection](https://cartography-cncf.github.io/cartography/usage/drift-detect.html) feature.
|
|
124
|
+
- It's also possible to implement other processes in your Cartography installation to make this happen.
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
## Install and configure
|
|
128
|
+
|
|
129
|
+
### Trying out Cartography on a test machine
|
|
130
|
+
Start [here](https://cartography-cncf.github.io/cartography/install.html) to set up a test graph and get data into it.
|
|
131
|
+
|
|
132
|
+
### Setting up Cartography in production
|
|
133
|
+
When you are ready to try it in production, read [here](https://cartography-cncf.github.io/cartography/ops.html) for recommendations on getting cartography spun up in your environment.
|
|
134
|
+
|
|
135
|
+
## Usage
|
|
136
|
+
|
|
137
|
+
### Querying the database directly
|
|
138
|
+
|
|
139
|
+

|
|
140
|
+
|
|
141
|
+
Now that data is in the graph, you can quickly start with our [querying tutorial](https://cartography-cncf.github.io/cartography/usage/tutorial.html). Our [data schema](https://cartography-cncf.github.io/cartography/usage/schema.html) is a helpful reference when you get stuck.
|
|
142
|
+
|
|
143
|
+
### Building applications around Cartography
|
|
144
|
+
Directly querying Neo4j is already very useful as a sort of "swiss army knife" for security data problems, but you can also build applications and data pipelines around Cartography. View this doc on [applications](https://cartography-cncf.github.io/cartography/usage/applications.html).
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
## Community
|
|
148
|
+
|
|
149
|
+
- Hang out with us on Slack: Join the CNCF Slack workspace [here](https://communityinviter.com/apps/cloud-native/cncf), and then join the `#cartography` channel.
|
|
150
|
+
- Talk to us and see what we're working on at our [monthly community meeting](https://calendar.google.com/calendar/embed?src=lyft.com_p10o6ceuiieq9sqcn1ef61v1io%40group.calendar.google.com&ctz=America%2FLos_Angeles).
|
|
151
|
+
- Meeting minutes are [here](https://docs.google.com/document/d/1VyRKmB0dpX185I15BmNJZpfAJ_Ooobwz0U1WIhjDxvw).
|
|
152
|
+
- Recorded videos are posted [here](https://www.youtube.com/playlist?list=PLMga2YJvAGzidUWJB_fnG7EHI4wsDDsE1).
|
|
153
|
+
|
|
154
|
+
## License
|
|
155
|
+
|
|
156
|
+
This project is licensed under the [Apache 2.0 License](LICENSE).
|
|
157
|
+
|
|
158
|
+
## Contributing
|
|
159
|
+
Thank you for considering contributing to Cartography!
|
|
160
|
+
|
|
161
|
+
### Code of conduct
|
|
162
|
+
All contributors and participants of this project must follow the [CNCF code of conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md).
|
|
163
|
+
|
|
164
|
+
### Bug reports and feature requests and discussions
|
|
165
|
+
Submit a GitHub issue to report a bug or request a new feature. If we decide that the issue needs more discussion - usually because the scope is too large or we need to make careful decision - we will convert the issue to a [GitHub Discussion](https://github.com/lyft/cartography/discussions).
|
|
166
|
+
|
|
167
|
+
### Developing Cartography
|
|
168
|
+
|
|
169
|
+
Get started with our [developer documentation](https://cartography-cncf.github.io/cartography/dev/developer-guide.html). Please feel free to submit your own PRs to update documentation if you've found a better way to explain something.
|
|
170
|
+
|
|
171
|
+
## Who uses Cartography?
|
|
172
|
+
|
|
173
|
+
1. [Lyft](https://www.lyft.com)
|
|
174
|
+
1. [Thought Machine](https://thoughtmachine.net/)
|
|
175
|
+
1. [MessageBird](https://messagebird.com)
|
|
176
|
+
1. [Cloudanix](https://www.cloudanix.com/)
|
|
177
|
+
1. [Corelight](https://www.corelight.com/)
|
|
178
|
+
1. {Your company here} :-)
|
|
179
|
+
|
|
180
|
+
If your organization uses Cartography, please file a PR and update this list. Say hi on Slack too!
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
Cartography is a [Cloud Native Computing Foundation](https://www.cncf.io/) sandbox project.<br>
|
|
185
|
+
<div style="background-color: white; display: inline-block; padding: 10px;">
|
|
186
|
+
<img src="docs/root/images/cncf-color.png" alt="CNCF Logo" width="200">
|
|
187
|
+
</div>
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
cartography/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
cartography/__main__.py,sha256=JftXT_nUPkqcEh8uxCCT4n-OyHYqbldEgrDS-4ygy0U,101
|
|
3
|
+
cartography/_version.py,sha256=0sgJhYfa51TBEnCTxKv6kmE6_0dlbwqFC4kFMbUT6nM,416
|
|
3
4
|
cartography/cli.py,sha256=LPjeOkx-cKhRkuhqMicB-0X3SHOjLXxEeGqsp2FtpC0,33285
|
|
4
5
|
cartography/config.py,sha256=ZcadsKmooAkti9Kv0eDl8Ec1PcZDu3lWobtNaCnwY3k,11872
|
|
5
6
|
cartography/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
7
|
cartography/stats.py,sha256=dbybb9V2FuvSuHjjNwz6Vjwnd1hap2C7h960rLoKcl8,4406
|
|
7
8
|
cartography/sync.py,sha256=ziD63T_774gXSuD5zdz6fLGvv1Kt2ntQySSVbmcCZb8,9708
|
|
8
|
-
cartography/util.py,sha256=
|
|
9
|
+
cartography/util.py,sha256=VZgiHcAprn3nGzItee4_TggfsGWxWPTkLN-2MIhYUqM,14999
|
|
9
10
|
cartography/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
11
|
cartography/client/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
12
|
cartography/client/aws/iam.py,sha256=dYsGikc36DEsSeR2XVOVFFUDwuU9yWj_EVkpgVYCFgM,1293
|
|
@@ -221,7 +222,7 @@ cartography/intel/duo/phones.py,sha256=ueJheqSLD2xYcMus5eOiixPYS3_xVjgQzeomjV2a6
|
|
|
221
222
|
cartography/intel/duo/tokens.py,sha256=bEEnjfc4waQnkRHVSnZLAeGE8wHOOZL7FA9m80GGQdQ,2396
|
|
222
223
|
cartography/intel/duo/users.py,sha256=lc7ly_XKeUjJ50szw31WT_GiCrZfGKJv1zVUpmTchh4,4097
|
|
223
224
|
cartography/intel/duo/web_authn_credentials.py,sha256=IbDf3CWqfEyI7f9zJugUvoDd6vZOECfb_7ANZaRYzuk,2636
|
|
224
|
-
cartography/intel/gcp/__init__.py,sha256=
|
|
225
|
+
cartography/intel/gcp/__init__.py,sha256=raPnE8b4WAwLfWJwU2D3JJwSnENHBRi_Bv9x-pMavdQ,15813
|
|
225
226
|
cartography/intel/gcp/compute.py,sha256=CH2cBdOwbLZCAbkfRJkkI-sFybXVKRWEUGDJANQmvyA,48333
|
|
226
227
|
cartography/intel/gcp/crm.py,sha256=Uw5PILhVFhpM8gq7uu2v7F_YikDW3gsTZ3d7-e8Z1_k,12324
|
|
227
228
|
cartography/intel/gcp/dns.py,sha256=y2pvbmV04cnrMyuu_nbW3oc7uwHX6yEzn1n7veCsjmk,7748
|
|
@@ -232,7 +233,7 @@ cartography/intel/github/repos.py,sha256=MmpxZASDJFQxDeSMxX3pZcpxCHFPos4_uYC_cX9
|
|
|
232
233
|
cartography/intel/github/teams.py,sha256=AltQSmBHHmyzBtnRkez9Bo5yChEKBSt3wwzhGcfqmX4,14180
|
|
233
234
|
cartography/intel/github/users.py,sha256=MCLE0V0UCzQm3k3KmrNe6PYkI6usRQZYy2rCN3mT8o0,8948
|
|
234
235
|
cartography/intel/github/util.py,sha256=K0cXOPuhnGvN-aqcSUBO3vTuKQLjufVal9kn2HwOpbo,8110
|
|
235
|
-
cartography/intel/gsuite/__init__.py,sha256=
|
|
236
|
+
cartography/intel/gsuite/__init__.py,sha256=Ed5Lab8E_OpRY1JM7NBaQwajfbG2MCACU21xKS9_ETY,4636
|
|
236
237
|
cartography/intel/gsuite/api.py,sha256=qgEnAcajYGsgC5XNKMnYxOli8Su9wooaEnBBEpsk2EY,10336
|
|
237
238
|
cartography/intel/jamf/__init__.py,sha256=Nof-LrUeevoieo6oP2GyfTwx8k5TUIgreW6hSj53YjQ,419
|
|
238
239
|
cartography/intel/jamf/computers.py,sha256=EfjlupQ-9HYTjOrmuwrGuJDy9ApAnJvk8WrYcp6_Jkk,1673
|
|
@@ -353,9 +354,9 @@ cartography/models/snipeit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
|
|
|
353
354
|
cartography/models/snipeit/asset.py,sha256=FyRAaeXuZjMy0eUQcSDFcgEAF5lbLMlvqp1Tv9d3Lv4,3238
|
|
354
355
|
cartography/models/snipeit/tenant.py,sha256=p4rFnpNNuF1W5ilGBbexDaETWTwavfb38RcQGoImkQI,679
|
|
355
356
|
cartography/models/snipeit/user.py,sha256=MsB4MiCVNTH6JpESime7cOkB89autZOXQpL6Z0l7L6o,2113
|
|
356
|
-
cartography-0.98.
|
|
357
|
-
cartography-0.98.
|
|
358
|
-
cartography-0.98.
|
|
359
|
-
cartography-0.98.
|
|
360
|
-
cartography-0.98.
|
|
361
|
-
cartography-0.98.
|
|
357
|
+
cartography-0.98.0rc4.dist-info/LICENSE,sha256=kvLEBRYaQ1RvUni6y7Ti9uHeooqnjPoo6n_-0JO1ETc,11351
|
|
358
|
+
cartography-0.98.0rc4.dist-info/METADATA,sha256=4GIMY8-iRiXERs3qgTwJXTwwIy2nUvfSVgFBPIcGldE,11473
|
|
359
|
+
cartography-0.98.0rc4.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
360
|
+
cartography-0.98.0rc4.dist-info/entry_points.txt,sha256=GVIAWD0o0_K077qMA_k1oZU4v-M0a8GLKGJR8tZ-qH8,112
|
|
361
|
+
cartography-0.98.0rc4.dist-info/top_level.txt,sha256=BHqsNJQiI6Q72DeypC1IINQJE59SLhU4nllbQjgJi9g,12
|
|
362
|
+
cartography-0.98.0rc4.dist-info/RECORD,,
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: cartography
|
|
3
|
-
Version: 0.98.0rc2
|
|
4
|
-
Summary: Explore assets and their relationships across your technical infrastructure.
|
|
5
|
-
Home-page: https://www.github.com/cartography-cncf/cartography
|
|
6
|
-
Maintainer: Cartography Contributors
|
|
7
|
-
License: apache2
|
|
8
|
-
Classifier: Development Status :: 4 - Beta
|
|
9
|
-
Classifier: Intended Audience :: Developers
|
|
10
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
-
Classifier: Natural Language :: English
|
|
12
|
-
Classifier: Programming Language :: Python
|
|
13
|
-
Classifier: Programming Language :: Python :: 3
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
-
Classifier: Topic :: Security
|
|
16
|
-
Classifier: Topic :: Software Development :: Libraries
|
|
17
|
-
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
|
-
Description-Content-Type: text/markdown
|
|
19
|
-
License-File: LICENSE
|
|
20
|
-
Requires-Dist: backoff>=2.1.2
|
|
21
|
-
Requires-Dist: boto3>=1.15.1
|
|
22
|
-
Requires-Dist: botocore>=1.18.1
|
|
23
|
-
Requires-Dist: dnspython>=1.15.0
|
|
24
|
-
Requires-Dist: neo4j<5.0.0,>=4.4.4
|
|
25
|
-
Requires-Dist: policyuniverse>=1.1.0.0
|
|
26
|
-
Requires-Dist: google-api-python-client>=1.7.8
|
|
27
|
-
Requires-Dist: oauth2client>=4.1.3
|
|
28
|
-
Requires-Dist: marshmallow>=3.0.0rc7
|
|
29
|
-
Requires-Dist: oci>=2.71.0
|
|
30
|
-
Requires-Dist: okta<1.0.0
|
|
31
|
-
Requires-Dist: pyyaml>=5.3.1
|
|
32
|
-
Requires-Dist: requests>=2.22.0
|
|
33
|
-
Requires-Dist: statsd
|
|
34
|
-
Requires-Dist: packaging
|
|
35
|
-
Requires-Dist: python-digitalocean>=1.16.0
|
|
36
|
-
Requires-Dist: adal>=1.2.4
|
|
37
|
-
Requires-Dist: azure-cli-core>=2.26.0
|
|
38
|
-
Requires-Dist: azure-mgmt-compute>=5.0.0
|
|
39
|
-
Requires-Dist: azure-mgmt-resource>=10.2.0
|
|
40
|
-
Requires-Dist: azure-mgmt-cosmosdb>=6.0.0
|
|
41
|
-
Requires-Dist: msrestazure>=0.6.4
|
|
42
|
-
Requires-Dist: azure-mgmt-storage>=16.0.0
|
|
43
|
-
Requires-Dist: azure-mgmt-sql<=1.0.0
|
|
44
|
-
Requires-Dist: azure-identity>=1.5.0
|
|
45
|
-
Requires-Dist: kubernetes>=22.6.0
|
|
46
|
-
Requires-Dist: pdpyras>=4.3.0
|
|
47
|
-
Requires-Dist: crowdstrike-falconpy>=0.5.1
|
|
48
|
-
Requires-Dist: python-dateutil
|
|
49
|
-
Requires-Dist: xmltodict
|
|
50
|
-
Requires-Dist: duo-client
|
|
51
|
-
Requires-Dist: importlib-resources; python_version < "3.7"
|
|
52
|
-
|
|
53
|
-
file: README.md
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|