この記事の目的
この記事は、AWSのIAMサービスの基本的な概念と使用方法を初心者の方に分かりやすく解説し、安全かつ効果的なAWSリソースの管理の第一歩としてIAMの重要性を理解してもらうことを目的としています。
IAMとは何か?
IAM (Identity and Access Management) は、AWSのサービスの中で、ユーザーやアプリケーションがAWSリソースにどのようなアクセスを持つかを管理・制御するサービスです。
なぜIAMが重要なのか?
AWSを使用する上で、誰がどのリソースにどのようなアクセスを持つかを明確に管理することは、セキュリティの観点から非常に重要です。IAMを適切に設定することで、不要なアクセスを制限し、リソースのセキュリティを向上させることができます。
IAMエンティティを理解することの意義
IAMエンティティ、つまりユーザー、グループ、ロールなどの概念を理解することは、AWSのセキュリティ設定の基盤となります。これらのエンティティがどのように連携し、アクセス制御を実現するのかを把握することで、より適切なアクセス権限の設定や管理が可能となります。本記事を通じてIAMエンティティの基本的な知識を習得し、AWS環境でのセキュリティ対策を理解していきましょう。
IAMエンティティの基本
エンティティとは実体を意味し、データベースやシステムにおいて、個別に識別可能な要素やオブジェクトを表す概念です。IAMエンティティは、AWSリソースへのアクセスを許可するAWSのIDとアクセス許可管理サービスです。IAMエンティティとは、AWSリソースへのアクセスを制御するためのものです。
ユーザー
IAMユーザーは、AWSリソースにアクセスする個人やサービスです。ユーザーは、コンソールへのログイン認証情報やAPIのアクセスキーを持つことができ、これによってAWSのリソースへのアクセスが許可されます。
グループの役割
IAMグループは、複数のIAMユーザーをまとめるためのコンテナです。グループ自体には認証情報は存在せず、主にアクセスポリシーの適用という形での役割があります。特定のアクセスポリシーをグループに割り当てることで、そのグループに所属する全ユーザーに同じ権限が一括で適用されるため、ユーザー管理が効率的に行えます。
ロールの利点
IAMロールは、特定の状況やタスクでAWSリソースに一時的にアクセスする必要がある場合に使用される特別なエンティティです。例えば、EC2インスタンスがS3バケットにデータを保存する場合や、別のAWSアカウントのリソースにアクセスする場合など、ロールを使用して一時的なアクセス権限を付与することができます。ロールの主な利点は、永続的な認証情報を持たない点であり、必要な期間やタスクのみ権限を持つことができるため、セキュリティリスクを最小限に抑えることができます。
ロールとポリシーについて詳しくは次の記事で解説しています。
https://envader.plus/article/247
IAMユーザーの作成と管理
ユーザーの作成方法
AWSのIAMユーザーは、いくつかの方法で作成することができます。
AWSマネジメントコンソール
ブラウザベースのインターフェースを使用して、手動でユーザーを作成。簡単なステップに従って情報を入力し、ユーザーの作成と設定が可能です。
CLI (Command Line Interface)
コマンドラインを使用して、スクリプトや一連のコマンドでユーザーを迅速に作成。特に大量のユーザーを一度に作成する際などに便利です。
SDK
AWSの提供するソフトウェア開発キットを使用して、プログラム的にユーザーを作成。アプリケーションやシステムとの統合時に役立ちます。
IaC(Infrastracture as Code)
CroudFomationやTerraformといったIaCツールのコードで作成します。一貫性と保守性が向上します。以下はサンプルコードです。 sample-iam-userというユーザーをsysytemパスに作成しPurpose(目的)タグを付与しています。
resource "aws_iam_user" "sample_user" {
name = "sample-iam-user"
path = "/system/"
tags = {
"Purpose" = "Sample IAM User Creation using Terraform"
}
}
アクセスキーの取り扱い
IAMユーザーがAWSサービスにプログラム的にアクセスする際には、アクセスキー (Access Key ID) とシークレットキー (Secret Access Key) が必要です。 重要性: アクセスキーとシークレットキーは、ユーザーの認証情報の一部として機能します。これらのキーを持っている者は、そのユーザーとしてAWSリソースにアクセスすることができるため、非常に慎重な取り扱いが求められます。
安全な管理・保管方法
キーは絶対に公開しない
公開場所やソースコードにキーを直接記載しないこと。
定期的にキーのローテーションを行う
古いキーを無効にし、新しいキーを発行することで、セキュリティリスクを低減します。
不要なキーは削除
使用していないキーは削除し、必要最低限のキーのみを保持することを心がける。
キーのアクセスを制限
キーの情報を必要とする者のみに共有し、それ以外の者からはアクセスできないようにする。
IAMグループとアクセス制御
IAMのベストプラクティスとして、ポリシーはグループにアタッチし、ユーザーを該当するグループに所属させることが推奨されます。これにより一貫したアクセス権限の提供と効率的な権限管理が可能となり、セキュリティの向上も期待できます。
グループの作成手順
- AWSマネジメントコンソールにログイン後、IAMダッシュボードを開きます。
- 左側のナビゲーションペインで「グループ」を選択し、「新しいグループの作成」をクリックします。
- 必要な情報を入力し、ユーザーをグループに追加することができます。
グループを利用したアクセス権限の設定
- グループの詳細ページから「ポリシーのアタッチ」をクリックします。
- 必要なポリシーを選択し、グループに割り当てることで、そのグループに所属するユーザーに指定のアクセス権限が適用されます。
Terraformのサンプルコード(IAMユーザーをグループに追加)
以下は、Terraformを使用してIAMユーザーをIAMグループに追加するサンプルコードです。
# IAMユーザーを作成
resource "aws_iam_user" "sample_user" {
name = "sample-iam-user"
}
# IAMグループを作成
resource "aws_iam_group" "sample_group" {
name = "sample-iam-group"
}
# IAMグループにユーザーを追加
resource "aws_iam_group_membership" "sample_membership" {
name = "sample-membership"
# IAMユーザーの名前
users = [
aws_iam_user.sample_user.name
]
# IAMグループの名前
group = aws_iam_group.sample_group.name
}
このコードでは、まずIAMユーザーsample-iam-user
とIAMグループsample-iam-group
が作成されます。次に、aws_iam_group_membership
リソースを使用して、該当のユーザーをグループに追加します。
まとめ
IAMの基本を押さえる重要性
AWSを利用する際のセキュリティは非常に重要な要素です。IAMはその中心となるサービスであり、適切なアクセス制御を行うための基本的な知識は必須です。正確なユーザー管理やアクセス権限の設定を通じて、AWSリソースの安全性を確保することができます。
今後の学習のためのステップ
IAMの基本知識を習得した後は、更に応用的な知識や他のAWSサービスとの連携についての学習を進めることをおすすめします。以下の日本語のリソースを参考にしてください。
AWS公式ドキュメント
AWSの公式サイトには、IAMをはじめとする各サービスの詳細なドキュメントが提供されています。基本から応用まで幅広く学べるリソースです。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/introduction.html
AWSブログ
AWSの公式ブログには、技術的なチュートリアルやユースケース、最新のアップデート情報などが掲載されています。IAMに関する記事も多数あり、実際の運用例などを学ぶことができます。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.04.14
就職・転職に有利!AWS プロフェッショナル SAP取得ガイド
この記事では、そんな「AWSプロフェッショナルSAP」について紹介します。取得するまでの手順やオススメ対策ポイントも解説しているので、ぜひ参考にしてください。
- AWS
- 資格
2022.12.29
【徹底解説】サーバーレスサービスLambdaとは
Lambdaは、プログラムを実行する環境を提供しているサービスです。
- AWS
2023.12.26
Terraformで解決! AWS インスタンスプロファイルの作成方法
本記事では、インスタンスプロファイルとは何か?について解説し、Terraformでの構築手順を解説します。
- AWS