本記事について
本記事は、2023年12月に社内で実施した勉強会の内容をもとに、外部向けに加筆・再構成したものです。
記載の内容は執筆当時の情報であり、現在の仕様やベストプラクティスと異なる可能性があります。
実装にあたっては、必ず最新の公式ドキュメントをご確認いただくようお願いいたします。
概要
AWSマネジメントコンソールに対してIP制限を適用したいと考え、対応方法を検討しました。
対応方法
- AWSマネジメントコンソールへの直接的なログイン制限はできません
- 各サービスにアクセスした際に権限を付与しないよう制御することは可能です
- アクセス時には「アクセス権限なし」と表示されます
問題点
- AWS CLI での操作にも制限がかかってしまいます
- ローカル環境から CLI コマンドを実行できなくなります
※AWS CloudShell を利用することで回避が可能です
参考URL:
DevelopersIO, hato, AWS CloudShell で IP アドレス制限のある IAM ユーザの操作が AccessDenied になるときの対処方法(2023年12月閲覧)
https://dev.classmethod.jp/articles/tsnote-aws-cloudshell-accessdenied-by-ip-address-restriction/
IAMポリシーの例
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SourceIPRestriction",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [ # IP制限設定
"xxx.xxx.xxx.xxx/32",
"xxx.xxx.xxx.xxx/32"
]
},
"Bool": {
"aws:ViaAWSService": "false" # AWSサービスからのリクエストかの判定。AWSからはtrueになる。
},
"StringNotLike": {
"aws:userAgent": "*aws-cli*" # CloudShellでCLI実行時のIP制限を除外
}
}
},
{ # CloudShellの権限付与
"Action": [
"cloudshell:*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
参考URL:
DevelopersIO, 荒川 靖久, IAM ポリシーで特定条件のアクセス制限をかけつつ、AWS サービスのアクセスは許可したいときの対処方法(2023年12月閲覧)
https://dev.classmethod.jp/articles/tsnote-iam-allow-aws-service/
AWS CloudShell
権限追加に関する補足。
参考URL:
サーバーワークスエンジニアブログ, ReadOnlyAccess では AWS CloudShell は実行できない – AWSCloudShellFullAccess を合わせて付与する(2023年12月閲覧)
https://blog.serverworks.co.jp/readonlyaccess-cannot-create-cloudshell-environment#AWSCloudShellFullAccess-%E3%82%92%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E4%BB%98%E4%B8%8E%E3%81%99%E3%82%8B
【おまけ】rails console のコマンド予測について
CloudShell 上で rails console を実行したところ、コマンド補完が動作しました。非常に便利です。

