Identity & Access Management simplified and secure.

Overview

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.

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 πŸ˜„

    opened by jaydhulia 1
  • 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!

    opened by jaydhulia 1
  • 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.

    opened by chrnorm 0
  • 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.

    opened by chrnorm 0
  • 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.

    opened by chrnorm 0
  • 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.

    bug 
    opened by chrnorm 0
  • `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
    
    bug 
    opened by chrnorm 0
  • 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.

    opened by chrnorm 0
  • 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

    opened by chrnorm 0
  • 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.

    opened by chrnorm 0
  • 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

    opened by chrnorm 0
  • 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.

    dependencies 
    opened by dependabot[bot] 0
  • 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.

    dependencies 
    opened by dependabot[bot] 0
  • 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.

    dependencies 
    opened by dependabot[bot] 0
  • 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.

    opened by chrnorm 0
  • 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

    opened by chrnorm 0
Releases(v0.2.0)
  • v0.2.0(Jul 30, 2021)

    Our second release of IAM Zero!

    Changelog

    Our major focus this release was core usability features to make IAM Zero useful for developers in a day to day environment. We're not fully there yet - we aim to fix #27 and #28 in v0.3.0 which should make IAM Zero usable for AWS day-to-day to help you build least-privilege permissions.

    Reworked policy editor

    IAM Zero now groups permission issues recorded for the same token and policy together into a more convenient interface!

    Screen Shot 2021-07-30 at 3 49 24 pm

    Support for multiple tokens

    In v0.1.0, we only supported a single token (set as an environment variable). This has now been improved and we support multiple tokens to help you identify actions coming from different services or team members. Our v0.2.0 supports using DynamoDB and in-memory token stores (if you'd like support for a different storage backend please let us know in our Slack) and we aim to improve performance here in future releases by caching tokens in our event collection endpoint.

    Screen Shot 2021-07-30 at 5 42 32 pm

    Initial support for hosting IAM Zero as a service

    At Common Fate we are now running an internal deployment of IAM Zero hosted on AWS ECS. We're working on documentation to provide a deployment guide for IAM Zero. If you're interested in deploying IAM Zero to build least-privilege permissions in a team environment we'd love to hear from you so that we can best package IAM Zero as a CloudFormation deployment.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Jul 16, 2021)

    The initial release of IAM Zero! We aren't yet producing binary builds but you can build this from source yourself and generate least-privilege IAM policies. This release supports the iamzero local command which runs a local version of IAM Zero to capture permission issues.

    Contributors

    • Chris Norman (@chrnorm)
    • Jay Dhulia (@jaydhulia)
    Source code(tar.gz)
    Source code(zip)
Owner
Common Fate
Security tools for innovative teams.
Common Fate
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

Gold Fig Labs Inc. 149 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

Bhojpur Consulting 0 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

Jerry Zhao 451 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

Patrick Kilgore 4 Jan 6, 2023
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

Glass Echidna 7 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

VinΓ­cius Boscardin 4 Aug 9, 2021
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

gRBAC 19 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

Muhammad Ichsanul Fadhil 1 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

Patrick Reader 1 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

Read Write Pro 0 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/

Masayoshi Mizutani 0 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

wolke.casa 1 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

Open Cluster Management 216 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

null 1 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.

OpenConfig 373 Jan 8, 2023
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

Mike Hoskins 0 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. The main compone

RecoLabs 31 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

Brandon Fulljames 7 Apr 26, 2022
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

null 37 Jan 3, 2023