[S3 Access Points]S3バケットアクセスをVPC内に制限する #reinvent

2019.12.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

今までは、S3のバケットポリシーでアクセス制御をしていました。今回発表された、Access Pointsを利用することでアクセスポイントごとにアクセス制御を行うことができます。今回は、VPCエンドポイントからアクセスを許可するアクセスポイントを作成してみたいと思います。

やってみた

手順サマリです。VPC、EC2、S3は作成している前提で進めます。

  1. アクセスポイントを作成
  2. VPCエンドポイントを作成
  3. EC2上でアクセスポイント経由でアクセス

設定するS3バケットを選択肢、Access Points > Create access point をクリックします。

VPCを選択し、VPC IDを入力します。Access point policyは設定せずに作成します。

次にVPCエンドポイントを作成します。

ポリシーには以下を指定します。

{
    "Version": "2012-10-17",
    "Statement": [
    {
        "Principal": "*",
        "Action": "*",
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::chiba-backet/*",
            "arn:aws:s3:us-east-2:123456789012:accesspoint/vpc/object/*"
        ]
    }]
}

Resourceには、S3バケットのARNとアクセスポイントのARNを指定します。アクセスポイントのARNは以下のルールで指定する必要があります。 arn:aws:s3:region:account-id:accesspoint/access-point-name/object/resource ARNの後ろにobject/test/image.jpgのように、パスを指定する必要があります。

設定はこれで完了です。VPC内に配置したEC2からアクセスしてみます。bucketにはアクセスポイントのARNを指定します。

$ aws s3api get-object --bucket arn:aws:s3:us-east-2:123456789012:accesspoint/vpc --key my-image.jpg my-image.jpg
{
    "AcceptRanges": "bytes",
    "LastModified": "Thu, 05 Dec 2019 20:40:24 GMT",
    "ContentLength": 659087,
    "ETag": "\"618bba9318a0a50d1b9955420c559a60\"",
    "ContentType": "image/jpeg",
    "Metadata": {}
}

問題なくファイルをダウンロードできました。今度はマネージメントコンソール(インターネット)から、アクセスポイント経由でアクセスしてみます。

VPC経由ではなくインターネット経由のため、グレーアウトされそもそもアクセスポイント経由でアクセスできないですね。

最後に

S3 Access Pointsを使ってVPCアクセスに制限してみました。データレイクの場合、複数のVPCからアクセスが必要なケースがあると思いますので、VPCごとにアクセスポイントを作成することでシンプルに管理できそうです。以前はバケットポリシーないで管理する必要があり複雑になりがちでした。S3 Access Points素敵です。

参考