sandbox icon indicating copy to clipboard operation
sandbox copied to clipboard

[Sandbox] Cartography

Open achantavy opened this issue 2 years ago • 12 comments

Application contact emails

[email protected], [email protected]

Project Summary

Cartography builds a self-maintaining map of your infrastructure.

Project Description

Cartography consolidates infrastructure assets across multiple vendors and the relationships between them in a knowledge graph powered by an openCypher-compatible database.

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.

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.

To provide specific examples, Cartography can be used to better understand AWS IAM permissions and perform automated vulnerability management on container images.

Org repo URL (provide if all repos under the org are in scope of the application)

N/A

Project repo URL in scope of application

https://github.com/lyft/cartography/

Additional repos in scope of the application

N/A

Website URL

https://github.com/lyft/cartography/

Roadmap

https://github.com/orgs/lyft/projects/26/views/1

Roadmap context

We built a new data model to make plugin development less error prone and improve write performance. We are currently focused on migrating older plugins to use it.

Contributing Guide

https://github.com/lyft/cartography/#contributing

Code of Conduct (CoC)

https://github.com/lyft/cartography/#code-of-conduct

Adopters

https://github.com/lyft/cartography/#who-uses-cartography

Contributing or Sponsoring Org

https://github.com/lyft

Maintainers file

https://github.com/lyft/cartography/blob/master/MAINTAINERS.md

IP Policy

  • [X] If the project is accepted, I agree the project will follow the CNCF IP Policy

Trademark and accounts

  • [X] If the project is accepted, I agree to donate all project trademarks and accounts to the CNCF

Why CNCF?

Cartography was open sourced by Lyft in March 2019 and we are proud of how the community has grown since then. We believe Cartography solves asset management and analysis problems in a useful way, and would like to continue to grow the project. However, this is not possible over the long run if its steward is just one company. By moving the project to a neutral open source foundation such as the CNCF, we hope that we will attract more users and contributors so that we can better sustain a steady stream of maintainers.

Benefit to the Landscape

We believe that having a Cartography-generated map over your infrastructure is a game changer for any security or devops shop. Cartography is not the only cloud inventory tool out there, but it differentiates itself in that it

  • Has a healthy ecosystem of documented use-cases. Here is a sample of public contributions not created by Lyft employees: 1, 2, 3, 4, 5, 6
  • Has a robust plugin architecture that makes it easy to extend
  • Is easy to adopt in that it is shipped as a simple Python script and is flexible about how to deploy it.

Cloud Native 'Fit'

Landscape: Provisioning - Security & Compliance. Cartography is a foundational security tool that makes it easier to manage your infrastructure.

Its graph approach makes it easy to answer questions including but not limited to

  • Who has read access to my sensitive datastores and how
  • What is the effective blast radius of a compromised asset in my environment
  • Which of my assets are open to the internet
  • What are my cross-vendor trust relationships
  • From which parent container image was this vulnerability introduced to my environment and who should I assign the action item to

As such, it fits in “Provisioning” and “Security & Compliance”.

TAGs: TAG Security

Cloud Native 'Integration'

Cartography uses the Neo4j graph database to build knowledge graphs of infra across multiple resource types.

Cloud Native Overlap

Trivy: As described in this blog, Cartography knowledge graphs can be used to orchestrate Trivy image scans so that we can identify whether a vulnerability was introduced by the service itself or by one of its parent images several layers up – a time-consuming task solved quickly using a graph approach.

Similar projects

Similar CNCF projects

  • ThreatMapper provides a graph view over network flows to prioritize threat scan results. Cartography is more general purpose as it can be applied to multiple infra/security scenarios, and is more low level in the sense that it only stores data to a graph database and does not include a user interface out of the box (other than the default Neo4j web interface).

Non-CNCF similar projects

  • CloudQuery pulls data from multiple sources and loads it to multiple destinations. Cartography focuses on knowledge graphs.
  • BloodHound creates knowledge graphs for identifying attack paths in Microsoft Windows domain environments. Cartography focuses on cloud assets and relating resources from one provider to another.

Landscape

No

Business Product or Service to Project separation

N/A

Project presentations

Yes.

  • Meeting notes: 2020-03-11
  • https://github.com/cncf/sig-security/issues/347
  • Slides

Project champions

N/A

Additional information

Thank you for your consideration!

achantavy avatar Aug 28 '23 23:08 achantavy

FWIW - I think this would be an amazing project to bring under CNCF! Defenders think in lists - attackers think in graphs as a wise person once noted. Also as a security TAG participant and previous assessor - and graphista - I'm happy to volunteer to lead a security review. I don't have any direct relationship to the project but I am very well versed in graphs and leading the K8s threat modeling and helped on the last K8s (and future) 3rd party audit efforts so I feel equipped to tackle any security reviews needed - with help from the TAG.

