🔑

AWSを䜿うにあたりIAMのベストプラクティスをもう䞀床確認する

に公開
2025/12/25

本圓はre:Inventかその呚蟺で発衚されたアップデヌトに぀いお曞こうかなず思ったんですが、自分自身の時間の郜合ず、䟋によっお某ブログに倧量に情報があるので今回は芋送りたした
zennに䜕か曞こうず思っお曞くのも今回が初ですね。

さお、今回は個人的に以前から非垞に気になっおしたう䜿われ方が倚いIAMの䜿い方に぀いお、あらためおネタにしようず思いたす。
どちらかずいうずAWSにそれほど詳しくない人向けの぀もりです。
しれっず䜿っおたすが、そもそもベストプラクティスっお䜕 ずいう方はずりあえずこちらを
ベストプラクティス (best practice)ずは

あくたでもベストプラクティスなのでいきなり党郚を満たすのは難しいかもしれたせんが、こういうものがあるんだよ、ずいうのを認知しおもらえればず思いたす。

ずりあえず真っ先に気を付けたほうがよいこずや泚意しおほしいこずは
よく芋るたずいず思う䜿い方
真っ先にやるべきこず
に蚘茉したす。

IAMずは

公匏ドキュメントをたずは貌っおおきたす。
IAMずは
AWS Identity and Access Managementが䞀応の略さない堎合の正匏ですがIAMアむアムず呌ばれるこずがほずんどです。

AWSのサヌビスに察するアクセスはAWS偎のAPIに察するリク゚ストを送っお行われたすが、このIAMを䜿っおそれぞれのAPIに぀いおの暩限をコントロヌルしたす。
AWSを䜿うにあたっおは、たずマネゞメントコン゜ヌルにアクセスするためのIAMナヌザヌを䜜成するのが最初です埌述したすが、ルヌトナヌザヌをそのたた䜿うのはやめたしょう。

あず、たたにIAMナヌザヌのこずをアカりントず呌ぶ人がいたすが、AWSにおいおはアカりントずいう蚀葉はナヌザヌを指す蚀葉ではないです。
この蟺はサヌバワヌクスさんのブログのこの蚘事がわかりやすいです。
アカりントに察しおIAMナヌザヌを䜜成しおコン゜ヌルにアクセスする、みたいなのをむメヌゞしおおけばずりあえずは問題ないです。
蚀葉の䜿い方を間違えるのは認識霟霬が発生する原因なのでこの蟺はご泚意を。

よく芋るたずいず思う䜿い方

完党に䞻芳ですが、本圓は良くないのによくやっおいるずころを芋る気がする䜿い方。
より现かくはIAMベストプラクティスの説明の項に譲りたす。

ずりあえずIAMナヌザヌのアクセスキヌを䜿わせる

これは本圓にいろんなOSSのREADMEずかでもしれっずそうさせおたすし、ググるずそういう情報ばっかり出おくるのですが、
IAMアクセスキヌが必芁なのは、AWSの倖郚からAWSアカりント内のサヌビスに察しおアクセスを行う必芁があるずきのみです。
AWSの内郚からAWSの各サヌビスを利甚する堎合は原則ずしおIAMロヌルを䜿甚しおください。
たた、䜿う必芁がないのにアクセスキヌを発行するこずがないようにしたしょう。

ずりあえずAdministratorAccessを振る

本圓に最初の少人数が觊る状態ずか、そもそも限られた人しか觊らないみたいな状態ならいったんはよいかなず思いたすが、AWSに觊る人が増えおきたら適切に暩限を蚭蚈する必芁がありたす。

ここに぀いおは正盎自分にも心圓たりがありたすね 

真っ先にやるべきこず

䞋蚘の蚘事がすばらしいたずめなのでぜひ参考にしおください。
AWSアカりントを䜜成したら最初にやるべきこず -セキュリティ線-

ここで蚀及するのはあくたでもIAM呚りに限った話です。
真面目に業務で䜿うずかならCloudTrailやGuardDutyもぜひ䜿いたしょう[1]

  • rootナヌザヌで初回ログむン時、以埌䜿甚するためのIAMナヌザヌを䜜成する
    • 基本的に必芁がなければ以埌rootナヌザヌは䜿わない。
    • rootナヌザヌにはMFAを蚭定しおおくこずを掚奚
  • IAMナヌザヌの䞍芁なアクセスキヌを芋盎す
    • 棚卞しお䜿っおいなさそうなら無効化する
    • コン゜ヌルから最埌に䜿甚された日時を芋るこずが可胜

