Php 在两个不同的aws s3账户之间复制或转移文件

Php 在两个不同的aws s3账户之间复制或转移文件,php,amazon-web-services,amazon-s3,Php,Amazon Web Services,Amazon S3,我想将文件从b1 bucket aws s3帐户1传输到b2 bucket aws s3帐户2。 有没有一种方法可以使用aws php sdk实现这一点。 请提供帮助。您需要定义跨帐户IAM/策略,然后使用lambda(或)CLI(或)SDK来执行您希望在资源上执行的任何操作 以下是有关如何为S3访问配置跨帐户IAM的说明。您需要定义跨帐户IAM/策略,然后为您希望在资源上执行的任何操作提供lambda(或)CLI(或)SDK 下面是一个关于如何为S3访问配置跨帐户IAM的示例。首先,使用PHP

我想将文件从b1 bucket aws s3帐户1传输到b2 bucket aws s3帐户2。 有没有一种方法可以使用aws php sdk实现这一点。
请提供帮助。

您需要定义跨帐户IAM/策略,然后使用lambda(或)CLI(或)SDK来执行您希望在资源上执行的任何操作


以下是有关如何为S3访问配置跨帐户IAM的说明。

您需要定义跨帐户IAM/策略,然后为您希望在资源上执行的任何操作提供lambda(或)CLI(或)SDK


下面是一个关于如何为S3访问配置跨帐户IAM的示例。

首先,使用PHP在Amazon S3中复制对象的说明可以在这里找到:

此命令也在存储桶之间工作——甚至在不同区域中的存储桶

然后,要添加在帐户之间复制对象的要求:

  • 使用接收帐户中的凭据调用copy命令(这有助于设置默认权限。如果使用其他方法,请确保将
    ACL
    设置为
    bucket owner full control
  • 您需要授予对该对象的访问权限。因此,如果您使用凭据从接收帐户复制,则必须授予对接收帐户的访问权限
这最好在原始存储桶的存储桶策略中执行,例如:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "arn:aws:iam::RECEIVING-ACCOUNT-ID:user/USERNAME",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::BUCKET-NAME/*"]
    }
  ]
}

底线:授予对对象的访问权,然后复制对象

首先,在Amazon S3中使用PHP复制对象的说明如下:

此命令也在存储桶之间工作——甚至在不同区域中的存储桶

然后,要添加在帐户之间复制对象的要求:

  • 使用接收帐户中的凭据调用copy命令(这有助于设置默认权限。如果使用其他方法,请确保将
    ACL
    设置为
    bucket owner full control
  • 您需要授予对该对象的访问权限。因此,如果您使用凭据从接收帐户复制,则必须授予对接收帐户的访问权限
这最好在原始存储桶的存储桶策略中执行,例如:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "arn:aws:iam::RECEIVING-ACCOUNT-ID:user/USERNAME",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::BUCKET-NAME/*"]
    }
  ]
}

底线:授予对对象的访问权,然后复制对象

是的,手术三年后。但是,嘿,也许这会对某人有所帮助——因为其他答案对我来说不太合适

这个URl帮助了很多人:

我在帐户A的源bucket上设置了上述bucket策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AccountB_ID:user/AccountB_UserName"
            },
            "Action": [
                "s3:GetObject",
                "s3:ReplicateObject"
            ],
            "Resource": [
                "arn:aws:s3:::AccountA_BucketName/*"
            ]
        }
    ]
}
注意:ACCOUNTB_ID是ACCOUNTB的“AWS帐户ID”。我在IAM管理控制台-左侧导航窗格底部找到了我的

然后,我对AccountB_用户名设置了一个策略,我在PHP中使用了该用户名的凭据

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ReplicateObject"
            ],
            "Resource": "arn:aws:s3:::AccountA_BucketName/*"
         }
    ]
}
最后,由于bucket位于不同的区域,我需要在PHP中使用MultiRegionClient

$s3Client  = new \Aws\S3\S3MultiRegionClient($options);
然后使用

$s3Client->copyObject([
                'Bucket'     => $destBucket,
                'Key'        => $destKey,
                'CopySource' => "{$srcBucket}/{$srcKey}",
            ]);)

嗯。

是的,手术三年后。但是,嘿,也许这会对某人有所帮助——因为其他答案对我来说不太合适

这个URl帮助了很多人:

我在帐户A的源bucket上设置了上述bucket策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AccountB_ID:user/AccountB_UserName"
            },
            "Action": [
                "s3:GetObject",
                "s3:ReplicateObject"
            ],
            "Resource": [
                "arn:aws:s3:::AccountA_BucketName/*"
            ]
        }
    ]
}
注意:ACCOUNTB_ID是ACCOUNTB的“AWS帐户ID”。我在IAM管理控制台-左侧导航窗格底部找到了我的

然后,我对AccountB_用户名设置了一个策略,我在PHP中使用了该用户名的凭据

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ReplicateObject"
            ],
            "Resource": "arn:aws:s3:::AccountA_BucketName/*"
         }
    ]
}
最后,由于bucket位于不同的区域,我需要在PHP中使用MultiRegionClient

$s3Client  = new \Aws\S3\S3MultiRegionClient($options);
然后使用

$s3Client->copyObject([
                'Bucket'     => $destBucket,
                'Key'        => $destKey,
                'CopySource' => "{$srcBucket}/{$srcKey}",
            ]);)