【研究でクラウド利用】IAMの使い方・IAMユーザーの作成方法【AWS】

【研究でクラウド利用】IAMの使い方・IAMユーザーの作成方法【AWS】

前回の記事でAWSのアカウント作成からルートユーザーのMFA設定までを紹介しました。ルートユーザーはAWSの操作全般から請求設定、アカウント削除まですべての操作が行えます。

そのため、ルートユーザは普段使いには権限が強すぎるため、実際の運用にはIAMというサービスで作成したユーザーを利用します。

IAMが使いこなせるようになると、一つのアカウントを複数人で運用できるようになるので、AWSをプロジェクトの運用に利用できるなどのメリットがあります。

動作検証済み環境
macOS Monterey(12.5.1)

IAMとは?

IAMとは、「AWS Identity and Access Management」というサービスの略で、IDやアクセス権限の管理が行えます。オンプレミスは物理機器を直接管理・運用するため、例えばデータセンターへの入出管理など物理的な制限を設けることができます。しかし、クラウドはインターネットを介して操作するため、オンプレミスとは異なる管理が必要です。

IAMではAWSを操作するユーザーの作成、権限の設定を行うことで、誰が、どのよう操作を行ったかを把握することができます。

IAMユーザーとは

ルートユーザーに対して、IAMで作成したユーザーのことを指します。
IAMユーザーはユーザー名とパスワードを設定し、IAMユーザーでAWSアカウントにログインすることでAWSの操作が行えます。
AWS内でできる操作は、付与したIAMポリシーによって規定され、自由にカスタマイズすることができます。
また、AWSサービスの操作以外に接続元IPアドレスの制限もIAMポリシーによって設定できます。

IAMユーザーは一つのAWSアカウント内で複数作成することができるため、プロジェクトメンバーの役割に応じて操作権限を分けることで、作業の明確化と整理が行えます。
デフォルトでは5000ユーザーの上限が設けられています。

IAMユーザーとルートユーザーの違い

ルートユーザーはアカウント作成時に作成されるユーザーで一つのAWSアカウントに対して一つ作成されます。ルートユーザーはすべてのAWSサービスの操作と設定が可能で、IAMユーザーとは異なり、IAMポリシーによる操作権限の設定ができません。

また、ルートユーザーのみが可能な操作として、支払い設定の変更アカウントの閉鎖などがあります。そのため、AWS公式ではルートユーザーは必要時以外には使用しないことが推奨されています。

IAMポリシー

IAMポリシーは付与(アタッチ)したIAMユーザー、IAMロール、IAMグループに対して、AWSのどの操作を許可するか、あるいは拒否するかを定義するものとなります。
IAMポリシーはJSON形式で記述され、ユーザーが必要に応じて自由にポリシーを作ることができます。

JSON(JavaScript Object Notation)はデータ記述、表記法の一つで、基本的にはデータのキーと値をコロンで区切った{”Key” : “Value”}のように記述します。JSONは文字列、数値、null値、真偽値、オブジェクト、配列のデータ型で構成されます。
では実際にIAMポリシーの記述内容についてみていきます。例えば、「IAMReadOnlyAccess」というAWSで用意されたポリシーは、以下のように記述されています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:GenerateCredentialReport",
                "iam:GenerateServiceLastAccessedDetails",
                "iam:Get*",
                "iam:List*",
                "iam:SimulateCustomPolicy",
                "iam:SimulatePrincipalPolicy"
            ],
            "Resource": "*"
        }
    ]
}

IAMポリシーは、この様にVersionStatementをキーに持つオブジェクトとして記述されます。このポリシーでは1行目の{から17行目の}までが一つのオブジェクトです。

VersionはIAMポリシーの構文ルールのバージョンで、基本的には"2012-10-17"以外の値になることはありません。Statementで実際に細かいAWSサービスの操作権限を指定します。

Statementは配列を値に持ち、配列内ではさらにオブジェクトを要素として持つため、ネスト(入れ子)構造となっています。Statement内のオブジェクトでは基本的にはEffectActionResourceをキーに持ちます。

Effectは操作を許可するAllowもしくは操作を拒否するDenyを必ず値として持ちます。は

Actionで具体的なAWSに関する操作(アクション)を指定します。AWSのアクションは上記の例のように”AWSサービス名:アクション名”と記述します。例えば7行目のiam:GenerateCredentialReportはIAMのGenerateCredentialReportという操作が指定されています。また、IAMポリシーの値はワイルドカードが指定できます。つまり、9行目のiam:Get*はIAMのGetから始まるアクションが一括で指定したことになります。ポリシーに設定可能なアクションとその内容はAWS公式にまとめられています。

ResourceではEffectで許可もしくは拒否したアクションを適用させるリソースを指定します。このポリシーでは全リソースにたいして適用されることになります。リソース先を指定する場合はARN(Amazon Resource Names)という表記法で記述します。ARNはarn:*partition*:*service*:*region*:*account-id*:*resource-id*のように記述します。

IAMロール

IAMロールはIAMユーザーと同様にIAMポリシーを付与することで操作可能なAWSサービスを定義します。ただし、IAMユーザーのようにAWSアカウントにログインすることはできません。

IAMユーザーはあくまで人が直接AWS環境を操作するものでしたが、IAMロールはAWSサービス間の連携に利用する場合もあります。もちろん人が直接操作する場合にも利用できます。その場合、IAMユーザーからスイッチロールという操作を行うことで実現できます。

