AWS IAM管理とawscli環境設定

# はじめに

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<br />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
```





# 参考URL

https://sil.hatenablog.com/entry/aws-iam-and-cli

https://dev.classmethod.jp/cloud/aws/iam-role-and-assumerole/

https://qiita.com/kwsmkn/items/ce72d8e4cc35f1fc01b5