AWS IAMユーザーの多要素認証管理を委任する方法
AWS Identity and Access Management(IAM)には、ベストプラクティスのリストがあり、これを使用することが推奨されています。これらのベストプラクティスのひとつには、あなたのAWS rootアカウントにおいて多要素認証(MFA)を利用すること、というものがあります。MFAは、あなたが知っている何か(ユーザー名とパスワード)と、あなたが持っているモノ( MFAハードウェアまたはソフトウェアトークン)を介して、あなたの身元を確認します。
一つのアカウントのMFAを有効にすることは、簡単なプロセスであり、rootアカウントのセットアップは、一般的に、わずか数分で終わります。しかし、大規模なMFA管理ではどうでしょうか?中央集権型のプロビジョニングでは、管理が面倒であり、スケールが不十分になります。そうでなくとも、MFA のセキュアアクセスの値には、AWSの資産を保護するために、実行可能なアプローチを求められます。
この投稿は、新しくプロビジョニングされたMFAデバイスを介して認証されるまで、任意のAWSリソースへのアクセスを許可せず、ユーザーが自らプロビジョニングにアクセスし、自分のMFAデバイスで管理できるようにする方法を示します。次の図は、このブログの記事のワークフローを表しています。
このブログ記事の概要
このブログ記事では、2つのIAMグループと2つのIAMポリシーを作成します。そして、グループにポリシーを追加します。その後、テストユーザーを作成し、新しいグループに追加します。最後に、プロセスを検証するために、新しく作成したユーザーとして、 AWS管理コンソールにログインします。このテストがうまくいったならば、最初にコンソールにサインインするとき、テストユーザーは、自分のユーザーのIAMとオプションにアクセスし、自分のパスワードをリセットして、自分のMFAデバイスを管理できます。MFAデバイスを活性化した後、いったん、サインアウトし、再度、サインインすると、Amazon EC2にフルアクセスの権限を持つようになりますできるようになります。(重要なことですが、この例では、EC2のフルアクセス権限を持つようにしていますが、EC2だけでなく、AWSリソースの組み合わせを使用することができます。)
IAMポリシータイプ
あなたはIAMユーザーを作成し、グループに追加することができます。そして、あなたは、いくつかのAWSの機能を制御するために、グループへのポリシーを作成し、アタッチすることができます。あなたは、グループに2つのポリシーをアタッチできます。1つ目は、マネージドポリシーであり、2つ目は、インラインポリシーと呼ばれています。マネージドポリシーは、AWSアカウントに複数のユーザーやグループ、ロールをアタッチできるポリシーです。この記事では、2つのマネージドポリシーを使います:AWSマネージドポリシーと、カスタマーマネージドポリシーを作成します。下記の図では、インラインポリシーをもつグループに、チェックマークがついていることを表しています。
グループの作成
開始するためには、2つのグループを作成します。一つ目は、「EC2_Full_Access」というグループで、もう一つは、「Force_MFA」と呼びます。「EC2_Full_Access」グループは、EC2リソースにフルアクセス権限をもつ、AWSが管理する「AmazonEC2FullAccess」ポリシーを使います。2つ目のグループである「Force_MFA」は、パスワード管理やMFAデバイスを有効にする設定が可能なIAMの権限のみのユーザアクセス権限を限定したカスタムポリシーが使われます。ユーザーに2つのグループを追加することで、そのアカウントにMFAデバイスが設定されて認証が成功した時だけ、EC2にフルアクセス権限が与えられます。
まず、IAMコンソールの「Groups」セクションにいき、「New Group」を選びます。「EC2_Full_Access」という名前をつけて、「Next」をクリックします(下記図参照)。
次は、アタッチするポリシーを選択する画面になります。「フィルター」の入力欄に「ec2」と入力すると、下記図のように、EC2のAWSマネージドポリシーとしてリリースされているリストが表示されます。
「AmazonEC2FullAccess」と表示されているポリシーを選択し、「Next Step」をクリックし、必要な設定が適用されていることを確認してください。
最後に、「グループの作成」をクリックし、下記図の通り、「EC2_Full_Access」グループの作成を完了させます。「Force_MFA」グループの作成は、こちらと同じ手順となりますが、ポリシーを選択する代わりに、この記事の後半で説明する独自のポリシーに置き換えて、グループを作成します。
これで、 IAMコンソールの「Groups」セクションに両方の新しいグループが表示されます。
マネージドポリシーの作成
次のステップで、マネージドポリシーの作成と設定を行います。「Policies」をクリックし、次に「Create Policy」をクリックします。
あなたのアカウントで表示される「Attached Entities」は、前の図と完全に一致しない場合もある点はで留意してください。次の図に示す、一番下に表示されている「Create Your Own Policy」を選択します。そして、「Select」をクリックします。
ポリシーに適当な名前と説明を追加します。たとえば、ポリシーの名前を「Force_MFA」にし、説明には「This policy allows users to manage their own passwords and MFA devices.」などと書いておきます。「Policy Document」セクションには、この「IAMポリシードキュメントのテンプレート」をコピー&ペーストします。ポリシードキュメントの「ACCOUNT-ID-WITHOUT-HYPENS」と書かれているところは、確実に、あなたのAWSアカウントIDに変更しておいてください。もし、AWSアカウントIDがわからない場合は、このリンクのステップから見つけてください。
(前の図にある)「Validate Policy」をクリックし、エラーが表示されていないことを確認し、「Create Policy」をクリックしてください。エラーが見つかった場合は、「IAMポリシードキュメントテンプレート」から正しくコピーされているかチェックしてください。
このポリシードキュメントは、いくつかの領域に分割されています。「IAMポリシーエレメンツのリファレンス」と「IAMドキュメント」を確認してください。
カスタマーマネージとポリシーのアタッチ
これで、グループとポリシーの設定は完了し、Force_MFAと呼ぶカスタマーマネーにアタッチジドポリシーにアタッチし、新しいカスタムグループを作成できました。そして、既存のユーザーや新しいユーザーを追加し、何かテストするためにあなたのグループに追加することができます。
最初に、下記図のとおり、Force_MFAグループに戻ります。
Force_MFAグループで、「Managed Policies」から「Attach Policy」をクリックし、「Filter」ボックスで、「Force」と入力したのが下記の図になります。
「Attach Policy」をクリックすることで、以前に作成した「Force_MFA」ポリシーをアタッチします。
テストユーザーの作成
下記の図に示すように、「mfa-user-1」と「mfa-user-2」という名前のテストユーザーを作成してみます。まず、「Force_MFA」グループに2つのユーザーを追加し、次に「EC2_Full_Access」にユーザを追加します。既存のユーザーを追加し、新しいユーザーを作成しグループに追加することもできます。最初に、Force_MFAグループを設定してください。これは、先にEC2へのフルアクセス権限を与えて、そののち、ロックダウンした際に、アクセスできなくなってしまわないようにするものです。次の図に示すように、2つのテストユーザーは、2つのグループに追加されている必要があります。
動作確認をしてください
次に、どちらかのユーザーでサインインし、MFAデバイスの設定を行って見たいと思います。IAMユーザーのサインインURLにアクセスしてください。通常、「https://ACCOUNT-ID-WITHOUT-HYPHENS.signin.aws.amazon.com/console」になっていると思います。サインインURLをどのように使うのかわからない場合は、「このドキュメント」を見直してみてください。
サインインページでは、これまででグループに追加したIAMユーザーの一つを指定します。このユーザーは、まだ、MFAデバイスを持っていませんので、下記の図のように、「I have an MFA Token」のチェックボックスは、チェックしないようにします。この記事の後半で、MFAデバイスを設定します。
サインインが完了し、ECダッシュボードにアクセスすると、下記図のように、どのリソースにもアクセスできないと、表示されます。
リソースへのアクセス権を得るには、まず、MFAデバイスを設定し、MFAデバイスを使ってサインインし直す必要があります。これを行うには、まず、IAMコンソールへ進みます。今、あなたのユーザーは、限られたIAMリソースのみのアクセスを許可されているため、「いくつかの権限がない」というエラーが表示されることに注意してください。
次に、IAMコンソールの「Users」セクションに行き、サインインに使うユーザーをクリックしてください。(下記の図に示す)「Manage MFA Device」をクリックし、「MFA デバイスの設定」のガイドに従ってください。そして、AWS Management Consoleからサインアウトします。
次に、設定済みのユーザーで再度サインインします。この時、下記の図のように、「I have an MFA Token」のチェックボックスを選択してください。
あなたのデバイスに表示されている、アカウントのMFAコードやアカウントの情報を入力します。MFAデバイスを使用し、AWSマネージメントコンソールにログインすることで、EC2ダッシュボードにアクセスできるようになります。
既に、IAMとIAMポリシーを使用しているは、MFAデバイスを設定し、それを使用して認証するまで(EC2_Full_Accessポリシーで許可された)リソースへのアクセスを防止するのは、どのようにしているのかと驚くかもしれません。この答えは、「Force_MFA」ポリシーでのIAMステートメントの最後にあります。IAMが許可またはリソースへのアクセスを拒否するために使用するルールを検討し、心に留めておく必要があります。
- デフォルトのルールは拒否になっています。Force_MFAポリシーにおいて、いくつかのIAM APIコールへの権限に対して明示的な許可をしています。
{ "Sid": "AllowAllUsersToListAccounts", "Effect": "Allow", "Action": [ "iam:ListAccountAliases", "iam:ListUsers" ], "Resource": [ "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/*" ] }, { "Sid": "AllowIndividualUserToSeeTheirAccountInformation", "Effect": "Allow", "Action": [ "iam:ChangePassword", "iam:CreateLoginProfile", "iam:DeleteLoginProfile", "iam:GetAccountPasswordPolicy", "iam:GetAccountSummary", "iam:GetLoginProfile", "iam:UpdateLoginProfile" ], "Resource": [ "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/${aws:username}" ] }, { "Sid": "AllowIndividualUserToListTheirMFA", "Effect": "Allow", "Action": [ "iam:ListVirtualMFADevices", "iam:ListMFADevices" ], "Resource": [ "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:mfa/*", "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/${aws:username}" ] }, { "Sid": "AllowIndividualUserToManageThierMFA", "Effect": "Allow", "Action": [ "iam:CreateVirtualMFADevice", "iam:DeactivateMFADevice", "iam:DeleteVirtualMFADevice", "iam:EnableMFADevice", "iam:ResyncMFADevice" ], "Resource": [ "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:mfa/${aws:username}", "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/${aws:username}" ] }
- 明示的な拒否は、明示的な許可を上書きします。「Force_MFA」ポリシーでは、MFAデバイスを使用してログインしていない場合、「iam:*」以外のものへのアクセスを明示的に拒否します(ポリシー構造において、「Condition」を使用し、「aws: MultiFactorAuthAge」の有無についての動的な変化をチェックします。EC2のリソースへのアクセスを持っているユーザーにおいても、明示的な拒否は、(EC2_Full_Accessを含む)他のすべてのポリシーの許可よりも優先されます。
{ "Sid": "DoNotAllowAnythingOtherThanAboveUnlessMFAd", "Effect": "Deny", "NotAction": "iam:*", "Resource": "*", "Condition": { "Null": { "aws:MultiFactorAuthAge": "true" } } }
IAMをもっと知るためには
このブログ記事では、MFAデバイスの設定をユーザーに委任し、新しくMFAデバイスを設定し、MFAデバイスを介して認証されるまで、すべてのリソースへのアクセスを許可しないようにする方法を紹介しました。これを行うことにより、大規模環境において、管理者の仕事の中からMFAデバイスの管理作業を削減し、ユーザーに委任することができます。
私たちは、あなたのユーザー管理において、機能性を向上させることができる、IAMとMFAをどのように使用しているかの情報をお待ちしております。管理ポリシーに関するコメントや質問については、IAMフォーラムに投稿してください。
- Mike (翻訳:瀧澤与一)
コメント