マネジメントコンソールで参照可能なサービスを制限する

こんにちは、坂巻です。

今回は、特定のIAMユーザに対して、
マネジメントコンソールから参照できるサービスを制限してみたいと思います。

目次

  • カスタマー管理ポリシーの作成
    • ポリシーの内容
    • ポリシーの作成
    • ポリシーの適用
  • 動作確認
    • マネジメントコンソール
    • AWS CLI
  • 最後に

カスタマー管理ポリシーの作成

本エントリでは、マネジメントコンソールよりカスタマー管理ポリシーを作成します。

インラインポリシーを利用して同様の制限を行う事もできますが、
インラインポリシーの場合、プリンシパルエンティティ(ユーザー、グループ、ロール)と1対1の関係になり、
再利用を行う事ができません。

ポリシーの分類についての詳細は、以下のエントリをご確認ください。

AWS IAMポリシーを理解する

ポリシーの内容

ここでは、EC2の一覧表示のみ可能なポリシーを作成します。
ポリシーの内容は以下となります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

Versionエレメント

新規ポリシーを作成するときは、現時点の最新バージョンである2012-10-17を指定します。
Versionエレメントが未指定の場合、旧バージョンの2008-10-17が指定されます。

IAM JSON ポリシーエレメント: Version

Statementエレメント

複数のエレメントを含むことができる、必須のエレメントです。
上記ポリシーではActionResourceEffectエレメントを使用しています。

IAM JSON ポリシーエレメント: Statement

Actionエレメント

許可または拒否される特定のアクション(iam、ec2 sqs、sns、s3等)を指定します。

IAM JSON ポリシーエレメント: Action

上記で指定しているec2:DescribeInstancesは、EC2インスタンスを一覧で表示するActionとなります。
AWS CLIでもec2:DescribeInstancesのみ実行可能となります。

その他、利用可能なActionについては、以下をご確認ください。

IAM ポリシーで使用できる AWS サービスアクションと条件コンテキストキー

Resourceエレメント

EC2等の各サービスには、リソースが複数ある場合があり、Statementで取り扱うリソースを指定します。
特定のリソースを指定することも可能ですが、
上記ではワイルドカード(*)を指定して、サービス内のすべてのリソースに適用しています。

IAM JSON ポリシーエレメント: Resource

Effectエレメント

必須のエレメントでありStatementの結果に対し、許可または明示的な拒否のどちらにするかを指定します。
上記では許可を指定しています。

IAM JSON ポリシーエレメント: Effect

ポリシーの作成

マネジメントコンソールの「IAM」より、「ポリシー」をクリックします。

ポリシー選択

「ポリシーの作成」をクリックします。

ポリシーの作成

「JSON」をクリックします。

JSON

上記ポリシーをエディタに貼り付け、「Review policy」をクリックします。

Review policy

「名前」、「説明」を入力し、「Create policy」クリックします。

名前

ポリシーが作成されたことを確認します。

名前

ポリシーの適用

作成したポリシーをプリンシパルエンティティのいずれかに適用します。
ここでは作成したポリシーを、IAMユーザに適用します。

マネジメントコンソールの「IAM」より、 「ユーザ」をクリックし、対象ユーザを選択します。

ポリシー選択

「アクセス権限の追加」をクリックします。

追加

「既存のポリシーを直接アタッチ」をクリックします。

検索

作成したポリシー名を検索し、検索結果のポリシーにチェックを付与し、「確認」をクリックします。

追加

「アクセス権限の追加」をクリックします。

確認

対象ユーザにアクセス権限が追加されたことを確認します。

アタッチ

動作確認

マネジメントコンソール

それでは、マネジメントコンソールを確認してみたいと思います。
作成したポリシーを適用したユーザで、マネジメントコンソールにログインします。

EC2のインスタンスを確認すると、正常に参照できます。

ec2

なお、インスタンスの開始を実行すると、エラーとなります。

error1 error2

他のリソース(ここではセキュリティグループ)にアクセスしても、参照権限がないため表示されることはありません。

sg

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.

参照権限がないため、エラーとなりセキュリティグループの情報は表示されません。

最後に

本ポリシーでは、明示的な拒否を行っていないため、
制限を行う対象ユーザに明示的な許可をもったポリシーが適用されている場合は、上記と異なる動作となります。

ポリシーの評価論理については、以下をご確認ください。

IAM JSON ポリシーの評価論理

ポリシー作成した場合、意図した制限となっているか必ず確認するようにお願いします。
次回は制限のバリエーションを増やして紹介したいと思います。