本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
根據預設,在建立檔案系統之後,只有根使用者 (UID 0) 具備讀取、寫入和執行的權限。若要讓其他使用者能夠修改檔案系統,根使用者必須明確地授予存取權給這些使用者。您可以使用存取點來自動建立非根使用者可寫入的目錄。如需詳細資訊,請參閱使用 Amazon EFS 存取點。
Amazon EFS 檔案系統物件具有相關的 Unix 風格模式。此模式值定義了對該物件執行動作的許可。若是熟悉 Unix 風格系統的使用者,就能輕易地了解 Amazon EFS 對這些許可的相關動作。
此外,在 Unix 風格的系統上,會將使用者和群組對應到數字識別符,Amazon EFS 會利用這些識別符來表示檔案所有權。對於 Amazon EFS,檔案系統物件 (即檔案、目錄等) 由單個擁有者和單一群組擁有。當使用者嘗試存取檔案系統物件時,Amazon EFS 會利用這些對應的數字 ID 來檢查權限。
注意
NFS 通訊協定為每個使用者最多支援 16 個群組 ID (GID),超出的任何 GID 都會從 NFS 用戶端請求処截斷。如需詳細資訊,請參閱拒絕在 NFS 檔案系統上存取允許的檔案。
您可以在下面找到許可範例以及 Amazon EFS 的 NFS 許可考量相關討論。
Amazon EFS 檔案系統使用案例與權限的範例
在建立 Amazon EFS 檔案系統,並掛載 VPC 中檔案系統的目標之後,您就可以將遠端的檔案系統,掛載於本機的 Amazon EC2 執行個體上。mount
指令可以掛載檔案系統中的任何目錄。不過,當您首次建立檔案系統時,只會有一個位於 /
的根目錄。根使用者和根群組擁有掛載的目錄。
下列 mount
命令會將 Amazon EFS 檔案系統的根目錄 (以檔案系統的 DNS 名稱辨識),掛載於 /efs-mount-point
本機目錄。
sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport
file-system-id
.efs.aws-region.amazonaws.com:/ efs-mount-point
最初的權限模式允許:
-
對擁有者
read-write-execute
根的 權限 -
對群組
read-execute
根的 權限 -
對其他項目的
read-execute
權限
只有根使用者能修改此目錄。根使用者還能授予其他使用者寫入此目錄的許可,例如:
-
建立可寫入的每個使用者子目錄。如需逐步說明,請參閱 教學課程:建立可寫入的每個使用者子目錄。
-
允許使用者寫入 Amazon EFS 檔案系統根。具備根權限的使用者,可以授予其他使用者對檔案系統的存取權限。
-
若要將 Amazon EFS 檔案系統的所有者變更為非根使用者和群組,請使用下列程式碼:
$ sudo chown
user
:group
/EFSroot
-
若要讓檔案系統的權限變得更加寬鬆,請使用下列程式碼:
$ sudo chmod 777 /
EFSroot
這個指令會針對掛載了該檔案系統的所有 EC2 執行個體,授予其所有使用者讀取/寫入/執行的權限。
-
檔案系統中檔案和目錄的使用者和群組 ID 許可
Amazon EFS 檔案系統中的檔案和目錄可支援標準根據使用者 ID 和群組 ID 的 Unix 式讀取、寫入和執行許可。當 NFS 用戶端在不使用存取點的情況下掛載 EFS 檔案系統時,則用戶端提供的使用者 ID 和群組 ID 會受到信任。您可以使用 EFS 存取點來覆寫 NFS 用戶端所使用的使用者 ID 和群組 ID。當使用者嘗試存取檔案和目錄時,Amazon EFS 會檢查其使用者 ID 和群組 ID,來驗證每個使用者是否具有存取這些物件的權限。針對使用者所建立的新檔案和目錄,Amazon EFS 也會使用這些 ID 做為這些項目的擁有者和群組擁有者。Amazon EFS 不會檢查使用者或群組的名稱,而只使用數字識別符。
注意
當您在 EC2 執行個體上建立使用者時,可以將任意的數字使用者 ID (UID) 和群組 ID (GID) 指派給使用者。數字使用者 ID 會在 Linux 系統上的 /etc/passwd
檔案中設定。數字群組 ID 會在 /etc/group
檔案中設定。這些檔案定義了名稱與 ID 之間的對應關係。在 EC2 執行個體外部,Amazon EFS 不會對這些 ID 進行任何身分驗證 (包括 0 的根 ID)。
如果使用者從兩個不同的 EC2 執行個體來存取 Amazon EFS 檔案系統,則取決於這些執行個體上使用者的 UID 是否相同,可能會產生如下的不同結果:
-
如果這兩個 EC2 執行個體上的使用者 ID 皆相同,則無論其所用的 EC2 執行個體為何,Amazon EFS 都會將這些 ID 視為代表同一個使用者。從這兩個 EC2 執行個體存取檔案系統時,使用者的使用體驗是相同的。
-
如果兩個 EC2 執行個體上的使用者 ID 不同,則 Amazon EFS 會將這些使用者視為不同的使用者。從這兩個不同的 EC2 執行個體存取 Amazon EFS 檔案系統時,使用者體驗不同。
-
如果不同 EC2 執行個體上的兩個不同使用者共用一個 ID,Amazon EFS 會將這兩者視為同一個使用者。
您可以考慮用一致的方式,來管理各個 EC2 執行個體的使用者 ID 對應。使用者可以使用 id
指令來查看自己的數字 ID。
$ id uid=502(joe) gid=502(joe) groups=502(joe)
關閉 ID 映射器
在作業系統中的 NFS 公用程式,包含了稱為 ID Mapper (ID 映射器) 的背景行程,可用來管理使用者名稱與 ID 之間的對應。在 Amazon Linux 中,背景行程稱為 rpc.idmapd
;在 Ubuntu 上,背景行程稱為 idmapd
。此背景行程會將使用者和群組的 ID 轉譯為名稱,反之亦然。不過,Amazon EFS 只會處理數字 ID。我們建議您在 EC2 執行個體上關閉此程序。在 Amazon Linux 上,ID 映射器通常是停用的,如果已停用,請勿將其啟用。若要關閉 ID 映射器,請使用如下所示的命令。
$ service rpcidmapd status
$ sudo service rpcidmapd stop
不要進行根權限壓縮
依預設,EFS 檔案系統上會停用根權限壓縮。使用 no_root_squash
時,Amazon EFS 就會如同 Linux NFS 伺服器一般運作。如果使用者或群組的 ID 為 0,Amazon EFS 會將該使用者視為 root
根使用者,並略過權限檢查 (允許存取和修改所有的檔案系統物件)。當 AWS Identity and Access Management (AWS IAM) 身分或資源政策不允許存取 ClientRootAccess
動作時,可以在用戶端連線上啟用根分片。啟用根權限壓縮時,會將根使用者轉換為在 NFS 伺服器上具備有限權限的使用者。
如需詳細資訊,請參閱使用 IAM 控制檔案系統資料存取。
使用 NFS 用戶端的 IAM 授權啟用根佇列
您可以設定 Amazon EFS,以防止除了單一管理工作站以外的所有 AWS 主體對 Amazon EFS 檔案系統進行根存取。若要執行此作業,請針對網路檔案系統 (NFS) 用戶端設定 AWS Identity and Access Management (IAM) 授權。
要做到這一點,需要配置兩個 IAM 許可政策,如下所示:
-
建立 EFS 檔案系統政策,此政策會明確允許檔案系統的讀取和寫入存取權,並隱含拒絕根存取權。
-
使用 Amazon EC2 執行個體設定檔,將 IAM 身分指派給需要檔案系統之根存取權的 Amazon EC2 管理工作站。如需關於 Amazon EC2 執行個體設定檔的詳細資訊,請參閱《AWS Identity and Access Management 使用者指南》中的使用執行個體設定檔。
-
將
AmazonElasticFileSystemClientFullAccess
AWS 受管政策指派給管理工作站的 IAM 角色。如需 EFS AWS 受管政策的詳細資訊,請參閱 Amazon EFS 的身分和存取管理。
若要針對 NFS 用戶端使用 IAM 授權來啟用根權限壓縮,請使用下列程序。
阻止檔案系統的根存取
前往 https://console.aws.amazon.com/efs/
開啟 Amazon Elastic File System 主控台。 選擇檔案系統。
選擇您要啟用根佇列的檔案系統。
-
在檔案系統詳細咨詢頁面上,選擇檔案系統政策,然後選擇編輯。File system policy (檔案系統政策) 頁面隨即顯示。
-
選擇政策選項下的預設*防止根存取。政策 JSON 物件會顯示在政策編輯器中。
選擇 Save (儲存) 以儲存檔案系統政策。
非匿名用戶端可以透過以身分為基礎的政策取得檔案系統的根存取權。當您將 AmazonElasticFileSystemClientFullAccess
受管理的政策附加至工作站的角色時,IAM 會根據其身分政策授與工作站的根存取權。
透過管理工作站啟用根存取權
開啟位於 https://console.aws.amazon.com/iam/
的 IAM 主控台。 建立名爲
EFS-client-root-access
的 Amazon EC2 角色。IAM 會建立與您建立之 EC2 角色相同名稱的執行個體設定檔。將 AWS 受
AmazonElasticFileSystemClientFullAccess
管政策指派給您建立的 EC2 角色。本政策的內容如下所示。{ "Version”: "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticfilesystem:ClientMount", "elasticfilesystem:ClientRootAccess", "elasticfilesystem:ClientWrite", "elasticfilesystem:DescribeMountTargets" ], "Resource": "*" } ] }
將執行個體描述檔連接至您用來做為管理工作站的 EC2 執行個體,如下所述。如需詳細資訊,請參閱《Amazon EC2 Linux 執行個體使用者指南》中的將 IAM 角色連接至執行個體。
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 在導覽窗格中,選擇 Instances (執行個體)。
選擇執行個體。針對 Actions (動作),選擇 Instance Settings (執行個體設定),然後選擇 Attach/Replace IAM role (連接/取代 IAM 角色)。
選擇您在第一個步驟中建立的 IAM 角色
EFS-client-root-access
,然後選擇 Apply (套用)。
在管理工作站上安裝 EFS 掛載協助程式。如需 EFS 掛載協助程式和 amazon-efs-utils 套件的詳細資訊,請參閱安裝 Amazon EFS 用戶端。
透過使用下列命令搭配
iam
掛載選項,在管理工作站上掛載 EFS 檔案系統。$
sudo mount -t efs -o tls,iamfile-system-id
:/efs-mount-point
您可以將 Amazon EC2 執行個體設定為透過 IAM 授權自動掛載檔案系統。如需如何透過 IAM 授權掛載 EFS 檔案系統的詳細資訊,請參閱 使用 IAM 授權掛載。
權限快取
Amazon EFS 會在一小段時間內建立檔案權限的快取。因此,使用者存取權最近已被撤銷,但可能會有一段短暫的時間,使用者仍可存取該物件。
變更檔案系統物件的所有權
Amazon EFS 會強制執行 POSIX chown_restricted
屬性。這表示只有根使用者可以變更檔案系統物件的擁有者。根使用者或擁有者使用者可以變更檔案系統物件的擁有者群組。不過,但除非使用者為根使用者,否則只能將群組變更為擁有者使用者所屬的群組。
EFS 存取點
「存取點」會使用存取點,將作業系統使用者、群組和檔案系統路徑套用至請求提出的任何檔案系統。存取點的作業系統使用者和群組會覆寫 NFS 用戶端提供的任何身分資訊。檔案系統路徑會公開給用戶端作為存取點的根目錄。此方法可確保每個應用程式在存取共用檔案型資料集時,一律使用正確的作業系統身分和正確的目錄。使用存取點的應用程式只能在其專屬目錄及子目錄中存取資料。如需存取點的詳細資訊,請參閱 使用 Amazon EFS 存取點。