sunstonesecure-robert avatar Jan 31 '24 17:01 sunstonesecure-robert

I'm not seeing cloud-native elements to this project. While it looks very useful on general principles, I'm not seeing any integration with existing cloud-native projects, nor dependencies on containers, microservices, or Kubernetes. Can you explain why Cartography is suitable for the CNCF in particular, instead of "a neutral foundation"?

jberkus avatar Feb 27 '24 18:02 jberkus

Hi @jberkus, thanks for your read.

While it doesn't have a specific dependency on Kubernetes, cartography is suitable for the CNCF in particular because was built to solve problems that are uniquely complicated in cloud native environments such as reasoning about permissions, networking, and container image lineage.

cartography also complements existing cloud-native tools and methodologies even though it doesn't directly integrate with them. Here are a few examples:

  • Cross-vendor cross-cloud auditing: cloud-native environments often involve a mix of on-prem and cloud resources across multiple vendors that change over time, and cartography is useful for maintaining an inventory and providing a centralized view of the entire ecosystem. This is useful for reporting and regulatory requirements, and is described much more eloquently in Marco's blog Mapping Moving Clouds.

  • Security incident response: if a detection agent like Falco detects that a malicious shell has been launched in a container, it can send security alerts to an observability platform, and an incident handler can then use cartography to put the alert into context:

    • What service does that container belong to?
    • Assuming this service is compromised, what other assets is the malicious actor able to access or pivot to? What is the blast radius?
    • Who is on call for the service and who else do I need to notify?
  • Microservice comms: cartography is not directly involved in the network comms that happen in a service mesh, but it complements them by visualizing the topology and dependencies between services, such as how it can show K8s nodes grouped by cluster and how network ingress and egress is controlled, or how it can maintain an inventory of all known URI endpoints of an application and map them to owners.

achantavy avatar Feb 27 '24 22:02 achantavy

@achantavy thanks for all the info. The presentation to TAG-Security was quite a while ago (March 2020) and at that time wasn't looking to join the CNCF (based on the meeting notes). Can you add a quick summary of what changed since then? Thanks.

rochaporto avatar Apr 03 '24 13:04 rochaporto

Hi @rochaporto, back in 2020 we asked about the steps needed to join CNCF and decided that it wasn't the right time because the pandemic had just started and we had other priorities.

In the 4 years since then, I think we've hit a lot of the CNCF project criteria - e.g. adoption by multiple companies, public roadmaps, decisions fully made in the open, various specific information available in docs, etc - as cartography needed to grow that way. The project now has a more defined identity in that knows what it is - a uniquely useful analysis capability - and what it isn't - e.g. it's not a near real-time detection tool.

In a nutshell, we're pursuing CNCF now because the project has reached the right maturity level to think about longer term strategic direction and ownership beyond just one company.

achantavy avatar Apr 04 '24 07:04 achantavy

Thanks @achantavy .

The TOC reviewed this sandbox submission on April 9th.

The CNCF staff will look at the license implication of the neo4j dependency (cc @jeefy @amye) but once that's sorted it out we can go for a vote without having to re-discuss during a sandbox review session.

In the meantime we also recommend the project gives an update to TAG-Security - given the maturity of the project a move to incubation might be something to consider soon. The discussion with the TAG should help understanding if this would be a good option.

rochaporto avatar Apr 09 '24 19:04 rochaporto

Hi @rochaporto , thanks for your reply and for you and the team's time reviewing!

The CNCF staff will look at the license implication of the neo4j dependency (cc @jeefy @amye) but once that's sorted it out we can go for a vote without having to re-discuss during a sandbox review session.

Appreciate it, please write back when the license questions are resolved.

In the meantime we also recommend the project gives an update to TAG-Security

I will reach out to TAG-Security to give an updated presentation.

given the maturity of the project a move to incubation might be something to consider soon. The discussion with the TAG should help understanding if this would be a good option.

I'm looking forward to learning more from the TAG. One logistics question: how would this work given that we are not in the sandbox yet -- assuming the license issues end up ok, would it take longer for us to be admitted to sandbox, or admitted directly into incubation?

Thanks again!

achantavy avatar May 15 '24 20:05 achantavy

@achantavy Sandbox applications are fairly lightweight as compared to direct application to Incubation. While most projects apply to sandbox and then apply to incubation when they are ready, we occasionally have projects that are well advanced to apply directly to incubation.

@jeefy @mrbobbytables Were the license implications here sorted?

TheFoxAtWork avatar Jun 17 '24 14:06 TheFoxAtWork

Hi @jeefy, @mrbobbytables, @TheFoxAtWork - are there any updates on the license situation?

We'd like to continue this sandbox application and pursue incubation later.

achantavy avatar Jul 16 '24 04:07 achantavy

Thank you for the ping. CNCF is working to get a status on this.