例えば、スイッチロールは同様の作業担当が複数人いるプロジェクトの場合、各々のIAMユーザーから共通のIAMロールにスイッチすることで、ロールに作業を集約させることができます。そのため、作業や作業ログの交通整理が行えます。また、スイッチロール先には他のAWSアカウントの指定も可能で、複数のAWSアカウントを運用する場合にもよく利用します。

IAMグループ

IAMグループはIAMユーザーやIAMロールと同様にIAMポリシーを付与することが出来ます。IAMグループはIAMユーザーを所属させることができ、所属したIAMユーザーはIAMグループと同様の権限が引き継がれます。そのため、IAMポリシーを一括で付与・管理する場合に利用します。

IAMを操作するIAMユーザーの作成

今回はIAMを操作するためのIAMユーザーの作成を行います。

IAMユーザーの作成

まずIAMユーザを作成するために、前回作成したAWSアカウントにルートユーザーでサインインします。

AWSのサインインページにアクセスし、ルートユーザーを選択します。Eメールアドレスとパスワードを入力します。次に多要素認証の画面に遷移するので、MFA設定を行った認証アプリの6桁のコードを入力します。

AWSマネージメントコンソールのトップページが表示されたら、ページ上部の検索バーでIAMと入力し、検索結果のIAMを選択します。

IAMのダッシュボード画面に遷移したら、左の「アクセス管理」→「ユーザー」を選択します。

ユーザー一覧画面に遷移したら、右上の「ユーザーを追加」をクリックします。

クリックすると次のような画面に遷移します。ユーザー名の欄に好きなユーザー名を指定できますが、アカウント内にすでに存在するユーザー名と同じ名前は使用できません。今回は「iam-test-user」というユーザーを作成します。

次に、下のAWSアクセス方法を設定します。アクセス方法は今回のようにブラウザ上でAWSマネジメントコンソールにサインインする方法と、認証キーを発行することで例えばMacのターミナルなどのCUI上でAWSにアクセスする方法があります。今回はブラウザ上で操作を行うユーザーを想定し、「パスワード – AWS マネジメントコンソールへのアクセス」を選択します。

選択したら次はパスワードの設定とパスワードリセットの設定を選択します。パスワードリセットは初回サインイン時にパスワード変更が求められる設定です。今回は特に必要ないためチェックを外し、「次のステップ:アクセス権限」をクリックします。

クリックしたらアクセス許可の設定画面に遷移します。ここでは作成するIAMユーザーのアクセス権限を設定します。アクセス許可の設定欄ではIAMグループや他のユーザーのコピーが選択できますが、今回は個別のポリシーを付与するため、右端の「既存のポリシーを直接アタッチ」を選択します。AWSではポリシーを付与することをアタッチするといいます。

下のアクセス権限の境界の設定では、IAMポリシーと同様にJSON形式でAWS操作権限の設定ができます。境界が設定されたIAMユーザーは、アタッチされたIAMポリシーと境界設定がAND条件になった操作のみ実行できます。例えば、プロジェクトで管理しているIAM操作ポリシーをアタッチしたユーザーに対して、IAMユーザーの削除だけは許可したくない場合、境界設定を行えばそのような権限状態のIAMユーザーにすることが出来ます。

今回は設定しないため、デフォルトの「アクセス権限の境界を設定せずに user を作成する」がチェックされたままにします。

「既存のポリシーを直接アタッチ」が選択されたら次のようなIAMポリシー一覧が表示されます。今回はIAM操作用のIAMユーザーを作成するため、AWS管理ポリシーのIAMFullAccessをチェックし、「次のステップ:タグ」をクリックします。

次にタグの設定画面に遷移します。タグを設定するとAWSリソースの整理やグルーピングしたり、IAMポリシーのアクセス制御に指定できますが、今回は設定しないため、何も入力せずに「次のステップ:確認」をクリックします。

最後に確認画面が表示されるので、問題なければ右下の「ユーザーの作成」をクリックします。

成功画面に遷移すれば、無事にIAMユーザーが作成されました。

IAMユーザーでサインイン

IAMユーザーの作成が完了したので、IAMユーザーで操作できるかを確認します。
AWSのサインインページにアクセスし、IAMユーザーを選択します。ルートユーザーのサインイン時とは異なり、AWSアカウントのIDを入力します。

入力したら右のような画面に遷移するので、ユーザー名とパスワードを入力しサインインをクリックします。

サインインが完了するとAWSマネージメントコンソールのトップ画面に遷移します。右上のユーザーの表記がルートユーザーとは異なり、「iam-test-user@xxxx-xxxx-xxxx」という表記になっていれば、IAMユーザーにサインインしたことが分かります。

次に、ルートユーザーと同じようにIAMのダッシュボード画面まで進みましょう。IAMFullAccessのポリシーがアタッチされていれば、画面が表示されます。

では、IAMFullAccessで許可されていない操作が、出来ないことを確認しましょう。
例えば、Amazon VPCの画面に遷移すると下のように赤字が表示されます。これはVPCに関するアクションが許可されていないため、情報がうまく取得できなかったことが示されています。

これでIAMの操作のみが行えるIAMユーザーの作成に成功しました。

最後に

今回はIAMとIAMユーザーの作成方法について紹介しました。IAMをマスターすることで、特定の操作ができるもしくは操作を行ったユーザーの整理が容易になったり、特定のIPを持つ端末のみに操作を制限するなど、AWSがセキュアに利用することが出来ます。
あるいは他のアカウントのロールにスイッチロールすることで、別アカウントの操作を行うといった使い方もできます。

IAMはAWSを本格運用するために必須のサービスです。どんどんチャレンジしてAWSをセキュアに運用していきましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です