以䞋ではAWS公匏ドキュメントをなぞる圢で説明を曞いおいきたす。

IAMでのセキュリティベストプラクティス

タむトルは「IAMのベストプラクティス」ず曞きたしたが、䞀応公匏のドキュメント2020/12/20珟圚では䞋蚘です。
IAM でのセキュリティのベストプラクティス

これはそれぞれちょっず掘り䞋げおみたす。
なるべく関連性が近いものを䞀緒に䞊べる感じにしたす。
※芋出しの日本語が倉ですが、あえお盎さずにドキュメントの文蚀をそのたた匕甚しおいたす。

基本線

基本≠簡単です。
IAMを䜿うにあたり真っ先に泚意すべきこずをここにたずめたす。

AWS アカりントのルヌトナヌザヌ アクセスキヌをロックする

AWS アカりントのルヌトナヌザヌ アクセスキヌをロックする
AWSのアカりント䜜成時にはIAMナヌザヌではなくメヌルアドレスずパスワヌドでログむンするこずになりたすが、ルヌトナヌザヌの䜿甚は最小限にずどめたしょう。
なぜなら、ルヌトナヌザヌは察象アカりントに察するすべおの暩限を保持しおおり䜕でも行えおしたうからです。
IAMナヌザヌでも匷い暩限を䞎えるこずは可胜ですが、アカりントの蚭定メヌルアドレスやパスワヌド自䜓を倉えおしたえたり、サポヌトプランのレベルを倉曎したりなど、ルヌトナヌザヌでしかできないこずがありたす。

この項目ではルヌトナヌザヌのアクセスキヌのロックに぀いお曞かれおいたす。
アクセスキヌは䞇が䞀それが挏れおしたうずアクセスキヌの暩限を䜿っおコン゜ヌルログむンなしにAWSアカりントに察しお奜きな操䜜を行えおしたいたす。
よくあるのが高いEC2むンスタンスを倧量に立お仮想通貚をマむニングするのに䜿われるずかですね。
その気になればAWS䞊に構築したものをすべお壊すこずももちろん可胜ですし、悪意を持っお行えば高いサヌビスを䜿いたくっお利甚者を砎産に远い蟌むこずもできるでしょう䞇が䞀そんな事になっおしたったら、たず急いでサポヌトに盞談するこずをお勧めしたす。。
これはアクセスキヌに限らず、ルヌトナヌザヌのコン゜ヌルログむン甚のパスワヌドが挏れおも同じこずです。
ルヌトナヌザヌのアクセスキヌは原則必芁ないのでもし䜜成しおいたら即刻削陀したしょう。
ルヌトナヌザヌのパスワヌドは十分に耇雑なものにし、できれば埌述するMFAも有向にしたしょう。

個々の IAM ナヌザヌを䜜成する

ナヌザヌのために匷床の高いパスワヌドポリシヌを蚭定する

個々の IAM ナヌザヌを䜜成する
ナヌザヌのために匷床の高いパスワヌドポリシヌを蚭定する。

↑でルヌトナヌザヌを原則䜿わないず曞きたしたが、それに䌎いAWSアカりントを䜜ったら真っ先にログむン甚のIAMナヌザヌを䜜成しおください。
自分が䜿うのであれば暩限はいったんAdministrator Accessでずりあえずよいず思いたす。
本来は誰がどのような暩限が必芁かを芋お適切に暩限を蚭定する必芁がありたす埌述

圓然のこずながら、パスワヌドは十分に耇雑なものにしたしょう。
ほかのサヌビスでも同じこずですが、簡単に予枬できるパスワヌドや短すぎるパスワヌドを今でも平然ず䜿っおいるケヌスはよく芋たすし、䜿い回しもたくさん芋たす。
aを@にするずかOを0にするずかはるか昔の察策で今ではほずんど無意味ず考えおよいです。
それぞれや蟞曞攻撃、総圓たり攻撃、パスワヌドリスト攻撃に察しお脆匱です。
確率は䜎くおも、1回でもパスワヌド認蚌を突砎されたら情報は挏れるし奜き攟題されるしで非垞にリスクが高いです。
AWSに限らず、パスワヌドの䜿い回しを避けお十分耇雑なパスワヌドを䜿甚したしょう。
パスワヌドず総圓たり攻撃による解読時間に぀いおはずりあえずWikipediaを貌っおおきたす。
パスワヌド長ず解読時間の関係
なお、これは蚈算機の挔算性胜が飛躍的に䞊昇した堎合時間がさらに短瞮される可胜性がありたす。

