はじめに
IAM管理と、awscliを実行するための手順を確認します。
IAMグループやIAMポリシーを設定し、必要最低限の権限を付与し、管理しやすくすることを目的とします。
GUI(Management Console)でAWSを操作するのも良いですが、再現性を高めるために、awscliの実行環境を準備します。
AWSのアカウントについて
AWSには、以下の3種類のアカウントが存在します
- AWSルートアカウント
- IAMユーザ
- IAMロール
セキュリティを重視すると、IAMロールをEC2インスタンスに付与し、インスタンス上からawscliを実行するのが望ましいですが、今回はローカル環境のLinuxからawscliを実行出来る環境を整備します。
IAMユーザの作成
ローカル環境のLinuxで、awscliを実行するように、まずはAWS上でIAMユーザを作成します
IAM Management Console を使用して、GUIでポチポチ作成します。
ユーザを作成すると、Access key ID と、 Secret access key が表示されます。これを利用してawscliでアクセスします。
IAM Group Name | IAM User Name | Permissions | Usage |
---|---|---|---|
awscli-group | awscli-user | なし | 日常的に使用する awscli |
awscli-policygroup | awscli-policyuser | IAMFullAccess | Policy管理のため、一時的に使用する awscli Policyを変更出来るため、Keyが漏れないように注意 |
gui-group | gui-sugiyama | なし | Management Console |
環境情報
- OS : CentOS7.5
- pip : 18.0
- aws-cli : 1.15.80
pip経由でawscliを導入する
CentOS7の場合
awscli を導入します。ついでに便利と噂の aws-shell も導入しておきます。
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
rm get-pip.py
pip install aws
pip install aws-shell --ignore-installed six
aws コマンドのバージョン確認
[root@sugi-awscli ~]# aws --version
aws-cli/1.15.80 Python/2.7.5 Linux/3.10.0-862.11.6.el7.x86_64 botocore/1.10.79
Ubuntu16.04の場合
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
rm get-pip.py
pip install aws
pip install aws-shell
pythonの導入
CentOS7の場合
前提パッケージの導入
yum install -y zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel gcc libffi-devel
pyenvを導入します
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
pyenvのversion確認
[root@sugi-awscli eks]# pyenv -v
pyenv 1.2.7-1-g7190216
python3.7.0の導入
pyenv install 3.7.0
3.7.0 を使用する指定
pyenv global 3.7.0
確認
[root@sugi-awscli eks]# python --version
Python 3.7.0
Ubuntu16.04の場合
前提パッケージの導入
apt install -y zlib1g-dev libssl-dev libffi-dev
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo '#pyenv' >> ~/.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
python3.7.0の導入
pyenv install 3.7.0
3.7.0 を使用する指定
pyenv global 3.7.0
確認
[root@sugi-awscli eks]# python --version
Python 3.7.0
bashの補完機能を設定
aws_completer がinstallされている場所を確認します
root@sigi-awscli-ubuntu:~# updatedb
root@sigi-awscli-ubuntu:~# locate aws_completer
/usr/local/bin/aws_completer
上記の場所を確認し、以下の定義を bashrc へ追加します
echo "complete -C '/usr/local/bin/aws_completer' aws" >> ~/.bashrc
awscliを IAMユーザと紐づける
awscli に2個のIAMユーザと紐づけます。まずは、通常的に使用する IAMユーザ「awscli-user」を default profile として紐づけます
aws configure
実行例
[root@sugi-awscli ~]# aws configure
AWS Access Key ID [None]: himitsu1
AWS Secret Access Key [None]: himitsu2
Default region name [None]: us-west-2
Default output format [None]: text
次に、IAM Policy を管理するためのユーザ「awscli-policyuser」を紐づけます
aws configure --profile managepolicy
実行例
[root@sugi-awscli ~]# aws configure --profile managepolicy
AWS Access Key ID [None]: himitsu3
AWS Secret Access Key [None]: himitsu4
Default region name [None]: us-west-2
Default output format [None]: text
IAMグループ「awscli-group」に権限付与
awscliで紐づけた通常的に使用する IAMグループ「awscli-group」には、何も権限が設定されていないため、動作確認のため一時的に権限付与を確認します。
コマンドの引数などが不明の場合は、helpを表示することが出来ます
aws iam attach-group-policy help
ポリシー「IAMReadOnlyAccess 」を、IAMグループ「awscli-group」アタッチします
aws --profile managepolicy iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/IAMReadOnlyAccess --group-name awscli-group
awscliで実行してみる
iam サービスで Read Only の権限が付与されたため、下記のようにコマンドを実行できます
[root@sugi-awscli ~]# aws iam list-policies
POLICIES arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess 0 2015-02-06T18:40:08Z v2 True / 0 ANPAI23HZ27SI6FQMGNQ2 AWSDirectConnectReadOnlyAccess 2018-08-15T17:28:44Z
POLICIES arn:aws:iam::aws:policy/AmazonGlacierReadOnlyAccess 0 2015-02-06T18:40:27Z v2 True / 0 ANPAI2D5NJKMU274MET4E AmazonGlacierReadOnlyAccess 2016-05-05T18:46:10Z
POLICIES arn:aws:iam::aws:policy/AWSMarketplaceFullAccess 0 2015-02-11T17:21:45Z v3 True / 0 ANPAI2DV5ULJSO2FYVPYG AWSMarketplaceFullAccess 2018-08-08T21:13:02Z
POLICIES arn:aws:iam::aws:policy/AWSIoT1ClickReadOnlyAccess 0 2018-05-11T21:49:24Z v1 True / 0 ANPAI35VTLD3EBNY2JGXS AWSIoT1ClickReadOnlyAccess
IAMグループ「awscli-group」の権限削除
割り当てた権限を基に戻します
aws --profile managepolicy iam detach-group-policy --policy-arn arn:aws:iam::aws:policy/IAMReadOnlyAccess --group-name awscli-group