レプリカ所有者の変更
レプリケーションでは、デフォルトで、レプリケート元オブジェクトの所有者もレプリカを所有しています。レプリケート元とレプリケート先のバケットが異なる AWS アカウント によって所有され、レプリケート先バケットを所有する AWS アカウント にレプリカの所有権を変更したい場合、オプション構成設定を追加して、レプリカの所有権を送付先バケットを所有する AWS アカウント に変更することができます。たとえば、オブジェクトのレプリカへのアクセスを制限するために、これを行うことがあります。これは、レプリケーション設定の所有者オーバーライドオプションと呼ばれます。所有者上書きオプションの詳細については、「レプリケーション設定への所有者オーバーライドオプションの追加」を参照してください。レプリケーション設定の構成については、「オブジェクトのレプリケーション」を参照してください。
所有者オーバーライドを設定するには、以下を実行します。
-
レプリカの所有権を変更するよう Amazon S3 に指示するには、レプリケーション設定に所有者オーバーライドオプションを追加します。
-
レプリカの所有権を変更するアクセス許可を Amazon S3 に付与します。
-
レプリケート先バケットポリシーにアクセス許可を追加して、レプリカの所有権を変更できるようにします。これにより、レプリケート先バケットの所有者がオブジェクトレプリカの所有権を受け入れることができるようになります。
詳細については、「レプリケーション設定への所有者オーバーライドオプションの追加」を参照してください。ステップバイステップの手順を含む実例については、「レプリカの所有者を変更する方法」を参照してください。
オブジェクトの所有権のためのバケット所有者の強制設定
Simple Storage Service (Amazon S3) レプリケーションを使用し、レプリケート元バケットとレプリケート先バケットが異なった AWS アカウント によって所有される場合、バケットを使用する場合、レプリケート先バケットのバケット所有者は ACL を無効にして (「オブジェクト所有権」に対するバケット所有者の強制設定)、レプリカの所有権を送信先バケットを所有する AWS アカウント に変更することができます。この設定は、s3:ObjectOwnerOverrideToBucketOwner
の許可の必要なく、既存の所有者のオーバーライドの動作を模倣します。つまり、バケット所有者の強制設定を使用してレプリケート先バケットにレプリケートされるすべてのオブジェクトは、レプリケート先バケット所有者によって所有されることを意味しています。オブジェクト所有権については、オブジェクトの所有権の制御とバケットの ACL の無効化。 を参照してください。
レプリケーション設定への所有者オーバーライドオプションの追加
警告
所有者オーバーライドオプションを追加するのは、レプリケーション元バケットとレプリケーション先バケットが異なる AWS アカウントによって所有されている場合のみです。Amazon S3 はバケットが同じアカウントによって所有されているか、異なるアカウントによって所有されているかをチェックしません。両方のバケットが同じ AWS アカウントによって所有されている場合に所有者オーバーライドを追加すると、Amazon S3 は所有者オーバーライドを適用します。レプリケート先バケットの所有者にフルアクセス権が付与され、その後の更新はソースオブジェクトアクセスコントロールリスト (ACL) にレプリケートされません。レプリカの所有者は、PUT ACL
リクエストを持つレプリカに関連付けられた ACL を直接変更できますが、レプリケーションを通して変更することはできません。
所有者の上書きオプションを指定するには、各Destination
要素に次を追加します。
-
Amazon S3 にレプリカの所有権を変更するよう指示する
AccessControlTranslation
要素 -
レプリケート先バケット所有者の AWS アカウントを指定する
Account
要素
<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> ... <Destination> ... <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> <Account>
destination-bucket-owner-account-id
</Account> </Destination> </Rule> </ReplicationConfiguration>
次のレプリケーション設定例では、Tax
キープレフィックスを持つオブジェクトをレプリケート先バケットにレプリケートし、レプリカの所有権を変更するようAmazon S3 に指示します。
<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <ID>Rule-1</ID> <Priority>1</Priority> <Status>Enabled</Status> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Destination> <Bucket>arn:aws:s3:::destination-bucket</Bucket> <Account>destination-bucket-owner-account-id</Account> <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> </Destination> </Rule> </ReplicationConfiguration>
レプリカの所有権を変更するための Amazon S3 アクセス許可の付与
IAM ロールに関連付けられているアクセス許可ポリシーに s3:ObjectOwnerOverrideToBucketOwner
アクションのアクセス許可を追加することで、Amazon S3 にレプリカの所有権を変更するアクセス許可を付与します。これは、Amazon S3 がユーザーに代わってオブジェクトを引き受けてレプリケートすることを可能にする、レプリケーション設定で指定した IAM ロールです。
... { "Effect":"Allow", "Action":[ "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::
destination-bucket
/*" } ...
レプリケート先バケットポリシーへのレプリカの所有権を変更するアクセス許可の追加
レプリケート先バケットの所有者は、レプリケート元バケットの所有者に、レプリカの所有権を変更するためのアクセス権限を付与する必要があります。レプリケート先バケットの所有者は、レプリケート元バケットの所有者に、s3:ObjectOwnerOverrideToBucketOwner
アクションのためのアクセス権限を付与します。これにより、宛先バケット所有者はオブジェクトレプリカの所有権を受け入れることができるようになります。次のバケットポリシーステートメントの例は、この操作を行う方法を示しています。
... { "Sid":"1", "Effect":"Allow", "Principal":{"AWS":"
source-bucket-account-id
"}, "Action":["s3:ObjectOwnerOverrideToBucketOwner"], "Resource":"arn:aws:s3:::destination-bucket
/*" } ...
追加の考慮事項
所有権オーバーライドオプションを設定するときは、次の考慮事項が適用されます。
-
デフォルトでは、レプリケート元オブジェクトの所有者がレプリカの所有者となります。Amazon S3 は、オブジェクトバージョンとそれに関連付けられた ACL をレプリケートします。
所有者オーバーライドを追加すると、Amazon S3 はオブジェクトのバージョンのみをレプリケートし、ACL はレプリケートしません。さらに、Amazon S3 は、以降の変更をレプリケート元オブジェクト ACL にレプリケートしません。Amazon S3 は、完全な制御をレプリケート先バケット所有者に許可する ACL をレプリカに設定します。
-
所有者オーバーライドを有効、または無効にするようにレプリケーション設定を更新すると、以下の処理が行われます。
-
レプリケーション設定へ所有者オーバーライドオプションを追加する場合。
Amazon S3 がオブジェクトバージョンをレプリケートすると、レプリケート元オブジェクトに関連付けられている ACL は破棄されます。代わりに、ACL は完全なコントロールをレプリケート先バケットの所有者に与えるレプリカに設定されます。レプリケート元オブジェクト ACL へのそれ以降の変更はレプリケートされません。ただし、この ACL 変更は、所有者オーバーライドオプションを設定する前にレプリケートされたオブジェクトバージョンには適用されません。所有者オーバーライドが設定される前にレプリケートされたレプリケート元オブジェクトの ACL 更新は、レプリケートされ続けます (オブジェクトとそのレプリカの所有者が引き続き同じであるため)。
-
レプリケーション設定から所有者オーバーライドオプションを削除する場合。
Amazon S3 は、レプリケート元バケットと関連 ACL に表示される新しいオブジェクトを、レプリケート先バケットにレプリケートします。所有者オーバーライドを削除する前にレプリケートされたオブジェクトの場合、Amazon S3 によるオブジェクト所有権の変更が有効なため、Amazon S3 は ACL をレプリケートしません。つまり、所有者オーバーライド設定時にレプリケートされたオブジェクトバージョンに設定された ACL は、引き続きレプリケートされません。
-
レプリカの所有者を変更する方法
レプリケーション設定内のレプリケーション元
のバケットと レプリケーション先
のバケットが異なる AWS アカウント によって所有されている場合、Amazon S3 に対し、レプリカの所有権を レプリケーション先
のバケットを所有している AWS アカウント に変更するよう指示できます。この例では、Amazon S3 コンソールおよび AWS CLI を使用してレプリカの所有権を変更する方法について説明します。詳細については、「レプリカ所有者の変更」を参照してください。
注記
S3 レプリケーションを使用し、レプリケート元バケットとレプリケート先バケットが異なった AWS アカウント によって所有される場合、バケットを使用する場合、レプリケート先バケットのバケット所有者は ACL を無効にして ([オブジェクト所有権] に対するバケット所有者の強制設定)、レプリカの所有権を送信先バケットを所有する AWS アカウント に変更することができます。この設定は、s3:ObjectOwnerOverrideToBucketOwner
の許可の必要なく、既存の所有者のオーバーライドの動作を模倣します。つまり、バケット所有者の強制設定を使用してレプリケート先バケットにレプリケートされるすべてのオブジェクトは、レプリケート先バケット所有者によって所有されることを意味しています。オブジェクト所有権については、オブジェクトの所有権の制御とバケットの ACL の無効化。 を参照してください。
クロスアカウントシナリオで AWS Key Management Service でのサーバー側の暗号化を使用したレプリケーションの設定の詳細については、クロスアカウントシナリオに対する追加のアクセス許可の付与 を参照してください。
手順については、「同じアカウントが所有するレプリケート元バケットとレプリケート先バケットのレプリケーションの設定」を参照してください。このトピックでは、バケットが同一の、または異なる AWS アカウントで所有されている場合にレプリケーション設定を行う手順について説明します。
AWS CLI を使用してレプリカの所有権を変更するには、バケットを作成し、バケットのバージョニングを有効にします。さらに、IAM ロールを作成して Amazon S3 にオブジェクトをレプリケートする許可を与え、レプリケート元バケットにレプリケーション設定を追加します。レプリケーション設定で、Amazon S3 にレプリカ所有者の変更を指示します。また、セットアップをテストします。
レプリケート元とレプリケート先のバケットが、異なる AWS アカウントによって所有されている場合にレプリカの所有権を変更するには (AWS CLI)
-
この例では、
source
およびdestination
バケットを 2 つの異なる AWS アカウント で作成します。2 つの名前付きプロファイルで AWS CLI を設定します。この例では、それぞれacctA
とacctB
という名前のプロファイルを使用します。認証情報プロファイルの設定については、AWS Command Line Interface ユーザーガイドの名前付きプロファイルを参照してください。重要
この演習に使用するプロファイルは、必要なアクセス権限を持っている必要があります。たとえば、レプリケーション設定で、Amazon S3 が引き受けることができる IAM ロールを指定します。使用するプロファイルに
iam:PassRole
アクセス権限がある場合のみ実行できます。管理者ユーザーの認証情報を使用して名前付きプロファイルを作成すると、すべてのタスクを実行できるようになります。詳細については、IAM ユーザーガイドの「AWS サービスにロールを渡すアクセス権限をユーザーに付与する」を参照してください。これらのプロファイルが必要なアクセス権限を持っていることを確認する必要があります。たとえば、レプリケーション設定には Amazon S3 が引き受けることのできる IAM ロールが含まれています。そのような設定をバケットにアタッチするために使用する名前付きプロファイルは、
iam:PassRole
アクセス権限がある場合のみ実行できます。これらの名前付きプロファイル作成時に管理者ユーザーの認証情報を指定すると、すべての権限が付与されます。詳細については、IAM ユーザーガイドの「AWS サービスにロールを渡すアクセス権限をユーザーに付与する」を参照してください。 -
レプリケート元
バケットを作成してバージョニングを有効にします。この例では、米国東部 (バージニア北部) (us-east-1) リージョンにレプリケート元
バケットを作成します。aws s3api create-bucket \ --bucket
source
\ --region us-east-1 \ --profile acctAaws s3api put-bucket-versioning \ --bucket
source
\ --versioning-configuration Status=Enabled \ --profile acctA -
レプリケート先
バケットを作成してバージョニングを有効にします。この例では、米国西部 (オレゴン) (us-west-2) リージョンにレプリケート先
バケットを作成します。レプリケート元
バケットに使用したものとは異なる AWS アカウント プロファイルを使用してください。aws s3api create-bucket \ --bucket
destination
\ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctBaws s3api put-bucket-versioning \ --bucket
destination
\ --versioning-configuration Status=Enabled \ --profile acctB -
レプリケート先
バケットポリシーにアクセス許可を追加して、レプリカの所有権を変更できるようにします。-
以下のポリシーを
に保存します。destination-bucket-policy
.json{ "Version": "2012-10-17", "Statement": [ { "Sid":
"destination_bucket_policy_sid"
, "Principal": { "AWS":"source-bucket-owner-account-id"
}, "Action": [ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::destination
/*" ] } ] } -
このポリシーを
レプリケーション先
バケットに位置します。aws s3api put-bucket-policy --region
$
{destination_region
} --bucket$
{destination
} --policy file://destination_bucket_policy
.json
-
-
IAM ロールを作成します。
レプリケート元
バケットに後で追加するレプリケーション設定でこのロールを指定します。Amazon S3 は、ユーザーに代わってオブジェクトをレプリケートするこの ロールを引き受けます。IAM ロールは 2 つのステップで作成します。-
ロールを作成します。
-
アクセス権限ポリシーをロールにアタッチします。
-
IAM ロールを作成します。
-
次の信頼ポリシーをコピーして、ローカルコンピュータの現在のディレクトリにある
s3-role-trust-policy.json
という名前のファイルに保存します。このポリシーは、Amazon S3 がロールを引き受けるためのアクセス許可を付与します。{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
-
次の AWS CLI コマンドを実行して、ロールを作成します。
$
aws iam create-role \ --role-name replicationRole \ --assume-role-policy-document file://s3-role-trust-policy.json \ --profile acctA
-
-
アクセス権限ポリシーをロールにアタッチします。
-
次のアクセス権限ポリシーをコピーして、ローカルコンピュータの現在のディレクトリにある
s3-role-perm-pol-changeowner.json
という名前のファイルに保存します。このポリシーは、さまざまな Amazon S3 バケットとオブジェクトアクションに対するアクセス許可を付与します。次の手順では、IAM ロールを作成し、このポリシーをロールにアタッチします。{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::
source
/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::source
" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Resource":"arn:aws:s3:::destination
/*" } ] } -
ポリシーを作成してロールにアタッチするには、次のコマンドを実行します。
$
aws iam put-role-policy \ --role-name replicationRole \ --policy-document file://s3-role-perm-pol-changeowner.json \ --policy-name replicationRolechangeownerPolicy \ --profile acctA
-
-
-
レプリケーション設定をレプリケート元バケットに追加します。
-
AWS CLI では、レプリケーション設定を JSON で指定する必要があります。以下の JSON を、ローカルコンピュータの現在のディレクトリにある、
replication.json
というファイルに保存します。設定で、レプリカ所有権の変更を示すAccessControlTranslation
の追加。{ "Role":"
IAM-role-ARN
", "Rules":[ { "Status":"Enabled", "Priority":1, "DeleteMarkerReplication":{ "Status":"Disabled" }, "Filter":{ }, "Status":"Enabled", "Destination":{ "Bucket":"arn:aws:s3:::destination
", "Account":"destination-bucket-owner-account-id
", "AccessControlTranslation":{ "Owner":"Destination" } } } ] } -
レプリケート元
バケット所有者のアカウント ID およびIAM-role-ARN
の値を指定して JSON を編集します。変更を保存します。 -
次のコマンドを実行して、レプリケート元バケットにレプリケーション設定を追加します。
レプリケート元
バケット名を指定してください。$
aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucketsource
\ --profile acctA
-
-
Amazon S3 コンソールでレプリカの所有権を確認します。
AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 -
オブジェクトを
レプリケート元
バケットに追加します。destination
にオブジェクトレプリカが含まれていること、およびレプリカの所有権がdestination
バケットを所有する AWS アカウント に変更されていることを確認します。
レプリケーション設定を追加するコード例については、「AWS SDK の使用」を参照してください。レプリケーション設定を適切に変更する必要があります。概念については、「レプリカ所有者の変更」を参照してください。