#はじめに
セキュリティ要件によりAWSマネジメントコンソールへのアクセスをIPアドレスで制限したい場合があります。
しかし__AWSマネジメントコンソールにログインするIPアドレスを制限することはできません。__
代わりにIAMポリシーのグローバル条件キーであるaws:SourceIpを使用して権限でAWSサービスへの操作が可能なIPアドレスを制限することが可能です。
基本的には公式で紹介されているAssumeRoleを使用した解決できますが、AssumeRoleを使用せず直接IAMユーザの権限を使用してAWSの操作が可能なポリシーを作成する方法を紹介します。
Direct ConnectやVPNでプライベートな接続を行っている環境でインターネットへの接続がプロキシで制限されている場合等を想定しています。
#課題
前述した通り公式で紹介されているポリシーでソースIPに基づいてアクセスの制限を行うことは可能です。
しかし、AssumeRoleを使用しない場合各AWSサービスへのAPIコールに対して毎回リクエスト元(送信元IPアドレス)の評価を行うため、VPCエンドポイントを設置するとaws:SourceIpによるリクエスト元の評価ができません。
よってVPCエンドポイントにも対応した汎用的なポリシーを考えていきます。
aws:SourceIp
可用性 – このキーは、リクエスタが VPC エンドポイントを使用してリクエストを行う場合を除き、リクエストコンテキストに含まれます。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip
#解決
##IAMポリシー
下記のポリシーを使用することでVPCエンドポイントを経由した場合でも正しく評価を行ってくれます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "11.22.33.44/32"
},
"Null": {
"aws:SourceVpce": "true"
},
"Bool":{
"aws:ViaAWSService": "false"
}
}
}
]
}
##説明
条件キーの有無を確認することができるNULL演算子を使用し、aws:SourceVpceがtrue(条件キーが存在しない)場合にすべての操作をDenyにする条件をANDで追加しています。
つまりこの条件を追加することでVPCエンドポイントを経由する場合はaws:SourceIpによる評価を行わずに通信を行うことが可能です。
aws:SourceVpce
可用性 – このキーは、リクエスタが VPC エンドポイントを使用してリクエストを行う場合にのみリクエストコンテキストに含まれます。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpce
このポリシーでは以下の条件に合致するリクエストについてはすべて明示的な拒否を行うようになっています。
- リクエスト元IPアドレスが11.22.33.44/32ではない かつ
- aws:SourceVpceがtrueである かつ
- aws:ViaAWSServiceがfalseである