こんにちは。よっしーです(^^)
今日は、ACLについて解説しています。
背景
ACLについて調査する機会がありましたので、その時の内容を備忘として記事に残しました。
ACLとは
AWS (Amazon Web Services) におけるACL (Access Control List) は、様々なAWSリソースへのアクセス権限を細かく制御するためのメカニズムです。主に以下のリソースでACLが利用されています。
- Amazon S3 (Simple Storage Service):
- バケット単位とオブジェクト単位でACLを設定できます。
- 指定したAWSアカウントやAmazon S3の事前定義されたグループ(AuthenticatedUsers、AllUsers)にアクセス権限を付与できます。
- Amazon VPC (Virtual Private Cloud):
- ネットワークACLとセキュリティグループの2種類のACLがあります。
- ネットワークACLはサブネットレベルでインバウンド/アウトバウンドのトラフィックを制御します。
- セキュリティグループはインスタンスレベルでインバウンド/アウトバウンドのトラフィックを制御します。
ACLを適切に設定することで、AWSリソースへの不正アクセスを防ぎ、データの機密性と整合性を守ることができます。ただし近年ではIAM(Identity and Access Management)ポリシーの使用が推奨されており、ACLよりも柔軟でスケーラブルなアクセス制御が可能です。
ACLの設定は非常に細かく行えるため、誤った設定をすると意図しないアクセスが許可/拒否されてしまう可能性があります。そのため、ACLを使用する場合は十分に注意が必要です。
具体例
Amazon S3 のACL例:
- バケットのACLを設定する例
- 特定のAWSアカウントにバケット全体への完全なアクセス権限を付与:
Principal="AWS_ACCOUNT_ID"
- 認証済みAWSユーザー全員に一覧表示のみの権限を付与:
Principal="AuthenticatedUsers" Permission="LIST"
- オブジェクトのACLを設定する例
- 特定のAWSアカウントにオブジェクトへの読み取り権限を付与:
Principal="AWS_ACCOUNT_ID" Permission="READ"
- 全てのAWSユーザーにオブジェクトへの書き込み権限を拒否:
Principal="*" Permission="DENY"
Amazon VPC のACL例:
- ネットワークACLのインバウンドルール
- HTTPトラフィックを許可:
Protocol=TCP PortRange=80 AllowOrDeny=ALLOW
- SSHトラフィックを拒否:
Protocol=TCP PortRange=22 AllowOrDeny=DENY
- セキュリティグループのアウトバウンドルール
- 任意の宛先へのすべてのトラフィックを許可:
Protocol=ALL DestinationIP=0.0.0.0/0
- 特定のIPアドレスからのRDPアクセスのみ許可:
Protocol=TCP PortRange=3389 SourceIP=10.0.1.5/32
これらの例では、特定のアカウント、IPアドレス、ポート番号などで細かくアクセス権限を制御しています。実際のACL設定は環境に合わせて行う必要があります。
ACLとセキュリティグループの違い
ACLとセキュリティグループはAmazon VPCにおけるネットワークアクセス制御の方法ですが、いくつかの違いがあります。
ACL (ネットワークACL)
- サブネットレベルで設定されます
- ステートレスなので、インバウンドとアウトバウンドの両方のルールを設定する必要があります
- ルールの評価順序は番号順 (昇順) になります
- ルールには明示的な許可または拒否が必要です (デフォルトで拒否)
セキュリティグループ
- インスタンスレベルで設定されます
- ステートフルなので、インバウンドルールを許可するとアウトバウンドは自動的に許可されます
- ルールの評価順序は決まっていません
- ルールの最後に暗黙のデフォルトルールがあり、それ以外は明示的に拒否されます
セキュリティグループはインスタンスの種類ごとに設定できるのが利点ですが、ネットワークACLはサブネット単位で設定するため、より粒度の細かい制御が可能です。
また、セキュリティグループはステートフルなので返答通信は許可される一方、ネットワークACLはステートレスなので双方向のルール設定が必要です。
一般的には、まずネットワークACLで最小限のアクセスを許可し、さらにセキュリティグループで詳細なアクセス制御を行うのがベストプラクティスとされています。両者を組み合わせて多層的なセキュリティを確保することが重要です。
おわりに
今日は、 ACLについて解説しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント