matobaの学んだこと

とあるPythonエンジニアのブログ。ソフトウェア開発、執筆活動、ライフログ。

AWS初心者がIAMをわからず調べた話

僕はAWSにもう少し詳しくなりたいと思いました。ただ、AWSのドキュメントは、なんか僕に馴染みません。 AWSのドキュメントを読んでいると頭が痛くなります。今回はIAMについて調べて、僕なりの理解をここに書いておきたいと思います。

他の人が書いた記事がWeb上にあるので、そちらの方がわかりやすいように思います。(実際、僕は、それを参考に自分の理解をここに書いているだけです)

IAMについて

IAMは、ユーザーや権限を管理するサービスです。 Identity and Access Managementの略らしいです。

ルートアカウント

AWSアカウントのスーパーユーザーみたいなやつです。なんでもできます。 逆にいうと、できることを絞ったユーザーアカウントを作ることができます。

最初にAWSアカウントを作るとルートアカウントでログインしてます。

作業用に権限を絞ったユーザーを作って、それでログインしながら作業することになります。

IAMユーザー

AWSアカウントを操作するためのユーザーです。

一つのルートアカウントに対して、複数のIAMユーザーを作成することができます。

IAMユーザーでログインして、AWSにあるサービスを起動したり削除したり設定したり、することができます。

ユーザーごとに、Webブラウザからログインして操作できるかどうか、CUIから操作できるかどうか、を設定できます。両方可能、ということにもできます。

また、AWSで行われた操作のログもIAMユーザー単位で絞り込むことができます。 ユーザーごとに、アクセス権を割り当てることができます。

IAMパスワードポリシー

IAMのユーザーは、基本は、パスワードでログインすることになります。

IAMユーザーは、グループのメンバーに発行することが考えられ、そのメンバーごとにパスワードが管理されるはずです。

というわけで、チームによってパスワードのポリシーを変えたい、という要求があると思います。そういう時はIAMパスワードポリシーを変更するといじれます。

IAMグループ

IAMでは、グループを作ることができます。

これは、複数のユーザーをまとめたもの、、、というより、ユーザーをまとめるタグのようなものです。

ユーザーが一つも所属していないグループも作れます。 一人のユーザーが複数のグループに所属することもできます。

グループ単位で、アクセスできるサービスを制限できます。

このグループは、EC2にアクセスできる。CloudWatchにもアクセスできる。Route 53にはアクセスできない。などが設定できます。

よくわかってないですが、「管理者」「開発者」「運用担当」とかでグループが作れそうだな、とか思ってます。

IAMロール

エンティティに対して、権限を割り当てることができます。

ここでいうエンティティというのは、主にサービスのインスタンスをさしているように見えます。

例えば、「S3に対して、ReadOnlyでアクセスする権利をEC2インスタンスに与える」という設定をする際に、ロールが必要になります。

あるEC2インスタンスを作ったとして、そのEC2インスタンスがS3バケットにアクセスするためには、EC2インスタンスがS3バケットへのアクセスする権利が必要になります。

そこで、「EC2インスタンスからS3バケットにアクセスできる権利」という権利を持ったIAMロールを作ります。そして、そのIAMロールをEC2インスタンスにつけると、EC2インスタンスはE3にアクセスが可能になります。(多分)

IAMポリシー

IAMロールやIAMユーザー、IAMグループに、AWSアカウントの操作に対する権利を設定できる、と書きました。

実際に設定する時は、権利を設定するのではなくて、IAMポリシーを設定します。

IAMポリシーというのは、AWSの操作に対する権利の集合です。

主要なAWSのサービスに対する権利のポリシーは、最初からある程度作られています。

例えば、S3に対するFullAcesssの権利とかS3に対するReadOnlyの権利とかは最初からあります。ただし、S3のファイル一覧の読み込みはできないけど、ファイル単体の読み込みはできる、とか、そういう細かいものは、自分でIAMのポリシーを作る必要があります。(多分)

実際、ポリシーは、jsonで定義されるらしいのですが、WebブラウザからGUIで作れます。僕は初心者なので、とりあえずGUIで作りつつ、jsonをチラ見してます。

あと、このスライドを見てて印象的だったのが、強さは、デフォルトDeny < 明示的なAllow < 明示的なDenyだってことです。

www.slideshare.net

とりあえず、AWSはデフォルトは全部安全な方に倒れていて、基本的に競合したら安全側に倒すように見えます。

IDプロバイダー

OpenIDやSAMLを使って、認証する際のプロバイダーになる、、、のかな?それか外部の認証を利用してAWSを操作するのか。正直、よくわかってません。

Amazon Cognitoというのもあるらしく、こっちも外部認証っぽい。機能が競合しているのかな?

IDプロバイダーのなんか細かいやつっぽいです。

MFA

多要素認証のことです。

ハードウェアキーを使ったり、ソフトウェアキーを使ったり、SMSで認証したり、ができる様子。

とりあえず僕は、自分のスマートフォンで多要素認証をかけて見ました。

終わり

とりあえず今日は、IAMについて気になったことを調べて書きました。

AWSは、一つをちょっと操作するくらいなら、その時に調べるんですが、色々触ろうとすると一気に、わからない単語が増えてつらくなります。

今回のような感じで、わからないことをどんどん減らしていけたらいいなと思います。