MFAの有効化

MFA の有効化

少しでも認蚌突砎されおしたう確率を枛らすためにMFAを䜿甚するこずを掚奚したす。
AWS での倚芁玠認蚌 (MFA) の䜿甚
MFAに䜿えるものはいろいろありたすが、個人的にはAuthyをお勧めしたす。[2]

IAM ナヌザヌぞのアクセス蚱可を割り圓おるためにグルヌプを䜿いたす

IAM ナヌザヌぞのアクセス蚱可を割り圓おるためにグルヌプを䜿いたす。

これを守るず、同じAWSアカりントを䜿うのに耇数のIAMナヌザヌを䜜るこずが必芁になりたすが、それぞれに個別に暩限を振るのではなく、IAMグルヌプを䜿っおそのグルヌプに所属させるこずによっお暩限を蚭定したしょう。
これは単玔に考えおも、たずえば10人ナヌザヌがいたずしおそれぞれ1人ず぀暩限蚭定をしおいくのは面倒です。
圹割ごずにIAMグルヌプを䜜っおそれぞれのグルヌプに必芁な暩限蚭定をしお、そのグルヌプにナヌザヌを所属させお暩限を蚭定したほうが管理䞊も楜です。
たずえば管理者のグルヌプには匷めの暩限を振っおおいお、開発者は暩限を匱めにするなど。

ナヌザヌのために匷床の高いパスワヌドポリシヌを蚭定する

ナヌザヌのために匷床の高いパスワヌドポリシヌを蚭定する。

これはアカりント自䜓の蚭定で、各IAMナヌザヌが蚭定できるパスワヌドに぀いおルヌルを蚭けるこずができたす。
IAM ナヌザヌ甚のアカりントパスワヌドポリシヌの蚭定

最䜎限必芁なのは、最小文字数を長めに蚭定するこずでしょう。
「パスワヌドは耇雑さより長さが倧切」 FBIが指南
アルファベット、数字、蚘号すべおを䜿うこずを必須にするこずもできたすが、そこは必須化しなくおもよいかなず個人的には必須化するこずによっおそれぞれが䞀文字も含たれないパタヌンが候補から消えるため

たた、指定した期間が経過したらパスワヌドを倉曎させるルヌルを蚭けるこずも可胜ですが、2020/12/20珟圚、パスワヌドの定期的な倉曎は非掚奚です。
結局、パスワヌドの定期倉曎は䞍芁なのか、必芁なのか (1/2)
なぜかずいうず、パスワヌドを倉曎するのは倚くは人間ですので、倉曎時に安易なパスワヌドを蚭定しおしたう傟向が匷く、結局人間がセキュリティを䜎䞋させおしたうからです。
本圓はここももうちょっず曞きたいのですが、長くなるので割愛したす。
個人的にはパスワヌド認蚌のみではそもそもあたりセキュアではないので可胜であればMFAず組み合わせるべきず考えおいたす。
パスワヌド認蚌はなぜ危険なのか 泚意すべき攻撃手段ずナヌザヌの行動

アクセスキヌを共有しない

ここはそのたた匕甚したす。
アクセスキヌを共有しない

アクセスキヌを䜿甚するず、プログラムから AWS にアクセスできたす。暗号化されおいないコヌド内にアクセスキヌを埋め蟌んだり、これらのセキュリティ認蚌情報を AWS アカりントのナヌザヌ間で共有したりしないでください。AWS ぞのアクセスを必芁ずするアプリケヌションの堎合は、IAM ロヌルを䜿甚しお䞀時的セキュリティ認蚌情報を取埗するようにプログラムを蚭定したす。プログラムによるアクセスをナヌザヌに個別に蚱可するには、個人甚のアクセスキヌを持぀ IAM ナヌザヌを䜜成したす。

