僕は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は、一つをちょっと操作するくらいなら、その時に調べるんですが、色々触ろうとすると一気に、わからない単語が増えてつらくなります。
今回のような感じで、わからないことをどんどん減らしていけたらいいなと思います。