
クラウドインテグレーション事業部のにゃんなか(中川)です。
ラスベガスで開催されていた「AWS re:Invent 2019」に初参加し、現地で新サービス発表を直接見てきました!
日本に戻りましたので、新サービスを試していきたいと思います。
今回のお題
Andy JassyのKeynoteで発表された「Amazon S3 Access Points」について試してみます。

「Amazon S3 Access Points」とは
S3 Bucketへのアクセス権限を管理するための新しいBucket設定です。
新規、および既存Bucketに設定可能です。
アクセスポイントという単位でカスタムアクセス権限を設定可能です。
アクセスポイント経由でアクセスすることでカスタムアクセス権限が適用されます。
S3へアクセスポイントを介してアクセスする際は以下のようなARN形式で指定となります。
- CLIでのアクセス例
- ネットワークのアクセスタイプ設定にてVPCもしくはパブリックアクセスを選択することで、例としてVPCからのリクエストのみを許可する制限も簡単に実現可能です。
嬉しいこと:
従来Bucketポリシーに対し要件毎にアクセス権限制御を追加していくと、運用を重ねるにつれ設定が長くなっていき、ポリシーのメンテナンス管理が大変になることもありました。
S3に多数のアプリ/サービスから共有データセットとしてアクセスするユースケースが顕著かと思います。
本機能によりアクセスポイントという単位で設定をわけることが可能となるため、修正時の影響も把握しやすく、視認性もよくなり、ポリシーの運用管理が楽になります。
留意事項:
・すべてのS3 APIに対応しているわけではありません。
・すべてのAWSサービスとの連携に対応しているわけではありません。
・対応しているS3API、AWSサービスは以下をご参照ください。
・アクセスポイントを介してオブジェクトにアクセスするには、アクセスポイント側のポリシーだけではなく、Bucket側本体でもアクセス許可している必要があります。
・アクセスポイントで制限したポリシーはそのアクセスポイントを介するリクエストにのみ適用されます。従来通りBucketに直接アクセスしたときのアクセス制御には適用されません。
設定方法
①S3 Bucket設定にアクセスポイントタブが増えていますね。
「アクセスポイントを作成」を選択します。

②アクセスポイント名を入力します。アクセスポイント名はアカウント単位でリージョン内一意である必要があります。

③ネットワークのアクセスタイプを「VPC」もしくは「インターネット」いずれかを選択します。本例ではリクエスト元としてVPCを選択し進めます。

④VPC IDを入力します。こちらは現時点では手入力です。

⑤今回はパブリックアクセスは許可しないのでデフォルト(すべてブロック)のままにします。

⑥アクセスポイントポリシーを入力します。

今回は試しにIAMユーザ test01に対しListBucket権限を与えてみます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<accountNO>:user/test01"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:ap-northeast-1:<accountNO>:accesspoint/accesspoint01"
}
]
}
設定完了です。

試してみる
構成

・アクセスポイントで許可設定したVPC-A以外に、もうひとつVPC-Bを作成
・各VPCにクライアント用EC2を作成し、それぞれIAMユーザtest01でs3アクセスできるようにします。(※本お試し用の構成であり、本来はセキュリティ上非推奨です)
・お試しなのでVPCエンドポイント側のポリシーでは制限を設けないようにします。
・また今回はBucketポリシーはアクセスポイント経由でのみアクセスできるようにします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<accountNO>:user/test01"
]
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::nyannk001",
"Condition": {
"StringLike": {
"s3:DataAccessPointArn": "arn:aws:s3:ap-northeast-1:<accountNO>:accesspoint/*"
}
}
}
]
}
指定VPCからのみアクセス可能であることの確認
①VPC-AのEC2からアクセスポイント経由でアクセスできることの確認
設定どおりアクセスできました。
$ aws s3api list-objects-v2 --bucket arn:aws:s3:ap-northeast-1:<accountNO>:accesspoint/accesspoint01
{
"Contents": [
{
"LastModified": "2019-12-12T09:41:50.000Z",
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"StorageClass": "STANDARD",
"Key": "test/",
"Size": 0
},
略
]
}
②VPC-BのEC2からアクセスポイント経由でアクセスできないことの確認
設定どおりアクセス拒否されました。
$ aws s3api list-objects-v2 --bucket arn:aws:s3:ap-northeast-1:<accountNO>:accesspoint/accesspoint01 An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
アクセスポイント経由でしかアクセスできないことの確認
①VPC-AのEC2からBucketに直接アクセス確認
設定どおりBucketポリシーで直接アクセス不可となりました。
$ aws s3api list-objects-v2 --bucket nyannk001 An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
さいごに
現行のBucketポリシー運用でお困りかたには朗報ではないでしょうか。
既存Bucketに対しても適用可能ですし設定自体は簡単ですので是非お試しいただけたらと思います。
フォージビジョン エンジニアブログをご覧頂き、ありがとうございました。

re:Invent 2019 Tatonkaチャレンジ 記録19本 にゃんなか
■その他S3関連記事 techblog.forgevision.com