前回の記事で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ポリシーは、この様にVersion
とStatement
をキーに持つオブジェクトとして記述されます。このポリシーでは1行目の{
から17行目の}
までが一つのオブジェクトです。
Version
はIAMポリシーの構文ルールのバージョンで、基本的には"2012-10-17"
以外の値になることはありません。Statement
で実際に細かいAWSサービスの操作権限を指定します。
Statement
は配列を値に持ち、配列内ではさらにオブジェクトを要素として持つため、ネスト(入れ子)構造となっています。Statement
内のオブジェクトでは基本的にはEffect
、Action
、Resource
をキーに持ちます。
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をセキュアに運用していきましょう。