Skip to content

Instantly share code, notes, and snippets.

@ustayready
Forked from apolloclark/aws cli cheatsheet.md
Created July 2, 2021 14:06
Show Gist options
  • Save ustayready/f696b8363c5d6a679e50b10f2893dd97 to your computer and use it in GitHub Desktop.
Save ustayready/f696b8363c5d6a679e50b10f2893dd97 to your computer and use it in GitHub Desktop.

AWS CLI Cheatsheet

http://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html https://www.youtube.com/watch?v=_wiGpBQGCjU

Setup

  • Virtualbox
  • Ubuntu 14.04 LTS VM, 64-bit http://releases.ubuntu.com/14.04/ubuntu-14.04.4-desktop-amd64.iso
  • create new machine, settings System / Processor Enable PAE/NX System / Acceleration Paravirtualization Interface: Default Enable VT-x/AMD-V Enable Nested Paging Display / Screen Video Memory: 128MB Acceleration: Enable 3D Acceleration
  • boot
  • install

install Virtualbox Guest Additions, passwordless sudo

echo $USER
sudo echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
sudo su
apt-get update
apt-get install -y build-essential dkms linux-headers-$(uname -r)
cd /media/aws-admin/
sh ./VBoxLinuxAdditions.run
shutdown now

install AWS CLI

sudo apt-get install -y python-dev python-pip
sudo pip install awscli
aws --version
aws configure

Bash one-liners

cat <file> # output a file
tee # split output into a file
cut -f 2 # print the 2nd column, per line
sed -n '5{p;q}' # print the 5th line in a file
sed 1d # print all lines, except the first
tail -n +2 # print all lines, starting on the 2nd
head -n 5 # print the first 5 lines
tail -n 5 # print the last 5 lines

expand # convert tabs to 4 spaces
unexpand -a # convert 4 spaces to tabs
wc # word count
tr ' ' \\t # translate / convert characters to other characters

sort # sort data
uniq # show only unique entries
paste # combine rows of text, by line
join # combine rows of text, by initial column value




Cloudtrail - Logging and Auditing

http://docs.aws.amazon.com/cli/latest/reference/cloudtrail/

5 Trails total, does support resource level permissions

aws cloudtrail describe-trails

aws s3 ls

aws cloudtrail create-subscription \
    --name awslog \
    --s3-new-bucket awslog2016

aws cloudtrail describe-trails --output text | cut -f 8

aws cloudtrail get-trail-status \
    --name awslog

aws cloudtrail delete-trail \
    --name awslog

aws s3 rb s3://awslog2016 --force

# add up to 10 tags
aws cloudtrail add-tags \
    --resource-id awslog \
    --tags-list "Key=log-type,Value=all"

aws cloudtrail list-tags \
    --resource-id-list 

aws cloudtrail remove-tags \
    --resource-id awslog \
    --tags-list "Key=log-type,Value=all"




IAM

Users

http://docs.aws.amazon.com/cli/latest/reference/iam/index.html

https://blogs.aws.amazon.com/security/post/Tx15CIT22V4J8RP/How-to-rotate-access-keys-for-IAM-users

http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html

Limits = 5000 users, 100 group, 250 roles, 2 access keys / user

# list all user's info
aws iam list-users

# list all user's usernames
aws iam list-users --output text | cut -f 6

# list current user's info
aws iam get-user

# list current user's access keys
aws iam list-access-keys

# crate new user
aws iam create-user \
    --user-name aws-admin2

# create multiple new users, from a file
allUsers=$(cat ./user-names.txt)
for userName in $allUsers; do
    aws iam create-user \
        --user-name $userName
done

# list all users
aws iam list-users --no-paginate

# get a specific user's info
aws iam get-user \
    --user-name aws-admin2

# delete one user
aws iam delete-user \
    --user-name aws-admin2

# delete all users
# allUsers=$(aws iam list-users --output text | cut -f 6);
allUsers=$(cat ./user-names.txt)
for userName in $allUsers; do
    aws iam delete-user \
        --user-name $userName
done

Password policy

http://docs.aws.amazon.com/cli/latest/reference/iam/delete-account-password-policy.html

aws iam delete-account-password-policy

http://docs.aws.amazon.com/cli/latest/reference/iam/get-account-password-policy.html

aws iam get-account-password-policy

http://docs.aws.amazon.com/cli/latest/reference/iam/update-account-password-policy.html

aws iam update-account-password-policy \
	--minimum-password-length 12 \
	--require-symbols \
	--require-numbers \
	--require-uppercase-characters \
	--require-lowercase-characters \
	--allow-users-to-change-password

Access Keys

aws iam list-access-keys

aws iam list-access-keys \
    --user-name aws-admin2

aws iam create-access-key \
    --user-name aws-admin2 \
    --output text | tee aws-admin2.txt

aws iam get-access-key-last-used \
    --access-key-id AKIAINA6AJZY4EXAMPLE

