Amazon S3 Access Points のエイリアス とは

https://aws.amazon.com/jp/about-aws/whats-new/2021/07/amazon-s3-access-points-aliases-allow-application-requires-s3-bucket-name-easily-use-access-point/

の記事解説です。

## S3 アクセスポイントとは

S3 アクセスポイントのエイリアスの前にS3 アクセスポイントについて。

(困) S3 バケットを複数のユーザーで共有してアクセス制限を行う場合、バケットポリシーが肥大化して管理が煩雑になってしまう。

![s3accesspoint.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/f97f61cc-4b6f-310b-3568-1bd850776b20.png)

ユーザーごとにアクセスポイントを作成することでアクセスポイントごとにアクセス制限を記載することができ、管理しやすくなります。

![s3accesspoint-Page-2.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/ad1f395d-2e9d-fe9d-bc40-1a6fd6f9ea79.png)

## 作成できるアクセスポイントの種類

VPC からのリクエストのみ許可するアクセスポイント

![s3accesspoint-Page-3.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/4a4ac7db-0e30-25aa-80ba-3027bef5eec6.png)

インターネット越しのリクエストを許可するアクセスポイント

![s3accesspoint-Page-4.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/dc2eaa38-6a75-0552-129b-07e342f4fdac.png)

の 2 種類が定義できます。

## S3 アクセスポイントのエイリアスとは

で、S3アクセスポイントのエイリアスですが、今までS3バケット直で呼んでいたところ、S3アクセスポイント経由に変更する際に置き換えられるモノになります。

> アクセスポイントを作成すると、Amazon S3 はデータアクセス用の Amazon S3 バケット名の代わりに使用できるエイリアスを自動的に生成します。このアクセスポイントエイリアスは、あらゆるアクセスポイントのデータプレーンオペレーションにおいて、Amazon リソースネーム (ARN) の代わりに使用することができます。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/access-points-alias.html

## やってみる

S3バケットを作成し、アクセスポイントへアクセスコントロールを委任するようにバケットポリシーを設定します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/8f3134cb-7ed6-e041-b8ed-714ed7e659c0.png)

```json:アクセスコントロールをアクセスポイントに委任するバケットポリシー
{
    "Version": "2012-10-17",
    "Statement" : [
    {
        "Effect": "Allow",
        "Principal" : { "AWS": "*" },
        "Action" : "*",
        "Resource" : [ "Bucket ARN", "Bucket ARN/*"],
        "Condition": {
            "StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID" }
        }
    }]
}
```

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/access-points-policies.html

アクセスポイントの作成を押します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/77a0fb6c-95a1-3a20-0e2f-b46e9034a85e.png)

アクセスポイント名を記載、ネットワークオリジンをインターネット、アクセスポイントポリシー[^1]を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/8ab97e7f-c732-6ab2-9ab6-f7fd3b8c8910.png)

作成出来ました。アクセスポイントエイリアスも振られていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/5a856005-0033-4e0b-16e2-7b9d2c5b3baa.png)

アクセスポイント経由でファイルをアップロードしてみます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/e6f921d5-66f3-d5f0-2e02-52a6e5f3fc6d.png)

```bash
$ aws s3 cp ./text.txt s3://arn:aws:s3:ap-northeast-1:{アカウントID}:accesspo
int/yu-yama-test
```

上がっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/0f6cef14-86a5-f351-9289-18ac1da997e9.png)


エイリアス経由でも...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/101c99a1-03c2-40fa-7176-efe8a5ba08a1.png)

```bash
$ aws s3 cp ./text2.txt s3://yu-yama-test-th1rsmdpeejqwnuxpdqknkhcmg4hnapn1
a-s3alias
```

上がっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/9ae0b22d-18a2-b946-892d-abcbfb40f565.png)

S3直でも...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/04f55cda-92a4-5b6b-9233-8f1bc15ef1bd.png)

```bash
$ aws s3 cp ./text3.txt s3://yu-yama-20211118
```

上がっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/11d11cd6-6d34-d7ca-a9a5-a8a762fe3239.png)

単純にS3バケット名をアクセスポイントエイリアス名に置き換えられることが確認できます。

## アクセスポイントの使いどころ

> - **大規模な共有データセット:** Access Points を使用すると、ある 1 つの大型サイズのバケットポリシーを分割して、共有データセットにアクセスする必要のある各アプリケーション向けに個別のアクセスポイントポリシーを単独で作成できます。このため、あるアプリケーションに対して正しいアクセスポリシーを作成するのがこれまでよりも簡単になり、ほかのアプリケーションが共有データセット内で実行していることを気にする必要はありません。
> 
> - **データを安全にコピー**: AWS の内部ネットワークや VPC を利用して、S3 Copy API を使って同一リージョンの Access Point 間でデータを高速、安全にコピーします。
> 
> - **VPC へのアクセスを制限:** 1 つの S3 アクセスポイントで、Virtual Private Cloud (VPC) を経由するすべての S3 ストレージアクセスを制限できます。 また、サービスコントロールポリシー (SCP) を作成して、すべてのアクセスポイントを Virtual Private Cloud (VPC) に制限して、データをプライベートネットワーク内でファイアウォール管理できます。
> 
> - **新しいアクセスポリシーをテスト:** アクセスポイントを使用すると、アプリケーションをアクセスポイントに移行するときやアクセスポリシーを既存のアクセスポイントにコピーするときには事前に新しいアクセスポリシーを簡単にテストできます。
> 
> - **特定のアカウント ID にアクセスを制限:** S3 Access Points を使用すると、特定のアカウント ID が所有するアクセスポイント (必然的にバケットも) だけにアクセスを制限するように VPC エンドポイントポリシーを指定できます。この結果、同じアカウント内のバケット群へのアクセスを許可すると同時に VPC エンドポイント経由のほかの S3 アクセスを拒否するアクセスポリシーの作成が簡単になります。
> 
> - **一意の名前を付与:** S3 Access Points では、アカウント内およびリージョン内で一意であれば、どんな名前でも指定できます。たとえば、「test」というアクセスポイントを、アカウントごとに、リージョンごとに設定できます。

https://aws.amazon.com/jp/s3/features/access-points/#When_to_use_S3_Access_Points

複数のユーザー、アプリケーションから利用され、バケットポリシーでは管理しづらくなる場合、VPCからのアクセスに制限する場合、アクセスポリシーをテストする場合に使うと良さそうです。

## 料金

料金は無料です。

## まとめ

エイリアスが使えるようになり、バケットポリシーの管理に疲れていた方々も容易にアクセスポイントの利用へと移行しやすくなりました。まだ使ったことが無い方も、単一のバケットに多数のユーザー(アプリケーション)でアクセスする場合、アクセスポイントの利用を検討しましょう。


[^1]: IAMユーザー(yu-yama-s3-access)のアクセスポイント経由でS3全操作許可としています