1.背景と課題
1.1 背景
AWS上の本番以外の環境では、特定のIPアドレスのみリソースへのアクセスを許可する方針が多く採用されています。
IP制限といえば、Security Group(略:SG)、NetworkACL (略:SG)、 Web Application Firewall(略:WAF)だと思い浮かべます
1.2 課題
1.2.1 Network ACL (NACL)
- VPC内のサブネット単位で適用するファイアウォール
- サブネット全体のインバウンド/アウトバウンドトラフィックを制御。(IP許可・拒否が可能)
- S3, DynamoDB, パブリックLambda等には非対応
1.2.2 Security Group (SG)
- ネットワークインターフェース単位で適用。(許可のみ)
- EC2, RDS, ELB, VPC内Lambda, ECS, EFS などで利用
- VPC外やENIのないサービス(S3, DynamoDB, CloudFront, API Gateway, パブリックLambda, SQS, SNS, SES等)には非対応。
- AWSコンソールやCLI経由のアクセスは制御できない
1.2.3 Web Application Firewall (WAF)
- Webアプリへのリクエスト(HTTP/HTTPS)をIPやパターンなどでフィルタリング
- ALB, CloudFront, API Gateway, App Runnerで利用可能
- EC2, S3, DynamoDB, パブリックLambda等には非対応
- 有料
2.提案
AWSはリソースベースポリシーを利用した柔軟なアクセス制御を提供しています
このポリシーでaws:SourceIp条件を指定することで、指定したIPアドレスからのみアクセスを許可・拒否できます
2.1メリット
- リソースごとにアクセス制御可能。リソース対象が多い (参考)
- AWSコンソール、CLI、SDK、サービスエンドポイント経由のアクセスも制御できる
- VPCやENIの有無に依存しない
- 無料
2.2デメリット
- 複雑なポリシー設定はミスに注意(アクセス不能や過度な公開のリスク)。
3. 例えば
3.1 S3上のウェブサイト
このケースでは、NACLとSGで適用できません。WAFを使う場合はCloudFrontを組み合わせてS3と連携しますが、料金が発生します。リソースベースポリシーを使えば、CloudFrontやWAFが不要です
自分のIPのみアクセス可能で、それ以外は拒否されます
3.1.1 S3シンプルなウェブサイト作成
※作成手順を見たら開いてください (折畳)
バケットポリシー
※ バケットポリシーもリソースベースポリシーです
- 全てIPを拒否させますが、私のIPは例外です
-
Denyの発言は最優先
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::trungdq.blog/*"
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::trungdq.blog/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "xxx.xxx.55.85/32" # 私のIP
}
}
}
]
}
3.1.2 デモ
- そもそも許可IPでアクセス可能
- 「hola」といVPN 拡張機能でIPを変更
- 「403」エラーに出てくる
3.2 AWSコンソールのアクセスを制御
許可IPでAWSコンソールにアクセス許可。逆に、拒否されます。
IAMユーザー、ユーザーグループ、ロールに適用できます
3.1.1 準備
Admin権限ユーザを作成します
※作成手順を見たら開いてください (折畳)
- IAM → ユーザー → ユーザー作成
- 画像のように設定
コンソールアクセスが必要だから、「AWS マネジメントコンソールへのユーザーアクセスを提供する - オプション 」をオンにする
- Policy詳細は以下
Policy
- 全てAWSリソースを全てアクションするのを
Denyさせる - 条件は自分のIP以外
{
"Version":"2012-10-17",
"Statement": {
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "xxx.xxx.55.85/32" # 私のIP
}
}
}
}
3.1.1 デモ説明
-
許可IPで通常のように使用可能
-
「hola」といVPN 拡張機能でアメリカIPに変更
-
S3バケット一覧など見られる
-
アメリカIPのうちにログイン不可
-
VPNを抜けて許可IPでログインできる
4.参考
最後
最後までご覧いただきありがとう
組織PR (興味なければ飛ばしても良い)
FPTは先端技術を活用したITソリューションとサービスを提供するベトナムの大手企業です。我々はイノベーションと品質を重視し、グローバルなお客様に信頼されるパートナーを得ております。DXをご希望の方は、ぜひFPTをお選びください。
また、大規模なクラウドプロジェクトをご体験の方は、FPT ABCにご応募ください。







