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桁のコードを入れる
この記事が気に入ったらサポートをしてみませんか?