オブジェクトロックを使用して Amazon S3 バケット間でクロスアカウントレプリケーションを設定する方法を教えてください。

所要時間2分
0

オブジェクトロックが有効になっている Amazon Simple Storage Service (Amazon S3) バケットにクロスアカウントレプリケーションを設定したいと考えています。

解決策

オブジェクトロックを使用して Amazon S3 バケットにクロスアカウントレプリケーションを設定するには、次の前提条件を満たしてください。

  • 送信先バケットのオブジェクトロックが有効になっていることを確認する。送信先バケットのオブジェクトロックが有効になっていない場合は、AWS サポートに連絡してリクエストを行います。
  • AWS コマンドラインインターフェイス (AWS CLI) または AWS CloudShell にアクセスできることを確認する。
  • レプリケーションを開始する前に、オブジェクトロックトークンがあることを確認する。

ステップ 1: 必要なアクセス許可を持つレプリケーション用の IAM ロールを作成する

1.    ソースアカウント用に、Amazon S3 の信頼関係を持つレプリケーションロールを AWS Identity and Access Management (IAM) コンソールで作成します。

信頼関係は次のようになります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

2.    IAM ロールには、必ず次のようなアクセス許可をアタッチします。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SourceBucketPermissions",
      "Effect": "Allow",
      "Action": [
        "s3:GetObjectRetention",
        "s3:GetObjectVersionTagging",
        "s3:GetObjectVersionAcl",
        "s3:ListBucket",
        "s3:GetObjectVersionForReplication",
        "s3:GetObjectLegalHold",
        "s3:GetReplicationConfiguration"
      ],
      "Resource": [
        "arn:aws:s3:::SourceBucketName/*",
        "arn:aws:s3:::SourceBucketName"
      ]
    },
    {
      "Sid": "DestinationBucketPermissions",
      "Effect": "Allow",
      "Action": [
        "s3:ReplicateObject",
        "s3:ObjectOwnerOverrideToBucketOwner",
        "s3:GetObjectVersionTagging",
        "s3:ReplicateTags",
        "s3:ReplicateDelete"
      ],
      "Resource": [
        "arn:aws:s3:::DestBucketName/*"
      ]
    }
  ]
}

3.    AWS Key Management Service (AWS KMS) キーを使用している場合は、必ず次のようなアクセス許可もアタッチしてください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SourceBucketPermissions",
      "Effect": "Allow",
      "Action": [
        "s3:GetObjectRetention",
        "s3:GetObjectVersionTagging",
        "s3:GetObjectVersionAcl",
        "s3:ListBucket",
        "s3:GetObjectVersionForReplication",
        "s3:GetObjectLegalHold",
        "s3:GetReplicationConfiguration"
      ],
      "Resource": [
        "arn:aws:s3:::SourceBucketName/*",
        "arn:aws:s3:::SourceBucketName"
      ]
    },
    {
      "Sid": "DestinationBucketPermissions",
      "Effect": "Allow",
      "Action": [
        "s3:ReplicateObject",
        "s3:ObjectOwnerOverrideToBucketOwner",
        "s3:GetObjectVersionTagging",
        "s3:ReplicateTags",
        "s3:ReplicateDelete"
      ],
      "Resource": [
        "arn:aws:s3:::DestBucketName/*"
      ]
    },
    {
      "Sid": "SourceBucketKMSKey",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Resource": "SourceBucketKMSKeyARN"
    },
    {
      "Sid": "DestinationBucketKMSKey",
      "Action": [
        "kms:Encrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Resource": "DestinationBucketKMSKeyARN"
    }
  ]
}

ステップ 2: AWS KMS キーのアクセス許可を更新する

送信先アカウントの AWS KMS キーが、ソースアカウントのレプリケーション IAM ロールのアクセスを許可していることを確認します。

例:

{
  "Sid": "AllowS3ReplicationSourceRoleToUseTheKey",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::123456789101:role/s3-replication-role"
  },
  "Action": [
    "kms:GenerateDataKey",
    "kms:Encrypt"
  ],
  "Resource": "*"
}

: AWS KMS のマネージドキー aws/S3 は、クロスアカウントレプリケーションに使用できません。ただし、SSE-S3 暗号化は使用できます。

注: キーポリシーの Resource にアスタリスク (*) を使用すると、ポリシーによりレプリケーションロールにのみキーへのアクセス許可が付与されます。このポリシーでは、レプリケーションロールのアクセス許可の昇格は許可されません。

ステップ 3: 次のバケットポリシーを送信先アカウントに追加する

[プリンシパル] セクションに、ステップ 1 で作成したレプリケーション IAM ロールの ARN を必ず追加してください。

{
  "Version": "2012-10-17",
  "Id": "PolicyForDestinationBucket",
  "Statement": [
    {
      "Sid": "ReplicationPermissions",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role"
      },
      "Action": [
        "s3:ReplicateDelete",
        "s3:ReplicateObject",
        "s3:ObjectOwnerOverrideToBucketOwner",
        "s3:GetBucketVersioning",
        "s3:PutBucketVersioning"
      ],
      "Resource": [
        "arn:aws:s3:::DestBucketName/*",
        "arn:aws:s3:::DestBucketName"
      ]
    }
  ]
}

ステップ 4: replication.json ファイルを作成する

ソースアカウントで、次のような replication.json という名前のファイルを作成します。

{
  "Role": "arn:aws:iam::123456789012:role/s3-replication-role",
  "Rules": [
    {
      "Status": "Enabled",
      "Priority": 10,
      "DeleteMarkerReplication": {
        "Status": "Disabled"
      },
      "Filter": {
        "Prefix": ""
      },
      "Destination": {
        "Bucket": "arn:aws:s3:::destination_bucket"
      }
    }
  ]
}

このファイルには、レプリケーションを設定する JSON 形式のパラメータが含まれます。これらは、Amazon S3 コンソールを使用してレプリケーションを設定する場合に使用するのと同じパラメータです。Amazon S3 コンソールではまだ実行できないため、AWS CLI を使用してレプリケーションを設定する必要があります。

必ず s3-replication-roleステップ 1 の IAM ロールに置き換えてください。また、必要に応じて送信先バケットの ARN、プレフィックスの指定、削除マーカーの設定も含めてください。

ステップ 5: レプリケーションを設定する

上記の設定を保存したら、次の AWS CLI コマンドを使用してファイルを渡します。

aws s3api put-bucket-replication --bucket <SOURCE BUCKET> --replication-configuration file://Replication.json --token <TOKEN>

このコマンドで使用するオブジェクトロックトークンの値を取得するには、AWS サポートに連絡してください。<TOKEN> 値はソースバケットのオブジェクトロックトークンです。

ステップ 6: 検証

上記のコマンドを実行すると、レプリケーションルールがソースバケットに追加されます。このルールにより、新しく追加されたオブジェクトを送信先バケットにレプリケートできます。ソースに新しいオブジェクトを追加して送信先を確認することで、ルールをテストできます。

: レプリケーションを設定したら、Amazon S3 コンソールを使用してレプリケーション設定を更新できます。AWS KMS で暗号化されたオブジェクトをレプリケートするには、[暗号化][AWS KMS で暗号化されたオブジェクトをレプリケートする] を選択してレプリケーション設定を変更します。

関連情報

コンソールを使用した S3 オブジェクトロックの設定

S3 オブジェクトロックの有効化

サーバー側の暗号化 (SSE-C、SSE-S3、SSE-KMS) で作成されたオブジェクトをレプリケートする

AWS公式
AWS公式更新しました 1年前