aws iam update-access-key \
    --access-key-id AKIAI44QH8DHBEXAMPLE \
    --status Inactive \
    --user-name aws-admin2

aws iam delete-access-key \
    --access-key-id AKIAI44QH8DHBEXAMPLE \
    --user-name aws-admin2

Groups, Policies, Managed Policies

http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html

aws iam list-groups

aws iam create-group --group-name FullAdmins

aws iam delete-group \
    --group-name FullAdmins

aws iam list-policies

aws iam get-policy \
    --policy-arn <value>

# list all users, groups, and roles, for a given policy
aws iam list-entities-for-policy \
    --policy-arn <value>

# list policies, for a given group
aws iam list-attached-group-policies \
    --group-name FullAdmins

aws iam attach-group-policy \
    --group-name FullAdmins \
    --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

aws iam add-user-to-group \
    --group-name FullAdmins \
    --user-name aws-admin2

# list users, for a given group
aws iam get-group \
    --group-name FullAdmins

# list groups, for a given user
aws iam list-groups-for-user \
    --user-name aws-admin2

aws iam remove-user-from-group \
    --group-name FullAdmins \
    --user-name aws-admin2

aws iam detach-group-policy \
    --group-name FullAdmins \
    --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

aws iam delete-group \
    --group-name FullAdmins




EC2

keypairs

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html

aws ec2 describe-key-pairs

aws ec2 create-key-pair \
    --key-name <value>

# create a new private / public keypair, using RSA 2048-bit
ssh-keygen -t rsa -b 2048

aws ec2 import-key-pair \
    --key-name keyname_test \
    --public-key-material file:///home/apollo/id_rsa.pub

aws ec2 delete-key-pair \
    --key-name <value>

Security Groups

aws ec2 describe-security-groups

aws ec2 create-security-group \
    --vpc-id vpc-1a2b3c4d \
    --group-name web-access \
    --description "web access"

aws ec2 describe-security-groups \
    --group-id sg-0000000

# open port 80, for everyone
aws ec2 authorize-security-group-ingress \
    --group-id sg-0000000 \
    --protocol tcp \
    --port 80 \
    --cidr 0.0.0.0/24

# get my public ip
my_ip=$(dig +short myip.opendns.com @resolver1.opendns.com);
echo $my_ip

# open port 22, just for my ip
aws ec2 authorize-security-group-ingress \
    --group-id sg-0000000 \
    --protocol tcp \
    --port 80 \
    --cidr $my_ip/24

aws ec2 revoke-security-group-ingress \
    --group-id sg-0000000 \
    --protocol tcp \
    --port 80 \
    --cidr 0.0.0.0/24

aws ec2 delete-security-group \
    --group-id sg-00000000

EC2 - Instances, Tags

http://docs.aws.amazon.com/cli/latest/reference/ec2/index.html#cli-aws-ec2
http://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html

aws ec2 describe-instances

aws ec2 run-instances \
    --image-id ami-f0e7d19a \	
    --instance-type t2.micro \
    --security-group-ids sg-00000000 \
    --dry-run

aws ec2 terminate-instances \
    --instance-ids <instance_id>

aws ec2 describe-instances

aws ec2 describe-tags

aws ec2 create-tags \
    --resources "ami-1a2b3c4d" \
    --tags Key=name,Value=debian

aws ec2 delete-tags \
    --resources "ami-1a2b3c4d" \
    --tags Key=Name,Value=

Cloudwatch - Monitoring

http://docs.aws.amazon.com/cli/latest/reference/cloudwatch/index.html

Cloudwatch - Logs

http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchLogs.html http://docs.aws.amazon.com/cli/latest/reference/logs/index.html#cli-aws-logs

http://docs.aws.amazon.com/cli/latest/reference/logs/create-log-group.html
aws logs create-log-group \
	--log-group-name "DefaultGroup"

http://docs.aws.amazon.com/cli/latest/reference/logs/describe-log-groups.html
aws logs describe-log-groups

aws logs describe-log-groups \
	--log-group-name-prefix "Default"

http://docs.aws.amazon.com/cli/latest/reference/logs/delete-log-group.html
aws logs delete-log-group \
	--log-group-name "DefaultGroup"



# http://docs.aws.amazon.com/cli/latest/reference/logs/create-log-stream.html

# Log group names can be between 1 and 512 characters long. Allowed characters include a-z, A-Z, 0-9, '_' (underscore), '-' (hyphen), '/' (forward slash), and '.' (period).

aws logs create-log-stream \
	--log-group-name "DefaultGroup" \
	--log-stream-name "syslog"

# http://docs.aws.amazon.com/cli/latest/reference/logs/describe-log-streams.html

aws logs describe-log-streams

aws logs describe-log-streams \
	--log-group-name "syslog"

aws logs describe-log-streams \
	--log-stream-name-prefix "syslog"

# http://docs.aws.amazon.com/cli/latest/reference/logs/delete-log-stream.html
aws logs delete-log-stream \
	--log-group-name "DefaultGroup" \
	--log-stream-name "Default Stream"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment