我想允許其他 AWS 帳戶的使用者將物件上傳到我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。但我希望使用者授予我完全控制這些物件的權限。
解決方法
新增儲存貯體政策,要求使用者將物件上傳至您的儲存貯體時,加上 bucket-owner-full-control 存取控制清單 (ACL)。
例如,此儲存貯體政策會指定 ExampleUser 必須將物件的 ACL 設為 bucket-owner-full-control,才能上傳物件到 DOC-EXAMPLE-BUCKET:
{
"Id": "Policy1541018284691",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1541018283275",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
},
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/ExampleUser"
]
}
}
]
}
您新增此儲存貯體政策後,使用者上傳要求中包含必要的 ACL,如以下範例所示:
aws s3 cp example.jpg s3://DOC-EXAMPLE-BUCKET --acl bucket-owner-full-control
如果使用者無法符合上傳請求中的 ACL 要求,則會收到下列錯誤訊息:
「呼叫 PutObject 作業時發生錯誤 (AccessDenied): 存取遭拒」
對於其他帳戶擁有的儲存貯體中的物件,物件所有者可以執行 put-object-acl 命令,以授予您物件的控制權限:
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key example.jpg --acl bucket-owner-full-control
bucket-owner-full-control ACL 授予儲存貯體所有者其他帳戶上傳物件的完整存取權限。但是,單單此 ACL 不會授予物件的所有權。若要自動取得使用 bucket-owner-full-control ACL 上傳的物件之所有權,請將 S3 物件所有權設為偏好的儲存貯體所有者。更新 S3 物件所有權後,儲存貯體所有者會自動擁有使用 bucket-owner-full-control 上傳的任何新物件。
相關資訊
為什麼我無法存取其他 AWS 帳戶上傳至 Amazon S3 儲存貯體的物件?
使用容器式 ACL 管理儲存貯體
IAM 教學課程: 使用 IAM 角色將存取權限委派給不同 AWS 帳戶
ACL 權限與存取政策權限的對應