前述したしたがIAMアクセスキヌが必芁なのは、AWSの倖郚からAWSアカりント内のサヌビスに察しおアクセスを行う必芁があるずきのみです。
AWSの内郚からAWSの各サヌビスを利甚する堎合は原則ずしおIAMロヌルを䜿甚しおください。
ごく単玔なずころだず、たずえばEC2をALBを䜿っおスケヌラブルな構成にする際にサヌバ䞊に盎接アクセスキヌを配眮しおおくず、サヌバの台数分アクセスキヌが耇補されるこずになりたす。
あずはルヌトナヌザヌのアクセスキヌず同様、アクセスキヌが挏れるずコン゜ヌルにログむンしおいなくおもそのアクセスキヌのナヌザヌの暩限できる任意の操䜜をされおしたいたす。[3]
IAMロヌルを蚭定しおおけば、cliや各皮SDKはクレデンシャル情報を䜕も蚭定しおいない堎合は基本的に蚭定したロヌルから暩限情報を取埗しおそれを䜿甚するような挙動になっおいたす。

ロヌカルから動䜜確認をするなどのずきにはアクセスキヌがどうしおも必芁になりたすが、キヌそのものに過剰に暩限を持たせずにAssumeRoleを䜿甚するこずを掚奚したす。
これによりナヌザヌ自䜓に暩限を持たせずに、暩限が欲しいずきだけに䞀時クレデンシャルを発行しおそれを蚭定するこずによりAWSの操䜜を行うこずができたす。
cliだず~/.aws/configに曞いおおくだけで簡単に䜿えたす。
AWS CLIで簡単にAssumeRole(スむッチロヌル)

おそらくですが、AWSの各サヌビスに割り圓おられたIAMロヌルは各サヌビスからAssumeRoleを䜿っお暩限を呌び出されお䜿われおいたす。

ロヌルを䜿甚しおアクセス蚱可を委任する

ロヌルを䜿甚しおアクセス蚱可を委任する

↑ではAWS䞊で各リ゜ヌスにアクセスするずきはキヌではなくIAMロヌルを䜿甚したしょうずいう話でしたが、
ここで蚀っおいるのはAWSの別アカりントからのアクセスを蚱可させる堎合にはアクセスキヌを枡すのではなくIAMロヌルの䜿甚を蚱可するこずで暩限を枡したしょう、ずいう話です。
前述のAssumeRoleをほかのアカりントから利甚できるように蚭定する

WebサヌビスずかでもAWSのリ゜ヌスアクセスを芁求する際にAWSのアクセスキヌを芁求するものずIAMロヌルを芁求するものがありたすが、できれば党郚ロヌルを芁求するようにしおほしいですね 。
たずえばDataDogなんかはIAMロヌルで暩限を枡せたす。
Terraform Cloudは2020/12/20珟圚ロヌルで暩限を枡すこずはできないはずです芋た限り。違ったら修正したす。

䞍芁な認蚌情報の削陀

䞍芁な認蚌情報の削陀

曞いおあるずおりです。

IAM ナヌザヌの䞍芁な認蚌情報 (぀たり、パスワヌドずアクセスキヌ) は削陀したす。たずえば、コン゜ヌルを䜿甚しないアプリケヌションで IAM ナヌザヌを䜜成した堎合、IAM ナヌザヌにパスワヌドは必芁ありたせん。同様に、ナヌザヌのみコン゜ヌルを䜿甚する堎合、他のナヌザヌのアクセスキヌは削陀したす。最近䜿甚されおいないパスワヌドやアクセスキヌは削陀の察象ずなりたす

AdministratorAccessを持っおいるナヌザヌのアクセスキヌをバンバン発行しおいるのを芋たりしたすけど、危ないのでなるべく避けたしょう。
たた、キヌだけ必芁なナヌザヌの堎合にはそもそもパスワヌドを蚭定する必芁がありたせん。パスワヌドはコン゜ヌルにログむンするために必芁なものだからですね。

貌ったドキュメントにもありたすが、䞋蚘あたりを参考に察凊するずよいでしょう。
䜿甚しおいない認蚌情報の怜玢
IAM ナヌザヌのパスワヌドの管理
IAM ナヌザヌのアクセスキヌの管理
AWS アカりントの認蚌情報レポヌトの取埗

認蚌情報を定期的にロヌテヌションする

認蚌情報を定期的にロヌテヌションする。

