Module awsrun.commands.aws.list_iam_roles
Display the IAM roles in an account and its trust relationships.
Overview
The list_iam_roles command will display the IAM roles in an account. By default, all roles in an account are displayed:
$ awsrun --account 100200300400 list_iam_roles
100200300400: arn=arn:aws:iam::100200300400:role/viewer
100200300400: arn=arn:aws:iam::100200300400:role/logger
...
The --role
flag will limit the output to the specified role name.
Matching is
done on the name portion of the role ARN. For example:
$ awsrun --account 100200300400 list_iam_roles --role logger
100200300400: arn=arn:aws:iam::100200300400:role/logger
Multiple roles can be filtered by specifying multiple --role
flags:
$ awsrun --account 100200300400 list_iam_roles --role viewer --role logger
100200300400: arn=arn:aws:iam::100200300400:role/viewer
100200300400: arn=arn:aws:iam::100200300400:role/logger
The --trust
flag will also include the trust relationships contained within
the assume role policy document attached to the role:
$ awsrun --account 100200300400 list_iam_roles --trust
100200300400: arn=arn:aws:iam::100200300400:role/viewer trusted=arn:aws:iam::100200300400:saml-provider/prodsaml
100200300400: arn=arn:aws:iam::100200300400:role/logger trusted=lambda.amazonaws.com
Reference
Synopsis
$ awsrun [options] list_iam_roles [command options]
Configuration
The following is the syntax for the options that can be specified in the user configuration file:
Commands:
list_iam_roles:
role:
- STRING
trust: 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:
role
,--role
- Limit output to roles matching the specified role names. When specifying multiple values on the command line, use multiple flags for each value.
trust
,--trust
- Display the trust relationships along with each role.
Expand source code
#
# Copyright 2019 FMR LLC <opensource@fidelity.com>
#
# SPDX-License-Identifier: Apache-2.0
#
"""Display the IAM roles in an account and its trust relationships.
## Overview
The list_iam_roles command will display the IAM roles in an account. By
default, all roles in an account are displayed:
$ awsrun --account 100200300400 list_iam_roles
100200300400: arn=arn:aws:iam::100200300400:role/viewer
100200300400: arn=arn:aws:iam::100200300400:role/logger
...
The `--role` flag will limit the output to the specified role name. Matching is
done on the name portion of the role ARN. For example:
$ awsrun --account 100200300400 list_iam_roles --role logger
100200300400: arn=arn:aws:iam::100200300400:role/logger
Multiple roles can be filtered by specifying multiple `--role` flags:
$ awsrun --account 100200300400 list_iam_roles --role viewer --role logger
100200300400: arn=arn:aws:iam::100200300400:role/viewer
100200300400: arn=arn:aws:iam::100200300400:role/logger
The `--trust` flag will also include the trust relationships contained within
the assume role policy document attached to the role:
$ awsrun --account 100200300400 list_iam_roles --trust
100200300400: arn=arn:aws:iam::100200300400:role/viewer trusted=arn:aws:iam::100200300400:saml-provider/prodsaml
100200300400: arn=arn:aws:iam::100200300400:role/logger trusted=lambda.amazonaws.com
## Reference
### Synopsis
$ awsrun [options] list_iam_roles [command options]
### Configuration
The following is the syntax for the options that can be specified in the user
configuration file:
Commands:
list_iam_roles:
role:
- STRING
trust: 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:
`role`, `--role`
: Limit output to roles matching the specified role names. When specifying
multiple values on the command line, use multiple flags for each value.
`trust`, `--trust`
: Display the trust relationships along with each role.
"""
import io
from awsrun.config import Bool, List, Str
from awsrun.runner import Command
class CLICommand(Command):
"""Display the IAM roles in an account and its trust relationships."""
@classmethod
def from_cli(cls, parser, argv, cfg):
parser.add_argument(
"--role",
"-r",
action="append",
help="Limit results to role name",
default=cfg("role", type=List(Str), default=[]),
)
parser.add_argument(
"--trust",
"-t",
action="store_true",
help="List trust relationships for each role",
default=cfg("trust", type=Bool),
)
args = parser.parse_args(argv)
return cls(**vars(args))
def __init__(self, role, trust):
self.role_filter = role
self.trust = trust
def execute(self, session, acct):
out = io.StringIO()
iam = session.resource("iam")
for role in iam.roles.all():
if self.role_filter and role.name not in self.role_filter:
continue
output = f"{acct}: arn={role.arn}"
if self.trust:
arns = _trusted_arns(role.assume_role_policy_document)
output += " trusted=" + ", ".join(arns)
print(output, file=out)
return out.getvalue()
# Return a list of trusted principal ARNs
def _trusted_arns(policy):
if not policy:
return []
arns = []
for statement in policy.get("Statement", []):
if not statement.get("Effect", "") == "Allow":
continue
for arn in statement.get("Principal", {}).values():
if isinstance(arn, list):
arns.extend(arn)
else:
arns.append(arn)
return arns
Classes
class CLICommand (role, trust)
-
Display the IAM roles in an account and its trust relationships.
Expand source code
class CLICommand(Command): """Display the IAM roles in an account and its trust relationships.""" @classmethod def from_cli(cls, parser, argv, cfg): parser.add_argument( "--role", "-r", action="append", help="Limit results to role name", default=cfg("role", type=List(Str), default=[]), ) parser.add_argument( "--trust", "-t", action="store_true", help="List trust relationships for each role", default=cfg("trust", type=Bool), ) args = parser.parse_args(argv) return cls(**vars(args)) def __init__(self, role, trust): self.role_filter = role self.trust = trust def execute(self, session, acct): out = io.StringIO() iam = session.resource("iam") for role in iam.roles.all(): if self.role_filter and role.name not in self.role_filter: continue output = f"{acct}: arn={role.arn}" if self.trust: arns = _trusted_arns(role.assume_role_policy_document) output += " trusted=" + ", ".join(arns) print(output, file=out) return out.getvalue()
Ancestors
Inherited members