見出し画像

AWS CLIについてちょっと調べてみた

■AWS CLIとは?

AWS サービスを管理するための統合ツールです。
ダウンロードおよび設定用の単一のツールのみを使用して、コマンドラインから AWS の複数のサービスを制御し、スクリプトを使用してこれらを自動化することができます。

つまり
「マネジメントコンソール」を通じたグラフィカルな操作ではなく、ターミナル等の「コマンドライン」を通じて各種サービスの操作を可能にするツール

■何が必要なの?

1.AWS CLIツール
公式ドキュメントにて各種OSのインストーラーをダウンロードできる
※EC2にはデフォルトでインストール済み

2.専用ディレクトリ及び設定ファイル
・専用ディレクトリについて
ログインユーザのホームディレクトリ配下に「.aws」という名前のディレクトリが必要
config及びcredentialsファイルが格納されている隠しディレクトリ

・configファイルについて
AWSコマンドに対しての設定

[default] // どのユーザの設定情報なのか
region = ap-northeast-1 // どのリージョンに対して操作をするのか
output = json // AWS CLIコマンドでの出力をどの形式で出力するのか

・credentialsファイルについて
コマンド使用ユーザの認証情報に対しての設定

[default] // どのユーザの設定情報なのか
aws_access_key_id = xxxxxxxxxxx // IAM権限のアクセスキー
aws_secret_access_key = xxxxxxxxxxx // IAM権限のシークレットアクセスキー

■注意点

・EC2を使う場合は「パブリックサブネット」または「VPCエンドポイント」に接続されているプライベートサブネットの環境を使用する必要がある
・「credentials」の設定情報を用いれば誰でもAWSサービスの操作できるので、流出しないように厳重に保管する必要がある

■より厳密な管理方法

1.ユーザの使い分け
・defaultについて
profileを指定せずにaws configureコマンドを実行した場合は「default」ユーザとして記述される

aws configure

configファイル記述内容

[default]
output = json
region = ap-northeast-1

credentialsファイル記述内容

[default]
aws_access_key_id = xxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxx

例えば、以下のコマンドを実行した場合は「default」ユーザで実行される

aws s3 ls

・profileについて
profileを指定して記述することにより、ユーザを指定してawsコマンドを実行することができる

aws configure --profile practice

configファイル

[practice]
output = json
region = ap-northeast-1

credentialsファイル

[practice]
aws_access_key_id = xxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxx

例えば、以下のコマンドを実行した場合は「practice」ユーザで実行される

aws s3 ls --profile practice

・defaultは削除するべし
defaultが存在している場合、profileを指定せずに実行した場合、どのユーザで実行されているかわかりづらく、予期せぬ動作が発生する可能性があるため、基本的は「default」の記述は削除した方が良い

○Tips
「–profile ユーザー名」環境変数に設定することにより、コマンド実行時に省略が可能
export AWS_PROFILE=practice

2.MFA追加認証とロール
MFA認証とロールを使用すれば、さらに厳密な管理が可能です

・MFA追加認証について
AWSコマンド使用時にもMFA認証を有効にできる
例えば、test1ユーザがMFA認証を有効にして作成されているとします

・ロールの移譲について
さらにtest1ユーザは、S3FullAccessのポリシーが付与されたロールを移譲されているとします
このロールの信頼関係は以下の構成になっており

{
 "Version": "2012-10-17",
 "Statement": [
   {
     "Effect": "Allow",
     "Principal": {
       "AWS": "arn:aws:iam::123456789012:user/test1" // test1ユーザのみこのロールを使用可能
     },
     "Action": "sts:AssumeRole",
     "Condition": {
       "Bool": {
         "aws:MultiFactorAuthPresent": "true" // MFA認証が通過した時のみこのロールが有効
       }
     }
   }
 ]
}

では、そのユーザのprofileを設定します

aws configure --profile test1

AWS Access Key ID [None]: xxxxxx
AWS Secret Access Key [None]: xxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json​

次に以下の3つの情報を「credential」ファイルの「test1」セクションの下に記述します

[test1]
aws_access_key_id = xxxxxxx
aws_secret_access_key = xxxxxxx
source_profile = test1 // credential情報の中で使用するユーザ名を定義
role_arn = arn:aws:iam::123456789012:role/for-test1-user // ロールのarn
mfa_serial = arn:aws:iam::123456789012:mfa/test1 // ユーザの「MFAデバイスの割当」

こうすることで、AWSコマンドでもMFA認証を要求され、ユーザに直接ポリシーをアタッチせずにロールを通して権限を管理できます

[ec2-user@ip-10-0-0-114 ~]$ aws s3 ls --profile test1
Enter MFA code for arn:aws:iam::123456789012:mfa/test1: // ここに6桁のコードを入れる

この記事が気に入ったらサポートをしてみませんか?