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 サービスで実現するのとほぼ同じ方法で実現できました。
以上、このブログがどなたかのご参考になれば幸いです。