【IP制限】VPN EndpointとグローバルIPからS3バケットへのアクセスを許可するバケットポリシー

本記事では、以下パターンでのS3バケットへのアクセスを許可するバケットポリシーついて、具体例付きで解説します。

・Client VPN接続時

・特定のIP利用時

S3 Bucket Policy

前提

リソースの名称は下記とする。

・S3バケット:test-bucket

・IAMユーザ:test-user

・VPN Endpointの存在するサブネット:192.168.100.0/27

・グローバルIP:120.154.177.253

※グローバルIPは下記から検索可能

こちら

説明

以下では2つのブロックにポリシーは分けている。

①では、特定のIAMユーザ以外からのアクセスを拒否している。

②では、VPN EndpointとグローバルIPからのアクセス以外を拒否している。

グローバルIPについて記載することで、マネジメントコンソールからの制限も可能になる。

※グローバルIPは可変の場合があるため、その場合はVPNを繋ぎ、CLIからグローバルIPを変更する。

実際のバケットポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyOtherThanAuthenticatedUser",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::test-bucket",
                "arn:aws:s3:::test-bucket/*"
            ],
            "Condition": {
                "ArnNotLike": {
                    "aws:PrincipalArn": [
                        "arn:aws:iam::<AccountID>:user/test-user",
                    ]
                }
            }
        },
        {
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::<AccountID>:user/test-user"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::test-bucket",
                "arn:aws:s3:::test-bucket/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:VpcSourceIp": "192.168.100.0/27", //VPN Endpoitのみ許可
                    "aws:SourceIp": "120.154.177.253"   //グローバルIPのみ許可
                }
            }
        }
    ]
}