AWS管理コンソールへのアクセスをIPアドレスで制限したい
よく訓練されたアップル信者、都元です。現状、AWSの管理コンソールには、どのIPアドレスからでもログイン可能です。しかし、管理コンソールへのアクセスを社内ネットワークからのみに絞りたい、というニーズは常に一定数存在します。という時に使えるTipsを今回は軽くご紹介。
IAMポリシーによる制御
残念ながら、現状ではIPアドレス条件で「管理コンソールへのログインを出来なくする」ことはできません。しかし、IAMポリシーの記述を工夫することにより「管理コンソールへログイン出来たとしても、情報の閲覧をはじめ、各種操作が一切できない」状況にすることができます。
例えば、Administratorアクセス権限を与えるが、指定IPアドレス以外からのアクセスを全て却下する場合は、下記のようなポリシーを適用します。下記の例では、203.0.113.123/32以外からのアクセスは拒否されます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AdministratorAccess", "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Sid": "SourceIPRestriction", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddress": {"aws:SourceIp": "203.0.113.123/32"} } } ] }
ここでは1つのポリシーに「Admin権限許可ステートメント」と「指定IP以外からの操作拒否ステートメント」を記述しましたが、もちろんAdmin権限許可するポリシーとIPを制限するポリシーを分けても構いません。
検証
このポリシーを適用したIAMユーザで、まずは指定IPアドレスを使う環境からログインしてみましょう。基本的に *1何も問題なく、各種操作が可能なはずです。一方、別のIPアドレスの環境からログインしてみると…。
このように、管理コンソールの裏側で行われている各APIアクセスが全て拒否され、コンソールが使い物にならなくなります。
課題
さて、このaws:SourceIpによるIPアドレス制限ですが。私は現状1つだけ、課題を認識しています。
Do not use the aws:SourceIp condition. AWS CloudFormation provisions resources by using its own IP address, not the IP address of the originating request. For example, when you create a stack, AWS CloudFormation makes requests from its IP address to launch an Amazon EC2 instance or to create an Amazon S3 bucket, not the IP address from the CreateStack call or the aws cloudformation create-stack command. AWS CloudFormation User Guide - Controlling Access with AWS Identity and Access Management
要するにCloudFormationというのは、我々に成り代わってAWSのシステムが各種APIを叩くことにより自動構築をしているわけです。従って「我々のIPからの操作しか許していない」状態だと、CloudFormationがAPIを叩くことができないんですね。かといって、APIを叩く側のCloudFormationシステムのIPアドレスというのは公開されていません。従って、CloudFormationの機能を損なわずにaws:SourceIpの指定ができない、というのは現状の制限事項となります。
もしかすると、CloudFormationの他にもこのようなケースがあるかもしれません。ご利用の際は各種ドキュメントを熟読の上、ぜひご注意ください。
脚注
- なぜ「基本的に」なのかは後述の "課題" の項にて。 ↩