IAM(Identity and Access Management) ユーザへの権限付与
ポリシー
AWS の権限は ポリシー と呼ばれる AWSの各種サービスへのアクセス件を制御する仕組みをIAM ユーザーやグループ、ロールに設定することで制御することができます。
*IAM ユーザー は人が使うアカウント、IAM グループは IAM ユーザーをひとまとめにしたもの、 IAM ロール は ポリシー を EC2インスタンスなどのリソースに割り当てたものを指します。
IAM のアクセス制御のためのポリシーの種類
IAM に対するアクセス制御は以下の3種類に分類されます。
AWS 管理ポリシー
ポリシーは AWS が事前に用意しているポリシーです。
ユーザやグループ、ロールにアタッチすることもで、ポリシーに定義されたアクセス制御ルールを適用できます。
AWS ドキュメント曰く、「AWS 管理ポリシーの中でも特に有用なカテゴリーは、職務機能用に設計されているものです。」とのことです。
主に以下の管理ポリシー(だそう)です。
職務機能 | ポリシー | 概要 |
---|---|---|
管理者 | AdministratorAccess | フルアクセスが許可され、AWS のあらゆるサービスおよびリソースにアクセス許可を委任できます。 |
Billing (料金) | Billing | 請求情報の確認、支払いの設定、支払いの承認を行う必要があります。ユーザーは、AWS のサービス全体の累計されたコストをモニタリングできます。 |
データベース管理者 | DatabaseAdministrator | AWS クラウドのデータベースのセットアップ、設定、メンテナンスを行います。 |
データサイエンティスト | DataScientist | Hadoop ジョブおよびクエリを実行します。 |
開発者パワーユーザー | PowerUserAccess | アプリケーション開発タスクを実行し、AWS 対応アプリケーションの開発をサポートするリソースとサービスを作成および設定できます。 |
ネットワーク管理者 | NetworkAdministrator | ネットワークリソースの設定とメンテナンスを担当します。 |
セキュリティ監査人 | SecurityAudit | セキュリティ要件の遵守についてアカウントをモニタリングします。 |
サポートユーザー | SupportUser | AWS サポートに連絡し、サポートケースを作成して、既存のケースの状態を確認します。 |
システム管理者 | SystemAdministrator | 開発運用リソースのセットアップおよびメンテナンスを行います。 |
閲覧専用ユーザー | ViewOnlyAccess | すべてのサービスにわたるアカウントの AWS リソースや基本のメタデータのリストを表示できます。 |
詳細は コチラ を参照してください。引用しまくってます。
カスタマーポリシー
ポリシーマネージャーを利用して自身で作成することもできます。
また、JSONを編集して設定することもできます。
個人の所感ですが細かいアクセス制御をしたい場合は独自で作成するのが良いでしょう。
AWS が事前に用意しているポリシーは 2019/9 時点で 469 もあり、選ぶのも一苦労です。
また、そのポリシーでできること、できないことを把握するのも大変という印象を私は持ちました。
独自で必要な権限を持たせた ポリシー を作った方が手っ取り早いかと思います。
インラインポリシー
インラインポリシーはユーザー、グループ、ロールそのものに埋め込まれたポリシーです。
ユーザーなどを作成する際に埋め込むことができます。
請求情報の管理を IAM ユーザーに許可する
IAM ユーザーにはデフォルトでは請求情報へのアクセスは不可になっています。
AdministratorAccess ポリシーや Billing ポリシーを IAM ユーザーやグループへアタッチしたとしても以下の通りアクセスを拒否されます。
請求情報の管理を IAM ユーザーに許可するには ヘッダー のアカウント名のプルダウンを開き「マイアカウント」をクリックします。
ページの中部にある「IAM ユーザー/ロールによる請求情報へのアクセス」を展開し、「編集」をクリックします。
「IAM アクセスのアクティブ化」にチェックを入れ、「更新」をクリックします。
これで、Billing 等 のポリシーをアタッチされたユーザーやグループは請求情報へのアクセスが可能になります。
カスタマー管理ポリシーの作成と適用
AWS 管理ポリシーのように、事前に用意されているポリシーでは賄えないような、独自の細かなアクセス制御ルールをIAMユーザーに適用するためには、カスタマー管理ポリシーを作成する必要があります。
ここでは、以下の要件のアクセス制御を行うカスタマー管理ポリシーを作成してみます。
カスタマー管理ポリシーの作成
AWS マネジメントコンソール の 「サービスを検索する」 に "IAM" と入力し、Enterキー を押します。
IAM コンソールに遷移しますので、サイドメニュー(専門用語でナビゲーションペインという)にある「ポリシー」をクリックします。
コンテンツ部(専門用語でコンテンツペインという)にある「ポリシーの作成」をクリックし、「ポリシーの作成」画面に遷移します。
「ビジュアルエディタ」タブと「JSON」タブがありますが、今回は「ビジュアルエディタ」からポリシーを作成します。
慣れれば「JSON」の方が簡単に作成できるのですが、最初は直感的に作成できる「ビジュアルエディタ」が良いでしょう。
それでは「ビジュアルエディタ」タブから「サービスの選択」をクリックします。
今回は EC2 の起動・停止のみが可能なポリシーを作成しますので、「サービスの検索」入力欄に "EC2" と入力します。
入力するとフィルタがかかり、 EC2 に関連するサービスのみが一覧に表示されます。
一覧から 「EC2」 をクリックします。
アクセスを許可するアクションを選択するチェックボックスが表示されます。
EC2 インスタンスの起動・停止は「書き込み」アクションですので、「書き込み」の▶マークをクリックし、詳細を展開します。
展開した選択肢の中に「StartInstances」および「StopInstances」があります。
それぞれ、インスタンスの起動と停止を表すアクションです。
両方にチェックを入れます。
続いて、「▶リソース」をクリックします。
特定のリソース(EC2 インスタンス)に対する起動と停止を許可しますので、「ARNの追加」をクリックします。
※「ARN」とは「Amazon Resource Name」のことを指し、AWSが提供するリソースを一意に識別します。
「ARNの追加」ダイアログが表示されますので、以下の通り入力すると自動で ARN を生成してくれます。
項目 | 入力値 | 備考 |
---|---|---|
Region | ap-northeast-1 | ※東京リージョンの場合 |
Account | 「すべて」にチェック | ※特定のユーザに絞るわけではないため |
Instance id | [EC2ダッシュボードで確認] |
※リージョンやインスタンスIDは EC2 ダッシュボードの以下の赤枠の箇所で確認できます。
リージョンは EC2 ダッシュボードで対象のインスタンスを選択し、「説明」タブ内にある「アベイラビリティゾーン」の先頭から最後から1文字までの文字列です。
その他、コチラ から確認できます。
入力すると「EC2_instance の ARN の指定」に自動で ARN が設定されますので「追加」をクリックします。
指定した ARN が元の画面の「instance」部分に表示されます。
「ポリシーの確認」をクリックします。
「ポリシーの確認」画面が表示されますので、「名前」と「説明」を適当に英語でつけて、「ポリシーの作成」をクリックします。
これで、カスタマー管理ポリシーの作成が完了しました。
グループへアタッチ
作成したカスタマー管理ポリシーをグループへアタッチします。
「IAM Management Console」のナビゲーションペインから「グループ」をクリックします。
コンテンツペインに現在存在するグループ一覧が表示されます。
ここでは "Developer" グループを選択します。
「ポリシーのアタッチ」をクリックします。
「フィルター」に "Sample" と入力すると、先ほど作成した 「SampleCustomerPolicy」 のみが一覧に表示されます。
「SampleCustomerPolicy」にチェックを入れ、「ポリシーのアタッチ」をクリックします。
これで、「Developer」グループに属するユーザーは 「SampleCustomerPolicy」のアクセス制御に則り、指定した ARN のEC2インスタンスに対して、インスタンスの起動および停止(のみ)が行えるようになります。
まとめ
これらのように AWS では、ユーザーやグループに対して細かいレベルでアクセス制御を設定することができます。
ユーザーの習熟度に応じて、できること、できないことを適切に設定することでオペレートミスによるトラブルを抑止することができます。
逆に言えば、ユーザーアカウントの使いまわしや、誰でも彼でも Administrator レベルのアクセス制御を割る振るなど、おざなりな取り扱いをすると、とてつもなく大きなリスクを抱えるものと認識しておきましょう。