マネジメントコンソールで参照可能なサービスを制限する
こんにちは、坂巻です。
今回は、特定のIAMユーザに対して、
マネジメントコンソールから参照できるサービスを制限してみたいと思います。
目次
- カスタマー管理ポリシーの作成
- ポリシーの内容
- ポリシーの作成
- ポリシーの適用
- 動作確認
- マネジメントコンソール
- AWS CLI
- 最後に
カスタマー管理ポリシーの作成
本エントリでは、マネジメントコンソールよりカスタマー管理ポリシーを作成します。
インラインポリシーを利用して同様の制限を行う事もできますが、
インラインポリシーの場合、プリンシパルエンティティ(ユーザー、グループ、ロール)と1対1の関係になり、
再利用を行う事ができません。
ポリシーの分類についての詳細は、以下のエントリをご確認ください。
ポリシーの内容
ここでは、EC2の一覧表示のみ可能なポリシーを作成します。
ポリシーの内容は以下となります。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:DescribeInstances" ], "Resource": "*", "Effect": "Allow" } ] }
Versionエレメント
新規ポリシーを作成するときは、現時点の最新バージョンである2012-10-17
を指定します。
Versionエレメントが未指定の場合、旧バージョンの2008-10-17
が指定されます。
Statementエレメント
複数のエレメントを含むことができる、必須のエレメントです。
上記ポリシーではAction
、Resource
、Effect
エレメントを使用しています。
Actionエレメント
許可または拒否される特定のアクション(iam、ec2 sqs、sns、s3等)を指定します。
上記で指定しているec2:DescribeInstances
は、EC2インスタンスを一覧で表示するActionとなります。
AWS CLIでもec2:DescribeInstances
のみ実行可能となります。
その他、利用可能なActionについては、以下をご確認ください。
IAM ポリシーで使用できる AWS サービスアクションと条件コンテキストキー
Resourceエレメント
EC2等の各サービスには、リソースが複数ある場合があり、Statement
で取り扱うリソースを指定します。
特定のリソースを指定することも可能ですが、
上記ではワイルドカード(*)を指定して、サービス内のすべてのリソースに適用しています。
Effectエレメント
必須のエレメントでありStatement
の結果に対し、許可または明示的な拒否のどちらにするかを指定します。
上記では許可を指定しています。
ポリシーの作成
マネジメントコンソールの「IAM」より、「ポリシー」をクリックします。
「ポリシーの作成」をクリックします。
「JSON」をクリックします。
上記ポリシーをエディタに貼り付け、「Review policy」をクリックします。
「名前」、「説明」を入力し、「Create policy」クリックします。
ポリシーが作成されたことを確認します。
ポリシーの適用
作成したポリシーをプリンシパルエンティティのいずれかに適用します。
ここでは作成したポリシーを、IAMユーザに適用します。
マネジメントコンソールの「IAM」より、 「ユーザ」をクリックし、対象ユーザを選択します。
「アクセス権限の追加」をクリックします。
「既存のポリシーを直接アタッチ」をクリックします。
作成したポリシー名を検索し、検索結果のポリシーにチェックを付与し、「確認」をクリックします。
「アクセス権限の追加」をクリックします。
対象ユーザにアクセス権限が追加されたことを確認します。
動作確認
マネジメントコンソール
それでは、マネジメントコンソールを確認してみたいと思います。
作成したポリシーを適用したユーザで、マネジメントコンソールにログインします。
EC2のインスタンスを確認すると、正常に参照できます。
なお、インスタンスの開始を実行すると、エラーとなります。
他のリソース(ここではセキュリティグループ)にアクセスしても、参照権限がないため表示されることはありません。
AWS CLI
AWS CLIからも参照可能サービスが制限されているか確認してみたいと思います。
まずは、describe-instances
コマンドを利用して、EC2の情報を出力します。
$ aws ec2 describe-instances| jq -r '.Reservations[].Instances[].InstanceId' i-0ac29a4905e455162 i-0fd3a1d12412a75b7 i-02a6159a685e6c99e
EC2のインスタンスIDが出力され、EC2の情報が出力されます。
EC2の情報が多く出力されるため、ここではjq
コマンドを利用してパースしています。
次は、describe-security-groups
コマンドにてセキュリティグループの情報を確認します。
$ aws ec2 describe-security-groups An error occurred (UnauthorizedOperation) when calling the DescribeSecurityGroups operation: You are not authorized to perform this operation.
参照権限がないため、エラーとなりセキュリティグループの情報は表示されません。
最後に
本ポリシーでは、明示的な拒否を行っていないため、
制限を行う対象ユーザに明示的な許可をもったポリシーが適用されている場合は、上記と異なる動作となります。
ポリシーの評価論理については、以下をご確認ください。
ポリシー作成した場合、意図した制限となっているか必ず確認するようにお願いします。
次回は制限のバリエーションを増やして紹介したいと思います。