フェイス・ソリューション・テクノロジーズ株式会社IS本部OSユニットのImaiです。
「ハンズオンはじめの一歩: AWS アカウントの作り方 & IAM 基本のキ」を通して学んだことを皆様に共有したいと思います。
今回はIAMポリシーとIAMグループ、IAMロールについてです。
IAMポリシーとは
アクセス許可の定義を行うJSONドキュメントの形式で記載します。
EffectやAction、Resourceといったエレメントを使って記述します。
- Effect 許可(Allow)or明示的な拒否(Deny)
- Action 対象のアクションの指定(ワイルドカード()の指定も可)
- Resource 対象のリソースの指定(ワイルドカード()の指定も可)
IAMユーザーの作成のときに付与したAdministratorAccessであったり、S3ReadOnlyAccessのようにAWSであらかじめ用意しているポリシーもありますし、JSON形式で独自のポリシーを作成することもできます。
IAMグループとは
前回はそれぞれに一つのポリシーを割り当てましたが、複数のポリシーを割り当てることになったときに、ユーザーを作成する度にポリシーを割り当てていたら煩雑になります。
そのためIAMグループというIAMユーザーの集合を定義できるリソースが便利です。
IAMグループにポリシーを割り当てることで、IAMユーザーが増えてもそのグループに割り当てるだけで、IAMポリシーを付与することができます。
IAMロールとは
簡単に説明すると人ではなくリソースに割り当てるものです。
例えばEC2インスタンスからS3へ何かしらの操作をしたい場合は、適切なポリシーをIAMロールに割り当てます。
そしてそのIAMロールをEC2インスタンスに割り当てるとEC2インスタンスからその操作ができるようになります。
それでは実際にIAMポリシーとIAMグループを作成して実験してみます。
今回は開発者用の独自のポリシーを作成して、開発者の方にEC2の参照、インスタンスのstop/startをする権限のみを割り振りたいと思います。
開発で利用するインスタンスのstartは開発者にしてもらって、新しくインスタンスを立てるのはインフラ担当者にしてもらうという想定です。
EC2インスタンスの起動
まず最初に管理者権限を持ったIAMユーザーでサインインします。
次にEC2インスタンスを立てます。
Amazon Linux2 AMIを選択します。
t2.microを選択します。
キーペアなしで続行を選択します。
インスタンスを起動します。
IAMポリシーの作成
次に開発者用の独自のポリシーを作成します。
JSONドキュメントの自動生成
今回はIAMポリシージェネレータというサイトでJSONドキュメントを自動生成してもらいます。
ブラウザで「IAMポリシージェネレータ」と検索してサイトを開きます。
Select Type of PolicyはIAM Policyを選択します。
Effectは○○を許可しますという意味のAllowにします。
AWS ServiceはAmazon EC2を選択します。
ActionsはStartInstancesとStopInstances、DescribeAccountAttributesを選択します。
(後ほど書き換えるのでDescribe〇〇であればどれでもOKです。)
Amazon Resource Name (ARN)は「*」と入力します。
(「*」はすべてという意味です。)
Add Statementをクリックした後にGenerate Policy をクリックします。
するとJSON形式でポリシーが生成されるのでコピーします。
ポリシーの作成
次にIAMの画面を開いてポリシーを押します。
ポリシーを作成を押してJSONのタブを開いて、元々書いてあるコードを消して、先ほどコピーしたJSONのコードを貼り付けます。
Describe○○というところをDescribe*に修正して参照系の権限をつけます。
今回は開発者用のポリシーなのでdeveloperと名前をつけてポリシーを作成しようと思います。
IAMユーザーの作成
次にこのポリシーを付与したIAMユーザーを作成します。
今回は名前をdeveloperとします。
先ほど作成した開発者用のポリシーにチェックを入れてユーザーを作成します。
権限が正しく付与されているかの確認
次にこの開発者用のポリシーを持ったIAMユーザーでサインインします。
EC2インスタンスの画面を開きます。
参照系の権限を付与したのでこのようにインスタンスの一覧の表示は行えます。
次にインスタンスの停止を行います。
インスタンスの状態からインスタンスの停止を選択します。
このようにインスタンスの停止も行うことができます。
次にインスタンスを新しく起動してみます。
このようにインスタンスを起動する権限は持っていないので起動はできません。
IAMグループの作成
次に管理者権限を持ったIAMユーザーでサインインして、開発者用の権限を持ったグループを作ります。
IAMの画面でグループを追加を押します。
今回は開発者用のグループなのでdeveloperと名前を付けます。
先ほど作成した開発者用の独自のポリシーを付与します。
次にこのグループに追加するIAMユーザーを作成します。
名前はdeveloper2とします。
アクセス許可の画面でユーザーをグループに追加をクリックして先ほど作成したグループにチェックを入れてユーザーを作成します。
IAMグループに正しく権限が付与されているかの確認
次にこの開発者用のグループに追加したIAMユーザーでサインインします。
EC2の画面を開きます。
このようにインスタンスの一覧の表示は行えます。
次にインスタンスの開始を行います。
このようにインスタンスの開始も行えます。
次にインスタンスを新しく起動してみます。
このようにインスタンスを起動する権限は持っていないので起動はできません。
IAMロールの作成
次に、先ほど作成したEC2インスタンスに接続して、コマンドラインを使って一覧を表示できるか試していきます。
まずは管理者権限を持ったIAMユーザーでサインインします。
最初に何も権限を持っていないロールで試していきます。
ロールの作成を押します。
エンティティタイプは「AWSサービス」、ユースケースは「EC2」を選択します。
権限は何もつけません。
今回は名前を「my-ec2-role」とします。
ロールの割り当て
次に先ほど作成したロールをEC2インスタンスに割り当てます。
EC2のインスタンスの画面で「アクション」→「セキュリティ」→「IAMロールの変更」をクリックします。
先ほど作成したIAMロールを割り当てます。
EC2インスタンスへの接続と一覧表示
次にEC2インスタンスに接続します。
コマンドラインが表示されるので、「aws」と入力します。
するとすでにAWSのコマンドラインのインターフェース(CLI)が入っているということが分かります。
次にインスタンスの一覧を表示するために「aws ec2 describe-instances –region ap-northeast-1」と入力します。
すると権限が足らないということを意味するエラーが表示されます。
権限の付与
次にこのロールに権限を付与していきます。
ロールの画面で「my-ec2-role」をクリックして、「許可を追加」→「ポリシーをアタッチ」をクリックします。
独自に作成した開発者用のポリシーを付与します。
一覧の表示
コマンドラインの画面に戻ります。
コマンドラインでカーソルキーの↑を押すと先ほどと同じコマンドラインが入力されるのでEnterを押します。
すると権限を付与したのでインスタンスの情報がJSON形式で表示されます。
以上で簡単な実験は終了です。
最後に
いかがでしたでしょうか。
期待通りの動きになったと思います。
前回のIAMユーザーの作成からIAMポリシー、IAMグループ、IAMロールと続いてIAMについて基本的な部分は学べたと思います。
次回以降もハンズオンに参加して実際にAWSを触りながら学んでいこうと思います。
コメント