TheFoxAtWork avatar Jul 16 '24 13:07 TheFoxAtWork

@achantavy Heya! We have a "few" follow-up questions if you wouldn't mind. :)

  • Is Cartography using neo4j’s Community Edition, licensed under GPL-3.0, https://github.com/neo4j/neo4j?
  • Is Cartography distributing neo4j, or does each downstream user have to obtain neo4j themselves?
    • If Cartography is distributing neo4j, are you also distributing neo4j’s source code and its GPL-3.0 license text + copyright notices?
  • Is Cartography modifying neo4j in any way?
  • Is neo4j a mandatory dependency for Cartography, or is it one of multiple options available to the end user?
  • Please briefly describe the functionality / purpose that neo4j serves for Cartography.
  • How does Cartography interact with neo4j, and how are the two combined or linked together?
    • For example, does Cartography only interact with neo4j through an official Apache-2.0 driver provided by neo4j, such as https://github.com/neo4j/neo4j-python-driver?
    • Is neo4j included together in an executable with Cartography? Or does neo4j run as a separate executable / process?
    • Do the two operate together in a shared memory space?
    • (See https://www.gnu.org/licenses/gpl-faq.en.html#MereAggregation for more specifics on what we’re trying to get at with these questions.)

Thanks!!

jeefy avatar Jul 17 '24 17:07 jeefy

@jeefy thanks so much for your reply! Here are the answers:

Is Cartography using neo4j’s Community Edition, licensed under GPL-3.0, https://github.com/neo4j/neo4j?

Yes, Cartography uses neo4j community edition.

Is Cartography distributing neo4j, or does each downstream user have to obtain neo4j themselves?

No, we do not distribute neo4j, each downstream user obtains neo4j themselves.

If Cartography is distributing neo4j, are you also distributing neo4j’s source code and its GPL-3.0 license text + copyright notices?

N/A

Is Cartography modifying neo4j in any way?

No, Cartography does not modify Neo4j.

Is neo4j a mandatory dependency for Cartography, or is it one of multiple options available to the end user?

Yes, neo4j is a mandatory dependency.

Please briefly describe the functionality / purpose that neo4j serves for Cartography.

It's the main datastore: we need neo4j's graph functionality. In the future we could add support for other graph DBs but at this time neo4j is our principal datastore.

How does Cartography interact with neo4j, and how are the two combined or linked together? For example, does Cartography only interact with neo4j through an official Apache-2.0 driver provided by neo4j, such as https://github.com/neo4j/neo4j-python-driver?

Yes, this is correct: Cartography only interacts with neo4j through the official Apache-2.0 driver provided by neo4j.

Is neo4j included together in an executable with Cartography? Or does neo4j run as a separate executable / process?

No, neo4j is not included in an executable with Cartography. Cartography is a python script that talks to neo4j via the neo4j-driver.

Do the two operate together in a shared memory space? (See https://www.gnu.org/licenses/gpl-faq.en.html#MereAggregation for more specifics on what we’re trying to get at with these questions.)

No, the two do not operate together in a shared memory space.

achantavy avatar Jul 17 '24 19:07 achantavy

Hi @jeefy and everyone, are there any updates from the meeting on August 13? Please let me know if you need more information.

achantavy avatar Aug 16 '24 16:08 achantavy

@achantavy thank you for your patience. I've asked Staff to check in on any additional blockers that prevent this from moving to a vote.

TheFoxAtWork avatar Aug 19 '24 13:08 TheFoxAtWork

(proxy for @jeefy) it's going to be a longer discussion around neo4j as a dependency, but at the moment it should not serve as a blocker.

We are good to move this to a vote. 👍

/vote

mrbobbytables avatar Aug 20 '24 02:08 mrbobbytables

Vote created

@mrbobbytables has called for a vote on [Sandbox] Cartography (#58).

The members of the following teams have binding votes:

Team
@cncf/cncf-toc

Non-binding votes are also appreciated as a sign of support!

How to vote

You can cast your vote by reacting to this comment. The following reactions are supported:

In favor Against Abstain
👍 👎 👀

Please note that voting for multiple options is not allowed and those votes won't be counted.

The vote will be open for 2months 30days 2h 52m 48s. It will pass if at least 66% of the users with binding votes vote In favor 👍. Once it's closed, results will be published here as a new comment.

git-vote[bot] avatar Aug 20 '24 02:08 git-vote[bot]

/check-vote

mrbobbytables avatar Aug 20 '24 22:08 mrbobbytables

Vote status

So far 27.27% of the users with binding vote are in favor (passing threshold: 66%).

Summary

In favor Against Abstain Not voted
3 0 0 8

Binding votes (3)

User Vote Timestamp
TheFoxAtWork In favor 2024-08-20 15:27:13.0 +00:00:00
cathyhongzhang In favor 2024-08-20 15:27:38.0 +00:00:00
angellk In favor 2024-08-20 21:46:50.0 +00:00:00
@dims Pending
@rochaporto Pending
@mauilion Pending
@linsun Pending
@dzolotusky Pending
@kevin-wangzefeng Pending
@nikhita Pending
@kgamanji Pending

Non-binding votes (4)

User Vote Timestamp
chandanchowdhury In favor 2024-08-20 16:58:27.0 +00:00:00
anshumanbh In favor 2024-08-20 17:29:28.0 +00:00:00
csanders-git In favor 2024-08-20 21:04:06.0 +00:00:00
TehWebby In favor 2024-08-20 21:04:26.0 +00:00:00

git-vote[bot] avatar Aug 20 '24 22:08 git-vote[bot]

/check-vote

mrbobbytables avatar Aug 21 '24 23:08 mrbobbytables

Vote status

So far 63.64% of the users with binding vote are in favor (passing threshold: 66%).

Summary

In favor Against Abstain Not voted
7 0 0 4

Binding votes (7)

User Vote Timestamp
linsun In favor 2024-08-21 13:42:56.0 +00:00:00
angellk In favor 2024-08-20 21:46:50.0 +00:00:00
TheFoxAtWork In favor 2024-08-20 15:27:13.0 +00:00:00
cathyhongzhang In favor 2024-08-20 15:27:38.0 +00:00:00
rochaporto In favor 2024-08-21 7:28:10.0 +00:00:00
dzolotusky In favor 2024-08-21 13:40:55.0 +00:00:00
kevin-wangzefeng In favor 2024-08-21 0:45:09.0 +00:00:00
@dims Pending
@mauilion Pending
@nikhita Pending
@kgamanji Pending

Non-binding votes (7)

User Vote Timestamp
chandanchowdhury In favor 2024-08-20 16:58:27.0 +00:00:00
anshumanbh In favor 2024-08-20 17:29:28.0 +00:00:00
csanders-git In favor 2024-08-20 21:04:06.0 +00:00:00
TehWebby In favor 2024-08-20 21:04:26.0 +00:00:00
feng-tao In favor 2024-08-21 0:11:18.0 +00:00:00
gedigi In favor 2024-08-21 4:55:00.0 +00:00:00
kunaals In favor 2024-08-21 5:42:00.0 +00:00:00

git-vote[bot] avatar Aug 21 '24 23:08 git-vote[bot]

Vote closed

The vote passed! 🎉

72.73% of the users with binding vote were in favor (passing threshold: 66%).

Summary

In favor Against Abstain Not voted
8 0 0 3

Binding votes (8)

User Vote Timestamp
@cathyhongzhang In favor 2024-08-20 15:27:38.0 +00:00:00
@TheFoxAtWork In favor 2024-08-20 15:27:13.0 +00:00:00
@kevin-wangzefeng In favor 2024-08-21 0:45:09.0 +00:00:00
@dzolotusky In favor 2024-08-21 13:40:55.0 +00:00:00
@nikhita In favor 2024-08-23 10:43:24.0 +00:00:00
@rochaporto In favor 2024-08-21 7:28:10.0 +00:00:00
@angellk In favor 2024-08-20 21:46:50.0 +00:00:00
@linsun In favor 2024-08-21 13:42:56.0 +00:00:00

Non-binding votes (10)

User Vote Timestamp
@chandanchowdhury In favor 2024-08-20 16:58:27.0 +00:00:00
@anshumanbh In favor 2024-08-20 17:29:28.0 +00:00:00
@csanders-git In favor 2024-08-20 21:04:06.0 +00:00:00
@TehWebby In favor 2024-08-20 21:04:26.0 +00:00:00
@feng-tao In favor 2024-08-21 0:11:18.0 +00:00:00
@gedigi In favor 2024-08-21 4:55:00.0 +00:00:00
@kunaals In favor 2024-08-21 5:42:00.0 +00:00:00
@sunstonesecure-robert In favor 2024-08-21 23:39:32.0 +00:00:00
@kledo-lyft In favor 2024-08-22 0:11:12.0 +00:00:00
@alejandroroiz In favor 2024-08-22 20:16:41.0 +00:00:00

git-vote[bot] avatar Aug 23 '24 10:08 git-vote[bot]

Thank you everyone for your review and votes! Really excited for what's next.

achantavy avatar Aug 23 '24 20:08 achantavy

Welcome and congrats on getting accepted as a CNCF Sandbox project!

You can get started on your on-boarding checklist here: https://github.com/cncf/sandbox/issues/135

and if you have any questions, please don't hesitate to reach out!

Cmierly avatar Aug 29 '24 18:08 Cmierly

With https://github.com/cncf/sandbox/issues/135 created, we can go ahead and close this out :)

Congrats again!

mrbobbytables avatar Sep 03 '24 20:09 mrbobbytables