ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

S3 Access Points に新機能 権限委譲が追加!【S3 Access Point とは?】からご紹介

フォージビジョン の にゃんなか (中川) です!!

フォージビジョン エンジニアブログを参照頂き、ありがとうございます!

本記事の内容

テーマ

本記事では、re:invent 2022 期間中に発表された
S3 Access Points の新機能「共有時の権限委譲」
について触れてみたいと思います。

S3 コンソールですと、このタブの機能のお話です。


S3 Access Points 機能自体が「?」という方も知っておいて損はない機能ですので、参考にご覧頂けたら幸いです。

要約

  • S3 アクセス ポイントは、アクセス ポイントという単位で独自のアクセス制御ポリシーを作成して共有アクセスをより簡単に制御できる機能です。

  • 今回、S3 Bucket をクロスアカウントで アクセス ポイントにて共有する際に、S3 Bucket 保有アカウント側ではなく、アクセスする側である AWS アカウント に アクセス ポイントが作成できるようになりました。

  • S3 Bucket 保有アカウント側で細かい権限更新管理の運用作業を強制されなくなったわけです。



S3 Access Points 新機能について

S3 Access Points とは

S3 Access Points は、 S3 Bucket を共有する際のデータへのアクセス設定、維持をシンプルにする機能です。

具体的には、S3 Bucket にアクセスポイントという = アクセス権限が設定可能なアクセス用の拡張エンドポイント を作成することができます。



何に使うのか

利用ケースとして最適なのは大規模な Bucket 共有と思います。

アクセス元の要件が多数あり、細かい権限制御をBucket ポリシーで管理していく場合を例とします。

要件A・・要件B・・とアクセス要件を多数積み重ねていくと、運用を重ねるにつれポリシー設定がうんざりするほど膨大になります。

結果:ポリシーのメンテナンス管理の運用は大変ですね。

 × 変更時の影響が把握しづらい

 × 人為的な修正ミスの混入 

 × デグレ確認の工数

アクセスポイントを使用すると

アクセス要件をアクセスポイントという単位で分割し設定可能になります。

結果:ポリシーメンテナンスの管理負担が軽減します。

 〇 変更する際の修正対象、影響が明確

 〇 人為的な修正ミスは低減

 〇 デグレ確認はアクセスポイントに閉じた範囲


▼ ご参考

アクセスイメージがつかない場合は、以前試してみた記事を書いておりますので、こちらもご参考ください。 techblog.forgevision.com


新機能 について

2022 年 11 月 30 日 機能追加がありました。 aws.amazon.com

このリリースにより、クロスアカウントで S3 Bucket をアクセス ポイントにて共有する際に、S3 Bucket 保有アカウント側ではなく、 アクセスする側である AWS アカウント に アクセス ポイントが作成できるようになりました。

S3 Bucket 保有アカウント側から、共有先に許可した権限の範囲で 権限委譲 (デリゲーション)できるようになったことで、
S3 Bucket 保有アカウント側で一括しての権限更新管理の運用作業を強制されなくなったわけです。

ケース例:
S3 Bucket のアクセス元で、S3 Bucket へのアクセスを許可する IAM ロール、IAM ユーザ の増減が発生

〇従来:
S3 Bucket 保有アカウントの運用保守ベンダーへ Bucket ポリシーの設定変更を依頼

〇今回のリリースにて:
S3 Bucket のアクセス元で、共有する側が許可した権限の範囲で、権限付与を管理可能

スムーズな運用が期待されますね。
なお本機能は、すべてのAWS商用リージョンと、AWS GovCloud(US)リージョンで利用可能ということです。


設定上の注意点

AWS マネジメント コンソール の S3 コンソールでクロスアカウント アクセスポイントを作成することはできないようです。

クロスアカウント アクセスポイントを作成するには、AWS CLI または REST API (AWS SDK) を使用します。

ドキュメント S3 User Guideより

You cannot create cross-account access points in the S3 AWS Management Console. To create cross-account access points use the AWS Command Line Interface or REST API, see Using the AWS CLI or CreateAccessPoint in the Amazon Simple Storage Service API Reference.

docs.aws.amazon.com

※ドキュメントは英語版から転記しております。執筆当初は日本語版ドキュメントにはまだ記載がありませんでした。


設定してみました

クロスアカウントでのアクセスポイント作成には以下2点の作業が必要となります。

① アクセス元に、アクセスポイントを作成する
② アクセス先の Bucket で、Bucket ポリシーを更新する
 = アクセスポイントからのリクエストを承認

