ECS:非擁有者物件使用者的唯讀容器 ACL 無法下載上傳的物件
摘要: 本知識庫從 S3 瀏覽器中的唯讀角度解釋了非擁有者物件使用者的存儲桶存取控制清單 (ACL) 的概念。
症狀
非擁有者物件使用者已使用貯體 ACL 以唯讀方式新增至貯體。
非儲存桶擁有者、物件使用者無法下載在建立儲存桶 ACL 之前由物件儲存桶擁有者使用者上傳的物件。
問題流程如下:
- 在建立容器時,已指派使用者物件擁有者。
- 部分檔案是由物件擁有者使用者上傳到儲存器。
- 非擁有者物件使用者已使用貯體 ACL 以唯讀方式新增至貯體。
- 嘗試存取容器時,非擁有者物件使用者可以列出和下載新上傳的物件,但無法下載在唯讀存儲桶 ACL 之前上傳的物件。我們可以看到,根據 ECS UI 中的組態,並未在 S3 瀏覽器上設定物件的使用者權限。
當非擁有者物件使用者使用 S3 瀏覽器按下物件時的錯誤如下:(存取遭拒:存取遭拒):
以下是物件擁有者使用者 (a_s3user) 和非擁有者物件使用者 (a_s3test) 的儲存桶 ACL 設定:
原因
可在儲存桶或物件級別設置 S3 許可權。ECS 遵循與 AWS S3 相同的原則,視套用的原則類型而定。它確定在存儲桶級別或物件級別允許的操作類型。
- 在 ECS 容器層級授予讀取和讀取 ACL 時,非儲存桶擁有者只能列出儲存桶中的物件,非儲存桶擁有者無法從儲存桶下載資料
- 將物件寫入存儲桶時,只有寫入該對象的使用者具有讀取許可權。為了讓其他使用者讀取物件,擁有者必須向使用者顯式授予許可權。
- 若要向非儲存桶擁有者授予權限,我們必須使用 S3 儲存桶原則
下表提供了可以分配的 ACL 許可權。適用的許可權取決於存儲桶的類型。
| 前交叉韌帶 | 權限 | ||
|---|---|---|---|
| 讀取 | 可讓使用者列出儲存器中的物件 | ||
| 讀取 ACL | 可讓使用者讀取容器 ACL | ||
| 寫入 | 可讓使用者建立或更新容器中的任何物件 | ||
| 寫入 ACL。 | 可讓使用者寫入儲存器的 ACL | ||
| 執行 | 以檔案系統身份存取時設定執行權限 - 使用 ECS 物件通訊協定存取物件時,此權限無效。 | ||
| 完全控制 | 可讓使用者讀取、寫入、讀取 ACL 和寫入 ACL。
|
||
| 授權寫入 | 允許使用者在使用者沒有正常寫入權限時對儲存桶或物件執行寫入 - CAS 儲存桶是必需的 | ||
| 刪除 | 可讓使用者刪除容器和物件 - CAS 儲存器的必要項目 | ||
| 無 | 使用者對容器沒有權限。 |
AWS 支援 多種策略類型。
下表列出了 Amazon S3 在 ACL 中支援的許可權集。物件 ACL 和儲存桶 ACL 的 ACL 許可權集相同。但是,根據上下文(存儲桶 ACL 或物件 ACL),這些 ACL 許可權授予特定存儲桶或物件操作的許可權。該表列出了許可權,並描述了它們在物件和存儲桶上下文中的含義。
| 權限 | 在儲存桶上授予時 | 在物件上授予時 |
|---|---|---|
READ |
允許被授權者列出儲存桶中的物件 | 允許被授權者讀取物件資料及其中繼資料 |
WRITE |
允許被授權者建立、覆寫和刪除儲存桶中的任何物件 | 不適用 |
READ_ACP |
允許受授權者讀取貯體 ACL | 允許被授權者讀取物件 ACL |
WRITE_ACP |
允許被授權者為適用的儲存桶寫入 ACL | 允許被授權者為適用物件寫入 ACL |
FULL_CONTROL |
允許被授予者對存儲桶的讀取、寫入、READ_ACP和WRITE_ACP權限 | 允許被授權者對物件的讀取、READ_ACP和WRITE_ACP權限 |
Amazon S3 說明文件
下表顯示了每個 ACL 許可權如何映射到相應的訪問策略許可權。如您所見,訪問策略允許的許可權比 ACL 多。使用 ACL 主要授予基本的讀/寫許可權,類似於文件系統許可權。有關何時使用 ACL 的詳細資訊,請參閱使用可用訪問策略選項的準則。
| ACL 權限 | 在儲存桶上授予 ACL 權限時對應的存取原則權限 | 對物件授予 ACL 權限時對應的存取原則權限 |
|---|---|---|
READ |
s3:ListBucket, s3:ListBucketVersions和 s3:ListBucketMultipartUploads |
s3:GetObject, s3:GetObjectVersion和 s3:GetObjectTorrent |
WRITE |
此外,當被授權者是存儲桶擁有者時,授予 |
不適用 |
READ_ACP |
s3:GetBucketAcl |
s3:GetObjectAcl 和 s3:GetObjectVersionAcl |
WRITE_ACP |
s3:PutBucketAcl |
s3:PutObjectAcl 和 s3:PutObjectVersionAcl |
FULL_CONTROL |
等同於授予 READ, WRITE, READ_ACP和 WRITE_ACP ACL 許可權 - 因此,此 ACL 許可權映射到相應訪問策略許可權的組合。 |
等同於授予 READ, READ_ACP和 WRITE_ACP ACL 權限。因此,此 ACL 許可權映射到相應訪問策略許可權的組合。 |
解析度
選項 1:
請參閱 ECS 資料存取指南,瞭解如何使用容器原則。與允許所有操作或不允許任何操作的 ACL 不同,訪問策略為特定使用者或所有使用者提供特定操作的條件和粒度許可權。策略條件可用於為與條件匹配的一系列物件分配許可權。這可用於自動為新上傳的物件分配許可權。
參考 AWS S3:
https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html
https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html
https://docs.aws.amazon.com/AmazonS3/latest/API/API_Operations.html在 UI-Manage-Bucket-Edit>>> 容器原則中,在原則編輯器中輸入類似以下內容的內容:
{
"Version": "2012-10-17",
"Id": "Policy1593674317613",
"Statement": [
{
"Action": [
"s3:GetObject"
],
"Resource": "bucket_name/*",
"Effect": "Allow",
"Principal": "read-only_user",
"Sid": "Stmt1593673962638"
}
]
} 其中 動作:「S3:GetObject」是允許下載物件的動作。
其中效果:「允許」
其中資源「:「bucket_name/*」是儲存器名稱。
其中 校長“:「read-only_useR」為非儲存桶擁有者使用者
選項 2:
與物件擁有者一起使用 S3 瀏覽器,為在唯讀儲存桶 ACL 之前上傳的物件更改經過身份驗證的用戶的許可權,以確保非擁有者物件使用者可以下載物件:
其他資訊
如果您透過物件擁有者上傳物件時發生問題,且權限未套用至具有寫入存取權的已驗證使用者,請檢閱知識文章520711