目次

Amazon S3のVPCエンドポイント(Gateway型)で、VPC内からプライベートアクセス




Amazon S3のエンドポイント(Gateway型)とは

VPC内のEC2などから、S3へのアクセスは、インターネット経由になりますが、
S3のGateway型VPCエンドポイントを作成しますと、インターネット経由ではなく、プライベートサブネット内からアクスセスできるようになります。

aws:s3:s3-vpcendpoint-gateway.png

注意事項


実現方法


VPCエンドポイントの作成手順

サービス S3(com.amazonaws.ap-northeast-1.s3)Gateway
VPC エンドポイントを作成するVPCを選択
Route tables S3エンドポイントのルーティングを追加するルートテーブルを撰択。
Policy Full access


アクセス方法

AWS CLI

Gateway型のS3 VPC Endpoint経由でアクセスする場合「--region リージョン」指定が必要です。

aws s3 ls --region ap-northeast-1 s3://<バケット名>/ 




アクセス制御

S3バケットポリシーによる制御

VPC エンドポイントからのみに制限する Amazon S3 のバケットポリシー

VPC エンドポイントからのみに制限。管理コンソールも許可しない例
{
  "Id": "VPCe",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VPCe",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::<<S3-BUCKET-NAME>>",
        "arn:aws:s3:::<<S3-BUCKET-NAME>>/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": [
            "<<VPC-ENDPOINT-ID>>"
          ]
        }
      },
      "Principal": "*"
    }
  ]
}
【おすすめ】VPC エンドポイントからのみに制限。管理コンソールを許可する例
{
  "Id": "VPCe",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VPCe",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::<<S3-BUCKET-NAME>>",
        "arn:aws:s3:::<<S3-BUCKET-NAME>>/*"
      ],
      "NotAction": [
        "s3:ListBucket",
        "s3:ListAllMyBuckets"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": [
            "<<MY-ENDPOINT-ID>>"
          ]
        }
      },
      "Principal": "*"
    }
  ]
}




S3 VPCエンドポイントのPolicyによる制御

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": [
                "arn:aws:s3:::Bucket-AAAA/*",
                "arn:aws:s3:::Bucket-AAAA"
            ]
        }
    ]
}
S3 VPCE ポリシーで 特定のAWSアカウントの S3のみアクセスを許可

https://yohei-a.hatenablog.jp/entry/20201222/1608602963

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "s3:ResourceAccount": [
                        "012345678901",
                        "123456789012"
                    ]
                }
            }
        }
    ]
}
【おすすめ】S3 VPCE ポリシーで 特定のAWSアカウントの S3のみアクセスを許可しつつ、Amazon Linux レポジトリも許可

インターネットにアクセスせずに自分の AL1 または AL2 EC2 インスタンスで yum を更新する

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "s3:ResourceAccount": [
                        "012345678901",
                        "123456789012"
                    ]
                }
            }
        },
        {
          "Principal": "*",
          "Action": [
            "s3:GetObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::amazonlinux.*.amazonaws.com/*",
            "arn:aws:s3:::amazonlinux-2-repos-*/*"
          ]
        }
    ]
}




IAMユーザのポリシーによる制限

【重要】IAMユーザに適用するポリシーで、IP制限だけではなく、VPC Endpointからのアクセスも許可

https://iret.media/62629

以下のみに限定する設定

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Deny",
        "Action": "*",
        "Resource": "*",
        "Condition": {
            "StringNotEquals": {
                "aws:SourceVpce": [
                    "vpce-xxxxxxx"
                ]
            },
            "NotIpAddress": {
                "aws:SourceIp": [
                    "x.x.x.x/32"
                ]
            },
            "Bool": {
                "aws:ViaAWSService": "false"
            }
        }
    }
}




参考