異なるAWSアカウントの2つのバケット間の同期をセットアップしようとしています。
私はcp
を使って作業しました:
_@ubuntu:~$ s3cmd cp -v s3://src/dir/ s3://dest/folder --recursive
_
私は_/src/dir
_を所有するユーザーであり、追加しました:
_{
"Version": "2012-10-17",
"Id": "Policy1477299702471",
"Statement": [
{
"Sid": "Stmt1477299696163",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::awsid:user/name"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucket/*"
}
]}
_
テストバケットのバケット権限ポリシー。
_aws sync
_をcronで使用することは推奨されていないため、私は_s3 cp
_が機能するようになりました。
私は試した
_user@ubuntu:~$ aws s3 sync --dryrun s3://src/ s3://dest/ --region eu-central-1
_
しかし、私はアクセスが拒否されます:
致命的なエラー:ListObjects操作の呼び出し時にエラーが発生しました(AccessDenied):アクセスが拒否されました
バケットを所有しているユーザーがアクセスを拒否され、同期が実行されるようにするにはどうすればよいですか?
ListObjects
エラーの原因は、バケット(arn:aws:s3:::bucket/*
)のcontentsにアクセスする権限を割り当てたが、権限を付与しなかったことが原因です- バケット自体に(arn:aws:s3:::bucket
)。 ListObjects
コマンドには、バケットへのアクセスが必要です。
これをテストするために、次のことを行いました。
bucket-a
を作成しましたbucket-b
を作成しましたuser-a
へのアクセス権限を持つアカウントAにIAMユーザーbucket-a
を作成しましたbucket-b
にバケットポリシーを追加しました:
{
"Id": "CopyBuckets",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1",
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket-b",
"arn:aws:s3:::bucket-b/*"
],
"Principal": {
"AWS": [
"arn:aws:iam::<account-a-id>:user/user-a"
]
}
}
]
}
次に、アカウントAでuser-a
を使用して同期をトリガーしました。
aws s3 sync s3://bucket-a s3://bucket-b --profile user-a
うまくいきました。