Identity & Access Management simplified and secure.

IAM Zero

Identity & Access Management simplified and secure.

tweet slack

πŸš€ Get Started | πŸ“– Support


What is IAM Zero?

IAM Zero detects identity and access management issues and automatically suggests least-privilege policies. It does this by capturing errors in applications you build or commands that you run which use. By detecting the error and matching it against our Access Advisory lists IAM Zero can instantly provide a least-privilege policy recommendation, customised to your cloud environment.

IAM Zero currently works for AWS but our roadmap includes other cloud platforms like GCP, Azure, and Kubernetes.

Documentation

Get started by reading our documentation.

Contributing

See CONTRIBUTING.md for information on how to contribute. We welcome all contributors - join our Slack to discuss the project!

Security

See SECURITY.md for security information. You can view our full security documentation on the IAM Zero website.

Acknowledgements

Thankyou to Ian Mckay and the Netflix ConsoleMe team for providing valuable insights which have formed the basis of IAM Zero's design.

Owner
Common Fate
Security tools for innovative teams.
Common Fate
Comments
  • Allow generating recommendations for AWS user ARNs

    Allow generating recommendations for AWS user ARNs

    An initial attempt at fixing #13. I am not too familiar with the codebase, so feel free to let me know if this is not the right approach for fixing this issue or if I missed a place where this code needs to be updated πŸ˜„

  • Recommendations break if the ARN is a user (instead of a role)

    Recommendations break if the ARN is a user (instead of a role)

    Hi, I was playing around with iamzero (really cool btw, love the work) when I noticed that recommendations wasn't working for me. I was using the iamzero-python-example and the provided guide and it still wasn't working. Then I noticed that the correct information was being transmitted to iamzero from the Python library, but it was erroring on the Go side. Specifically, in pkg/recommendations/arn.go there is a check for regex and it matches with a role but not a user. The error:

    ... "msg":"web handler error","err":"could not find role in ARN arn:aws:iam::REDACTED:user/USERNAME" ...
    

    I worked on an initial fix for this, but not sure if that's the approach you want to take!

  • Store events in Postgres

    Store events in Postgres

    Also reorganises storage objects into a single Storage struct.

    This means we use h.Storage.Findings rather than h.findingsStorage and will mean less boilerplate config and injection of storage when we add new metadata entities to be stored.

  • Store findings in Postgres

    Store findings in Postgres

    Adds Postgres as a storage driver to store Findings in. I've also renamed some variables to be a bit clearer. In particular I've renamed Resource to be CloudResourceInstance to indicate a concrete deployed cloud resource.

    Temporarily, I've removed some of the CDKResource structs and functionality. We need to shift the CDKResource information away from the current Resource struct and into the CloudResourceTemplate struct once we create it.

    I've also added an integration testing package so that we can easily write unit tests that use a real Postgres database, running in a Docker container. These tests are separated from the regular unit tests through a Go build flag as they require Postgres to be available on localhost. These tests run in a new test suite in GitHub actions too.

  • Support for multiple transports, break collector into it's own service

    Support for multiple transports, break collector into it's own service

    This PR refactors the project structure to separate the Collector application (responsible for receiving events from IAM Zero clients) and the Console application (the web app where least-privilege permissions are shown). The structure has been inspired by the Jaeger codebase - in particular, I have implemented an all-in-one service which runs both the collector and console together in separate goroutines within the same binary. This should make local development and testing very fast but allow the services to be run separately in a production deployment.

    Part of this change separates the ports used for the Collector and Console applications. The Collector has a separate security context to the Console - it is designed to be public facing and only has an endpoint to receive events. The Console on the other hand is intended for authorised users only and allows policy ARNs and data to be read. Separating the ports allows different ingress configurations to be applied for each. In our testing environment we have configured an AWS ALB with SSO to securely access the Console, whereas the Collector is publicly exposed as it currently handles auth at the application level.

    Additionally this PR adds support for the Collector to listen to an SQS queue to receive events (we shipped support for the Python library to use customisable transports in https://github.com/common-fate/iamzero-python/pull/6). This functionality is disabled by default and is customisable through CLI flags and environment variables. In future we can use the same pattern to allow new listeners to be added to the Collector.

    Breaking changes

    • IAM Zero now uses three ports. 13991 is the port that the collector listens for events sent via HTTP on. 14321 is the port that the console application (both the web app and the API) are served on. 10866 is used as an "admin" port for healthchecks (and in future, metrics can be exposed on this port). Using a separate port for healthchecks and metrics allows us to avoid publicly exposing this information in a deployment.

    Closes #17.

  • Don't hardcode resources in the IAM Zero console

    Don't hardcode resources in the IAM Zero console

    Our reworked policy editor is great, but the "resource" column in the table is always set to iamzero-test-access-bucket. This is a hold-over from when we did the initial frontend UI implementation, which used fixture data.

    image

    A good initial implementation here would be take the "resource" fields from our policy advice - i.e.

    						{
    							Action: []string{
    								"dynamodb:GetShardIterator",
    								"dynamodb:Scan",
    								"dynamodb:Query",
    								"dynamodb:DescribeStream",
    								"dynamodb:GetRecords",
    								"dynamodb:ListStreams",
    							},
    							Resource: []string{
    								"arn:aws:dynamodb:{{ .Region }}:{{ .Account }}:table/{{ .Table }}/index/*",
    								"arn:aws:dynamodb:{{ .Region }}:{{ .Account }}:table/{{ .Table }}/stream/*",
    							},
    						},
    

    and take the templated variables in the Resource section, excluding the region and the account, as the resource name. So in the above example the resource name would be the DynamoDB table and we could include this in the UI.

  • `iamzero local` command is broken

    `iamzero local` command is broken

    Some of the latest changes around making IAM Zero deployable as a service have broken the local workflow.

    Loading your iamzero config file (/Users/chrisnorman/.iamzero.ini)
    The URL in your config file (https://console.demo.iamzero.dev) was different to the URL your local iamzero server will run on (http://localhost:9090). Updating your config file URL to be http://localhost:9090...
    Running local version of iamzero - web console can be accessed at http://localhost:9090
    2021/07/16 15:47:41 token storage backend  is not supported
    exit status 1
    
  • Add tracing

    Add tracing

    Adds support for tracing with OpenTelemetry. To be flexible with deployment strategies we are using the OpenTelemetry Collector service which allows traces to be forwarded into downstream storage (Jaeger, Zipkin, etc).

    This won't work in a deployed environment yet as the collector URL is hardcoded to localhost! But I think if we add tracing earlier rather than later we'll get an idea of performance while we develop IAM Zero. This is not production ready either as currently we sample 100% of traces.

    Tracing is only active if IAMZERO_TRACING_ENABLED is set.

  • Add token metadata storage

    Add token metadata storage

    This PR adds functionality for users to generate tokens through the IAM Zero console (and through our API!). These tokens are used by IAM Zero clients to authorise against the server while sending IAM events. Closes #20.

    image

  • Support multiple users accessing the IAM Zero console

    Support multiple users accessing the IAM Zero console

    Closes #19. The initial implementation relies on handling authentication at the load balancer level (the demonstration I have been testing is an AWS Application Load Balancer with Cognito authentication). In future we should support some additional flexibility, maybe OAuth2.0 auth at the application level.

  • Support multiple users accessing the IAM Zero console

    Support multiple users accessing the IAM Zero console

    Currently the IAM Zero console allows authentication via a single token. We should expand this to support multiple users accessing the console under their own identities. An initial implementation could use an external OIDC identity provider such as AWS Cognito (and assume we use an authentication proxy like an application load balancer with Cognito integration)

    image

  • Bump minimist from 1.2.5 to 1.2.6 in /web

    Bump minimist from 1.2.5 to 1.2.6 in /web

    Bumps minimist from 1.2.5 to 1.2.6.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump async from 2.6.3 to 2.6.4 in /web

    Bump async from 2.6.3 to 2.6.4 in /web

    Bumps async from 2.6.3 to 2.6.4.

    Changelog

    Sourced from async's changelog.

    v2.6.4

    • Fix potential prototype pollution exploit (#1828)
    Commits
    Maintainer changes

    This version was pushed to npm by hargasinski, a new releaser for async since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump nanoid from 3.1.20 to 3.3.4 in /web

    Bump nanoid from 3.1.20 to 3.3.4 in /web

    Bumps nanoid from 3.1.20 to 3.3.4.

    Changelog

    Sourced from nanoid's changelog.

    3.3.4

    3.3.3

    • Reduced size (by Anton Khlynovskiy).

    3.3.2

    • Fixed enhanced-resolve support.

    3.3.1

    • Reduced package size.

    3.3

    • Added size argument to function from customAlphabet (by Stefan Sundin).

    3.2

    • Added --size and --alphabet arguments to binary (by Vitaly Baev).

    3.1.32

    • Reduced async exports size (by Artyom Arutyunyan).
    • Moved from Jest to uvu (by Vitaly Baev).

    3.1.31

    • Fixed collision vulnerability on object in size (by Artyom Arutyunyan).

    3.1.30

    • Reduced size for project with brotli compression (by Anton Khlynovskiy).

    3.1.29

    • Reduced npm package size.

    3.1.28

    • Reduced npm package size.

    3.1.27

    • Cleaned dependencies from development tools.

    3.1.26

    • Improved performance (by Eitan Har-Shoshanim).
    • Reduced npm package size.

    3.1.25

    • Fixed browserify support.

    3.1.24

    • Fixed browserify support (by Artur Paikin).

    3.1.23

    • Fixed esbuild support.

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Improve UX for actions we don't yet have least-privilege advisories for

    Improve UX for actions we don't yet have least-privilege advisories for

    https://github.com/common-fate/iamzero-python-example/pull/6 adds some new examples, including a specific example which calls an AWS API we don't yet provide least-privilege advisories for. Currently when you run this example, this is what IAM Zero shows:

    image

    Which is not too helpful to a user!

    Even though we don't have an advisory, we still capture a lot of information from the API calls which our users could use to quickly build policies themselves. We should improve the IAM Zero console to allow users to quickly draft policy statements based on our recorded information.

  • Group similar actions together

    Group similar actions together

    We should group actions together if they are a similar API call - for example, the below policy should only show a single action as the same S3 API has been called multiple times.

    image

rpCheckup is an AWS resource policy security checkup tool that identifies public, external account access, intra-org account access, and private resources.
rpCheckup is an AWS resource policy security checkup tool that identifies public, external account access, intra-org     account access, and private resources.

rpCheckup - Catch AWS resource policy backdoors like Endgame rpCheckup is an AWS resource policy security checkup tool that identifies public, externa

Dec 26, 2022
Zms - The Bhojpur ZMS is a software-as-a-service product applied in different risk management areas. It is a containment Zone Management System based on Bhojpur.NET Platform.

Bhojpur ZMS - Zone Management System The Bhojpur ZMS is a software-as-a-service product used as a Zone Management System based on Bhojpur.NET Platform

Sep 26, 2022
Go library to access geocoding and reverse geocoding APIs

GeoService in Go Code Coverage A geocoding service developed in Go's way, idiomatic and elegant, not just in golang. This product is designed to open

Dec 23, 2022
Automatically roll your AWS IAM access key (aws_access_key_id) and secret key (aws_secret_access_key).

roll-it Keep your AWS Credentials fresh ?? on Windows, Mac, Linux (arm or x86)! What it Does Programmatically rotate your AWS IAM access keys and secr

Jan 6, 2023
Useful AWS access key attribution tool
Useful AWS access key attribution tool

whodunnit Working towards this: https://twitter.com/__steele/status/1410437278489477120. Dumping code now to validate if it's useful or not before inv

Jan 1, 2022
SDK to provide access to JUNO API (Open Banking) (2.0.0)

Juno API - Golang SDK Juno API (Open Banking) (2.0.0) Why? This project is part of my personal portfolio, so, I'll be happy if you could provide me an

Aug 9, 2021
Graph Role-Based Access Control by Animeshon
Graph Role-Based Access Control by Animeshon

gRBAC - Graph Role-Based Access Control A cloud-native graph implementation of the Role-Based Access Control (RBAC) authorization architecture powered

Nov 9, 2022
A package for access aws service using AWS SDK for Golang

goaws ?? A package for access aws service using AWS SDK for Golang Advantage with goaws package Example for get user list IAM with AWS SDK for Golang

Nov 25, 2021
Access to C's sigqueue from Go

sigqueue-go This is a small module which provides an interface to C's sigqueue (via the rt_sigqueueinfo system call) in Go, which allows passing value

May 1, 2022
Package figtree provides a multi-paradigm SDK for sophisticated configuration file access

Package figtree provides a multi-paradigm SDK for sophisticated configuration file access. Motivation Figtree syntax is based on classic key/value pai

Dec 31, 2021
Unofficial SDK to access for Open Threat Exchange (OTX) in Go

gotx Unofficial SDK to access for Open Threat Exchange (OTX) API in Go. Usage package main import ( "context" "fmt" "os" "github.com/m-mizutani/

Feb 12, 2022
πŸ’Ύ Wolke API is the API behind Wolke image storage and processing aswell as user management

?? Wolke API Wolke API is the API behind Wolke image storage and processing aswell as user management Deploying To deploy Wolke Bot you'll need podman

Dec 21, 2021
Open Cluster Management API

Open Cluster Management API Community, discussion, contribution, and support Getting Started Prerequisites Security Response The api repository define

Dec 23, 2022
RESTful based volume management framework for GlusterFS

Heketi Heketi provides a RESTful management interface which can be used to manage the life cycle of GlusterFS volumes. With Heketi, cloud services lik

Nov 18, 2020
gRPC Network Management Interface

gNMI - gRPC Network Management Interface This repository contains reference Go implementations for gNMI. Note: This is not an official Google product.

Jan 8, 2023
lightweight, self-service AWS IAM management
lightweight, self-service AWS IAM management

Contents Overview Architecture Prerequisites Workflow What groups exist? Who do I ask for access? What groups am I in? How do I add group members? How

Jan 16, 2022
Redash-go-sdk - An SDK for the programmatic management of Redash, in Go
Redash-go-sdk - An SDK for the programmatic management of Redash, in Go

Redash Go SDK An SDK for the programmatic management of Redash. The main compone

Dec 13, 2022
Khan - An interactive CLI management tool for Nomad

Khan An interactive CLI management tool for Hashicorp's Nomad Why Nomad has a gr

Apr 26, 2022
Serverless SOAR (Security Orchestration, Automation and Response) framework for automatic inspection and evaluation of security alert
Serverless SOAR (Security Orchestration, Automation and Response) framework for automatic inspection and evaluation of security alert

DeepAlert DeepAlert is a serverless framework for automatic response of security alert. Overview DeepAlert receives a security alert that is event of

Jan 3, 2023