Day9 IAMについて理解を深める
IAMポリシーの作成
参照のみ可能なアプリユーザのポリシーを作成する
IAM→ポリシー→ポリシーの作成
サービス:EC2
[x]リスト
[x]読み込み
書き込み:
[x]StartInstances [x]StopInstances
リソース:すべてのリソース
さらにアクセスを許可する
サービス:RDS
[x]リスト
[x]読み込み
リソース:すべてのリソース
ポリシーの確認 名前:App-User-Policy ポリシーの作成
インフラ担当用ユーザのポリシーを作成する
EC2/RDS/IAM フルアクセス・すべてのリソースを許可
IAMユーザの作成
IAM→ユーザ→ユーザを追加
アクセスの種類:AWS マネジメントコンソールへのアクセス
アクセス許可の設定:既存のポリシーを直接アタッチ
ユーザによる管理→App-User-Policy
IAMグループの作成
IAM→グループ→新しいグループの作成
グループ名:App-User-Group
ポリシーのアタッチ:App-User-Policy
グループ名:Infra-User-Group
ポリシーのアタッチ:App-Infra-Policy
グループのアクション→グループにユーザを追加
IAMロールの作成と割当
やりたいこと
バッチサーバ用のポリシー:S3関連のすべてを許可する
バッチサーバ用のポリシーをもつIAMロールの作成
バッチサーバ用のIAMロールを付与されたEC2インスタンスでS3のファイルを取得する
php src/ListBuckets.php
Adminのアクセスキーとシークレットキーを使用しているので、S3バケット名が取得できる
rm ~/.aws/credentials
クレデンシャルを削除すると権限がないのでS3バケットが取得できなくなる
IAMロール用のポリシーの作成
サービス:S3
すべてのアクション・すべてのリソースを許可
Batch-System-Policyの作成IAMロールの作成
どのリソースにこのロールを割り当てるのかを設定する
AWSサービス→EC2を選択
ポリシー:Batch-System-Policy
Batch-System-Roleとして作成Batch-System-RoleのEC2への紐付け
EC2→アクション→インスタンスの設定→IAMロールの割当→Batch-System-Roleを選択
<?php require '../vendor/autoload.php'; use Aws\S3\S3Client; $s3 = new S3Client([ //コメントアウトする //'profile' => 'default' 'version' => 'latest', 'region' => 'ap-northeast-1' ]); # バケット一覧の表示 $result = $s3->listBuckets(); foreach ($result['Buckets'] as $bucket) { echo $bucket['Name'] . "\n"; }
IAMロールでBatchインスタンスにS3へのアクセス権限を与えたので、クレデンシャルがなくてもS3の一覧が取得できるようになった。
IAMベストプラクティス
利用者ごとにIAMユーザを作成する
IAMユーザを使い回すと、CloudTrailでユーザの操作ログをきちんと取れない。誰が何をしたの変わらなくなる。役割ごとのIAMグループを作成し、IAMグループに権限を振る
IAMユーザにポリシーを割り当てると、規模が大きくなると大変になる。間違ったポリシーを割り当てる可能性も出てくる。権限は最小限にして、必要になったら増やす
定期的に権限を見直す
プログラムから利用する場合、アクセスキー・シークレットキーではなくIAMロールを利用できないか考える アクセスキー・シークレットキーが流出する危険性を減らす。