アクセスキヌは必芁がなければ䜿わないず曞きたしたが、もし䜿う堎合は定期的にロヌテヌションするこずを掚奚されおいたす。
たた、ドキュメントではパスワヌドもロヌテヌションを掚奚されおいたすが、パスワヌドの定期倉曎は前述の通り珟圚は非掚奚ずなっおいるのでご泚意を。

応甚線

応甚ず呌んでよいのかわかりたせんが 。
AWSの利甚に慣れおきたら考えるべきずころだず思っおいるこずをこちらに。
実質䞊、䞻に暩限呚りをどうするかのこずです。

このあたりはIAMナヌザヌ、グルヌプ、ロヌル、ポリシヌのそれぞれの関係性を理解しおないずむメヌゞしづらいかもしれないので、
わかりやすいこちらの蚘事をぜひ埡芧ください。
AWS初心者にIAM Policy/User/Roleに぀いおざっくり説明する

以前はポリシヌゞェネレヌタを䜿っおjsonを組み立おるみたいなこずをやっおたしたが、今はビゞュアル゚ディタがあるので比范的IAMポリシヌは䜜りやすくなったず思いたす。
AWS Policy Generator
[新機胜]IAMのVisual Editorを䜿っお芋た[䟿利]

最小限の特暩を認める

どういうこずかずいうず、過剰に暩限を䞎えずに必芁な暩限だけ䞎えたしょう、ずいうこずです。
IAMナヌザヌずかには䜕も考えずにAdministratorAccessを蚭定しがちですが、本来は圹割ごずに暩限を分けるべきです。
たた、IAMロヌルに぀いおは実際の利甚時には必芁最小限の暩限だけ振るようにするのがベストです。
たずえばS3にアクセスするにしおも、S3FullAccessをずりあえず枡すのをやめお、特定バケットの特定のディレクトリのみに絞るなど。
ただ、真面目に暩限蚭蚈しようず思うずそれなりにたいぞんです。
個人的にはたずは匷めの暩限を䞎えお開発しお、埌から必芁な暩限のみに絞るみたいなやり方になるこずが倚いようには感じたす。

AWS 管理ポリシヌを䜿甚したアクセス蚱可の䜿甚開始

アクセスレベルを䜿甚しお、IAM アクセス蚱可を確認する

AWS 管理ポリシヌを䜿甚したアクセス蚱可の䜿甚開始
アクセスレベルを䜿甚しお、IAM アクセス蚱可を確認する

このあたりはドキュメントやIAMのコン゜ヌルを芋たほうが早いですが、
自分で暩限蚭定を现かく蚭定するのももちろんよいのですが、AWSのマネヌゞドポリシヌがありたす。
前述のS3FullAccessなんかもそうですね。
サヌビスごずにFullAccessずかReadOnlyAccessずかあったりしたすが、職務機胜に合わせたポリシヌもありたす。
こちらもしれっず曞いおいたAdministratorAccessずかが該圓したす。
職務機胜の AWS 管理ポリシヌ

むンラむンポリシヌではなくカスタマヌ管理ポリシヌを䜿甚する

むンラむンポリシヌではなくカスタマヌ管理ポリシヌを䜿甚する

むンラむンポリシヌずは、ざっくり蚀うずIAMナヌザヌ・IAMロヌルに個別に蚭定するポリシヌのこずで、ほかのナヌザヌやロヌルに䜿い回すこずができたせん。
基本的にはむンラむンポリシヌは䜿わず、マネヌゞドポリシヌを䜜成しおそれを割り圓おるこずをお勧めしたす。

参考
[AWS]管理ポリシヌずむンラむンポリシヌの違いが分からなかったので改めおIAMポリシヌのお勉匷をする
管理ポリシヌずむンラむンポリシヌ

脚泚
  1. ただし、課金が発生するのでいくらかかるかに぀いおは芋積もっおおくこず ↩

  2. ちなみに、倚芁玠認蚌ず二段階認蚌は玛らわしいですが別の抂念です。
    「二芁玠認蚌」ず「二段階認蚌」の違い ↩

  3. アクセスキヌをアプリケヌションにハヌドコヌドしおコミットしおGitHubに䞊げおしたい䞍正利甚された、みたいな話は調べるず結構出おきたす。
    GitHub に AWS キヌペアを䞊げるず抜かれるっおほんず詊しおみよヌ ↩

GitHubで線集を提案

Discussion