ではやってみます。



手順① アクセス元に、アクセスポイントを作成する

前述の通り、S3 コンソール (GUI) にてクロスアカウントでのアクセスポイント作成は未対応のため、 今回は AWS CLI で作成してみます。

AWS CLI で create-access-point を実行します。リファレンスは以下となります。 awscli.amazonaws.com


お試しなのでシンプルな設定で、Cloudshell より実行してみます。
なお、"--bucket-account-id " のオプションがないと作成に失敗します。

$ aws s3control create-access-point \
>     --account-id <*アクセスポイント保有AWSアカウントID*>\
>     --bucket-account-id <*Bucket 保有AWSアカウントID*>\
>     --bucket fvblog-test-share-bucket \
>     --name fvtest-access-point

arn:aws:s3:ap-northeast-1:<*アクセスポイント保有AWSアカウントID*>:accesspoint/fvtest-access-point  fvtest-access-point-7mr1wefdpsn8pc96317zpb6z7is3rapn1a-s3alias

この時点では、手順② のBucket ポリシーは未設定なのでアクセス権限はないのですが作成できました。

S3 コンソールから作成はできませんでしたが、作成後のアクセスポイントは確認できます。

「アクセス」に、"アクセスタイプの取得中にエラーが発生しました" とメッセージがでていました。
通常 "非公開のバケットとオブジェクト" や VPC ID などが表示されますが、表示上の問題で動作確認に関係しないと考えられるので今回はスルーします。



手順② アクセス先の Bucket で、Bucket ポリシーを更新する

ドキュメントに 、クロスアカウントでアクセス許可を委任する際の Bucket ポリシーのサンプルがあります。
※念のため英語版で表示したほうがよいです docs.aws.amazon.com

今回はサンプルに習い、以下を指定してみます。

{
    "Version": "2012-10-17",
    "Statement" : [
    {
        "Effect": "Allow",
        "Principal" : { "AWS": "*" },
        "Action" : ["s3:GetObject","s3:ListBucket"],
        "Resource": [
            "arn:aws:s3:::fvblog-test-share-bucket",
            "arn:aws:s3:::fvblog-test-share-bucket/*"
        ],
        "Condition": {
            "StringEquals" : { "s3:DataAccessPointAccount" : "<*アクセスポイント保有AWSアカウントID*>" }
        }
    }]
}


アクセスしてみる

アクセスポイント経由でS3へアクセスする際に、AWS CLI ではどのように ARN を指定するのか?

ですが、S3 Bucket の ARN は
arn:aws:s3:region:{account-id}:accesspoint/{アクセスポイント名}
となります。
※ {account-id} にはアクセスポイントを保有する AWS アカウントIDが入ります。

docs.aws.amazon.com

なお、アクセスポイント側でのS3 コンソールでも S3 URI を確認できます。


では、S3 へアクセスしてみます。

(1) s3:ListBucket

$ aws s3 ls s3://arn:aws:s3:ap-northeast-1:<*アクセスポイント保有AWSアカウントID*>:accesspoint/fvtest-access-point
2022-12-10 01:28:40         16 test.txt

(2) s3:GetObject

$ aws s3 cp s3://arn:aws:s3:ap-northeast-1:<*アクセスポイント保有AWSアカウントID*>:accesspoint/fvtest-access-point/test.txt ./
download: s3://arn:aws:s3:ap-northeast-1:<*アクセスポイント保有AWSアカウントID*>:accesspoint/fvtest-access-point/test.txt to ./test.txt

アクセスできました、大丈夫そうですね。



▼ ご参考

S3 アクセスポイントではオプションでアクセスポイントポリシーが設定可能です。 権限制御を設計する際は、こちらにサンプルがありますのでご参考ください。

docs.aws.amazon.com

さいごに

S3 Access Points は小規模な共有だと普段つかう機会が少なかったかもしれませんが、今回権限委譲が追加されたことで、大小問わずクロスアカウント共有では利用するメリットはでてきたのではないでしょうか。

フォージビジョン エンジニアブログを最後までご覧いただき、誠にありがとうございました。

※画像に登場した とりさんは、アカショウビンさんでした。いらすとや さん、ありがとうございます!
www.irasutoya.com




■過去の にゃんなか (中川) の記事 techblog.forgevision.com techblog.forgevision.com techblog.forgevision.com techblog.forgevision.com techblog.forgevision.com