AWS IAM Identity Center のアクセス許可セットで IP アドレス制限を設定する
AWS IAM Identity Center のアクセス許可セットのインラインポリシーを利用して、IP アドレス制限を設定する方法を紹介します。
外部 ID プロバイダーと認証連携している場合は、外部 ID プロバイダーの機能で IP アドレス制限を実施できる場合があります。本ブログでは、cと認証連携していない場合や、外部 ID プロバイダー側で IP アドレス制限を設定できない場合などを想定して AWS IAM Identity Center で IP アドレス制限を実現してみます。
なお、外部 ID プロバイダーで IP アドレス制限を実施することで AWS アクセスポータルにアクセスする前にブロックできます。例えば、Azure AD では条件付きアクセス機能で AWS アクセスポータルへのアクセスを IP アドレスで制限できます。下記ブログでは AWS IAM Identity Center にアクセスするエンタープライズアプリケーションに条件付きアクセスを設定しています。
アクセス許可セットで IP アドレス制限
アクセス許可セットでの IP アドレス制限は IAM ポリシーと同様の方法と実現できます。今回は、IAM ポリシーのユーザーガイドを参考に設定してみます。
AWS: 送信元 IP に基づいて AWS へのアクセスを拒否する - AWS Identity and Access Management
IP アドレス制限のポリシー例
IP アドレス192.0.2.1/32
からのアクセスを許可する例です。次のポリシーをアクセス許可セットのインラインポリシーに設定することが IP アドレス制限の実現方法の 1 つです。
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "192.0.2.1/32" ] }, "Bool": { "aws:ViaAWSService": "false" }, "StringNotLike": { "aws:userAgent": "*aws-cli*" } } } }
Condition の 14 行目は AWS サービスから操作される場合を除外しています。一部の操作はユーザーのが利用している IP アドレスではなく、AWS のサービス経由で実行されるためです。
Condition の 16 行目は AWS CloudShell を利用できるようにする設定です。上述したユーザーガイドに注記がありますが、AWS CloudShell から発生した API リクエストはユーザーの利用している IP アドレスと AWS のサービス経由のどちらでもないため、除外しています。
アクセス許可セットの設定
アクセス許可セットの設定例です。AWS マネージドポリシーで AdministratorAccess 権限を選択するのに加えて、インラインポリシー に上述した IP アドレス制限のポリシーを設定します。
本設定で作成したアクセス許可セットを関連付けたユーザーで指定した192.0.2.1/32
以外の IP アドレスから AWS アカウントにアクセスした場合は、次のようにアカウントにアクセスはできますが、権限がない状態にできます。下記画像は EC2 のマネジメントコンソールの表示例です。
別の例として AWS IAM Identity Center にアクセスしたときの画面です。
次に、指定した IP アドレス192.0.2.1/32
からアクセスすると、EC2 のマネジメントコンソールはエラーなく表示されました。
AWS CloudShell も実行できました。
$ aws sso-admin list-instances { "Instances": [ { "InstanceArn": "arn:aws:sso:::instance/ssoins-7758507c6example", "IdentityStoreId": "d-xxxxxxxxxx" } ] }
IP アドレス制限が実現できていることを確認できました。
AWS CloudShell を除外しない場合
試しに AWS CloudShell を除外しない場合の下記ポリシーでも確認してみます。
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "192.0.2.1/32" ] }, "Bool": { "aws:ViaAWSService": "false" } } } }
許可している IP アドレス192.0.2.1/32
からアクセスした場合においても、次のように AWS CloudShell から実行できませんでした。
$ aws sso-admin list-instances An error occurred (AccessDeniedException) when calling the ListInstances operation: User: arn:aws:sts::111122223333:assumed-role/AWSReservedSSO_AdministratorAccess_067748c8cexample/test-user is not authorized to perform: sso:ListInstances with an explicit deny in an identity-based policy
さいごに
AWS IAM Identity Center のアクセス許可セットで IP アドレス制限を実施する方法を紹介しました。IAM サービスで実現するのとほぼ同じ方法で実現できました。
以上、このブログがどなたかのご参考になれば幸いです。