https://github.com/retailmenotsandbox/sgtools
Standard UNIX tools for manipulating AWS security group rules
https://github.com/retailmenotsandbox/sgtools
Last synced: over 1 year ago
JSON representation
Standard UNIX tools for manipulating AWS security group rules
- Host: GitHub
- URL: https://github.com/retailmenotsandbox/sgtools
- Owner: RetailMeNotSandbox
- License: mit
- Created: 2014-04-11T16:44:07.000Z (about 12 years ago)
- Default Branch: master
- Last Pushed: 2014-04-11T19:32:53.000Z (about 12 years ago)
- Last Synced: 2025-02-18T21:40:17.281Z (over 1 year ago)
- Language: Python
- Size: 141 KB
- Stars: 1
- Watchers: 6
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Security Group Management Rule Management in sgtools
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Concepts
********
Security Groups rules in AWS have four basic components. In sgtools and this
documentation, we refer to them as follows:
* A *direction*, "in" (ingress) or "out" (egress)
* An *owner*, the group to whom the rule belongs
* An *other*, the subject of the rule, which may be a security group or CIDR
* A *portspec*, consisting of an IP protocol, low port, and high port
Included Tools
**************
sgtools includes two tools for managing security group rules: ``sgtables`` and
``sgmanager``.
``sgmanager`` is a higher-level tool used for managing more human-friendly rule
representations. ``sgmanager`` depends on ``sgtables`` to make changes in AWS.
``stgables`` is a low-level (*raw*) rule processor. It consumes and generates
basic rule definitions, and is capable of modifying rulesets in AWS.
These tools only manage security group *rules*. They do not create or remove
the groups themselves.
Using ``sgmanager``
*******************
.. hint::
You can type ``sgmanager --help`` for detailed help about the ``sgmanager`` CLI.
There are currently three ``sgmanager`` subcommands:
* *groupdefs*, a tool for extracting group definitions in the ``sgmanager``
* format *render*, which accepts one or more configuration files and renders
them to raw rules suitable for consumption by ``sgtables``
* *reverse*, which can help you convert ``sgtables`` output to a set of rules
When using ``sgmanager``, *vars_files* are files in the ``sgmanager``
configuration format as outlined below. *input_files* refer to files containing
raw rules as output by ``sgtables``.
.. hint::
``sgmanager`` configurations can be broken into several files for
flexibility. Consider storing accounts, CIDRs, and portspecs separately
from group definitions and rules.
``sgmanager`` Configuration
---------------------------
There are four entity types that can be defined in an sgmanager configuration:
* Rule - represents a single IpPermission on a SecurityGroup
* SecurityGroup - represents a single AWS SecurityGroup
* Cidr - An IPv4 CIDR address/mask
* Account - an AWS account
The syntax of an sgmanager configuration is::
::= "rule " " " " " ( | ) " "
::= "sg " NAME " " SG_ID
::= "cidr " NAME " " IPADDR "/" INT_MASK
::= "acct " NAME " " ACCOUNT_ID
::= "proto " NAME " " " " " "
::= ( "icmp" | "tcp" | "udp" | -1 | 0 | POSITIVE_INTEGER )
::= -1 | 0 | POSITIVE_INTEGER
::= -1 | 0 | POSITIVE_INTEGER
Where:
* ``SG_ID`` is an AWS security group id
* ``IPADDR`` is an IPv4 address
* ``INT_MASK`` is an integer between 0 and 32 (inclusive)
* ``ACCOUNT_ID`` is an AWS numeric account ID
For port numbers, ``POSITIVE_INTEGER`` can be between 1 and 65535, and -1 means *all*.
Example
-------
Suppose you have a sgmanager configuration file named "myrules" containing the following::
acct prd 11223344556677
cidr prd-w1 10.208.0.0/16
sg prd-w1-eop sg-12345678
sg prd-w1-app sg-abcdef12
proto ssh tcp 22 22
rule in prd-w1-eop prd-w1-app ssh
rule in prd-w1-eop prd-w1 ssh
Running ``sgmanager prd myrules`` would produce the following output::
in sg-12345678 sg-abcdef12 tcp 22 22
in sg-12345678 10.208.0.0/16 tcp 22 22
Using ``sgtables``
******************
.. hint::
See the output of ``sgtables --help`` for complete, current information
about available options.
``sgtables`` has four functions: *list*, *add*, *remove*, and *update*
``sgtables`` always requires an AWS profile (from ~/.aws/config), a region, and
a specific VPC to operate against (or the special name 'classic' for EC2
Classic). ``sgtables`` only operates on one network at a time. EC2 classic is
handled as its own network/VPC.
All data-modification commands (everything except *list*) accept a ``--noop``
argument (for no-op) that prevents any real changes from taking place. You can
use the ``--verbose`` flag to see more detail about the operations performed by
the command. ``--debug`` will also include low-level details.
The *add* command will try to add all rules passed to it (so long as the group
exists in the VPC). Similarly, *remove* will try to remove all rules passed to
it. You will be warned if the given rule already exists (for *add*) or if it is
not found (for *remove*), but this will not cause ``sgtables`` to fail.
*update* behaves somewhat differently than the other two. Before making changes,
*update* inspects the current ruleset and compares it to the input given. For
any security group **mentioned as an owner in the rules list**, rules are added
if needed, then rules are removed. To put it another way, *update* expects that
the rules passed to it are the **only** rules that should be in those groups.
*Mentioned*, in this context, means that any rule not listed as an owner in the
ruleset will not be updated. ``sgtables`` can update all rules in all security
groups in a VPC if passed the ominuously-named ``--obliterate`` flag to
*update*. When ``--obliterate`` is specified, ``sgtables`` assumes that the
rules given to it are the **only** rules that should exist in the VPC. If a
group exists but no rules are defined for it, that group will have all of its
rules removed.
%%%%%%%%%%%%%%%%%%
Installing sgtools
%%%%%%%%%%%%%%%%%%
sgtools is available in PyPI and is installable via pip::
pip install sgtools
You may also install sgtools from source, perhaps from the GitHub repo::
git clone https://github.com/RetailMeNot/sgtools.git
cd sgtools
python setup.py install