Module awsrun.commands.aws.access_report
Test role access to the accounts specified.
Overview
The access_report command will display the number of accounts that the IAM role does not have access to. For example:
$ awsrun --account 100200300400 --account 200300400100 access_report
Success: 2, Failures: 0
Note: no output is generated until all accounts have been tested, so it may look
like the command is hanging when processing a large number of accounts. With the
--verbose option, a success message is generated for each account as soon as
it has been processed:
$ awsrun --include Env=DEV access_report --verbose
400100200300: successful
100200300400: successful
200300400100: successful
Success: 3, Failures: 2
Unsuccessful attempts:
300200100400
300100400200
Reference
Synopsis
$ awsrun [options] access_report [command options]
Configuration
The following is the syntax for the options that can be specified in the user configuration file:
Commands:
  access_report:
    verbose: BOOLEAN
Command Options
Some options can be overridden on the awsrun CLI via command line flags. In those cases, the CLI flags are specified next to the option name below:
verbose,--verbose- Display a message as each account is tested. By default, no output is generated until all accounts have been processed.
 
Expand source code
#
# Copyright 2019 FMR LLC <opensource@fidelity.com>
#
# SPDX-License-Identifier: Apache-2.0
#
"""Test role access to the accounts specified.
## Overview
The access_report command will display the number of accounts that the IAM
role does not have access to.  For example:
    $ awsrun --account 100200300400 --account 200300400100 access_report
    Success: 2, Failures: 0
Note: no output is generated until all accounts have been tested, so it may look
like the command is hanging when processing a large number of accounts. With the
`--verbose` option, a success message is generated for each account as soon as
it has been processed:
    $ awsrun --include Env=DEV access_report --verbose
    400100200300: successful
    100200300400: successful
    200300400100: successful
    Success: 3, Failures: 2
    Unsuccessful attempts:
    300200100400
    300100400200
## Reference
### Synopsis
    $ awsrun [options] access_report [command options]
### Configuration
The following is the syntax for the options that can be specified in the user
configuration file:
    Commands:
      access_report:
        verbose: BOOLEAN
### Command Options
Some options can be overridden on the awsrun CLI via command line flags. In
those cases, the CLI flags are specified next to the option name below:
`verbose`, `--verbose`
:  Display a message as each account is tested. By default, no output is
generated until all accounts have been processed.
"""
from awsrun.config import Bool
from awsrun.runner import Command
class CLICommand(Command):
    """Test role access to the accounts specified."""
    @classmethod
    def from_cli(cls, parser, argv, cfg):
        parser.add_argument(
            "--verbose",
            "-v",
            action="store_true",
            default=cfg("verbose", type=Bool, default=False),
            help="display accounts while being processed",
        )
        args = parser.parse_args(argv)
        return cls(**vars(args))
    def __init__(self, verbose=False):
        self.verbose = verbose
        self.total = 0
        self.no_access = []
    def execute(self, session, acct):
        if self.verbose:
            return f"{acct}: successful\n"
        return None
    def collect_results(self, acct, get_result):
        self.total += 1
        try:
            result = get_result()
        except Exception:  # pylint: disable=broad-except
            self.no_access.append(acct)
            return
        if result:
            print(result, end="", flush=True)
    def post_hook(self):
        unsuccessful = len(self.no_access)
        successful = self.total - unsuccessful
        print(f"Success: {successful}, Failures: {unsuccessful}")
        if unsuccessful:
            print("\nUnsuccessful attempts:")
            for acct in self.no_access:
                print(acct)
Classes
class CLICommand (verbose=False)- 
Test role access to the accounts specified.
Expand source code
class CLICommand(Command): """Test role access to the accounts specified.""" @classmethod def from_cli(cls, parser, argv, cfg): parser.add_argument( "--verbose", "-v", action="store_true", default=cfg("verbose", type=Bool, default=False), help="display accounts while being processed", ) args = parser.parse_args(argv) return cls(**vars(args)) def __init__(self, verbose=False): self.verbose = verbose self.total = 0 self.no_access = [] def execute(self, session, acct): if self.verbose: return f"{acct}: successful\n" return None def collect_results(self, acct, get_result): self.total += 1 try: result = get_result() except Exception: # pylint: disable=broad-except self.no_access.append(acct) return if result: print(result, end="", flush=True) def post_hook(self): unsuccessful = len(self.no_access) successful = self.total - unsuccessful print(f"Success: {successful}, Failures: {unsuccessful}") if unsuccessful: print("\nUnsuccessful attempts:") for acct in self.no_access: print(acct)Ancestors
Inherited members