【そんなときどうする?】S3をクロスアカウントで使いたい2016-10-27【そんなときどうする?】S3をクロスアカウントで使いたいAWS記事タイトルとURLをコピーするこんにちは、技術3課の紅林です。【そんなときどうする?】シリーズに便乗してみました。今回は、S3をクロスアカウントで利用する方法やハマリポイントをご紹介します。はじめに開発環境と本番環境とでAWSアカウントを分けているとき等、クロスアカウントでS3を扱いたくなるケースがあります。その際に採用できそうないくつかの方法と、実際にやってみるとハマりがちなポイントについてご紹介します。クロスアカウントでの利用方法クロスアカウントでS3を扱う方法ですが、代表的な方法として以下3つの方法があると思います。CLIや各種SDK等からの利用を念頭に置きます。IAMユーザの共有バケットポリシーの許可STSの利用それぞれ簡単に概要を記載します。便宜的に、S3バケットがあるアカウントを「アカウントA」S3バケットを扱うアカウントを「アカウントB」とします。概要アカウントAでS3バケットを扱うことに出来るIAMユーザを作成し、そのクレデンシャルをアカウントBのインスタンスで用いる方法です。下記の通り、クレデンシャルの管理が必要となりますので、可能であれば後述の方法が望ましいと思います。メリット方法が分かりやすいデメリットクレデンシャルの管理が必要イメージ設定例アカウントAで当該S3バケットを操作できるIAMユーザを作成し、クレデンシャルをアカウントBのインスタンスから用います。CLIであれば以下のようにクレデンシャルを用います。概要アカウントAのバケットのバケットポリシーにアカウントBのIAMのARNを許可する。メリットクレデンシャルの管理が不要デメリットアップロードしたオブジェクトにバケットポリシーが適用されない(※詳細は後述)イメージ設定例アカウントAのバケットポリシーを以下のように設定します。アカウントBのIAMロール等を指定して、そのロールからのアクションを許可します。概要STSを用いてBアカウントはAアカウントの一時クレデンシャルを用いる。describe-instancesハマリポイントバケットポリシーで実現する場合アカウントBからオブジェクトをアップロードした場合、オブジェクトの所有者はアカウントB(バケット所有者のアカウントAとは別のアカウント)になるためバケットポリシーがオブジェクトに適用されません。静的ウェブホスティングを有効にしているバケットに、アカウントBからオブジェクトをアップロードしても、バケットポリシーが適用されないため、アップロードしただけではそのコンテンツは公開できません(公開するためには、アップロード後にオブジェクトの権限を変更する必要があります)。バケットの所有者は、自分が所有していないオブジェクトへのアクセス許可を付与できません。オブジェクトへのアクセス許可を付与するバケットポリシーが適用されるのは、バケットの所有者が所有しているオブジェクトに対してだけです。ServiceVPCエンドポイントがある場合もし、アカウントBにVPCエンドポイントがある場合には注意が必要です。VPCエンドポイントは指定のリージョンのすべてのS3に対するエンドポイントとなります。アカウントAのS3バケットにアクセスする際にもVPCエンドポイント経由になります。リソースへのアクセスが許可されます。リソースが含まれます。Cloudこれがいつ影響するかというと、例えば、S3バケットのアクセス制御をバケットポリシーで行う場合、アカウントBのインスタンスのIPアドレスでの制限が出来ません。アカウントBのインスタンスはVPCエンドポイント経由でアクセスしてくるので、VPCエンドポイントのIDで制限する必要があります。エンジニアブログおわりに以上、S3をクロスアカウントで利用する場合の概要とハマリポイントをご紹介してみました。2009-引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。