AppSpec 「權限」區段 (僅適用於 EC2 /內部部署) - AWS CodeDeploy

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AppSpec 「權限」區段 (僅適用於 EC2 /內部部署)

'permissions' 區段指定在將 'files' 區段中的檔案和目錄/資料夾複製至執行個體之後,應如何將特殊許可 (如果有的話) 套用至檔案以及目錄/資料夾。您可以指定多個 object 說明。此區段為選用。它僅適用於 Amazon Linux、Ubuntu 伺服器和 RHEL 執行個體。

注意

'permissions'區段僅適用於 EC2 /內部部署。它不用於 AWS Lambda 或 Amazon ECS 部署。

本區段的結構如下:

permissions: - object: object-specification pattern: pattern-specification except: exception-specification owner: owner-account-name group: group-name mode: mode-specification acls: - acls-specification context: user: user-specification type: type-specification range: range-specification type: - object-type

說明如下:

  • object - 必要。將檔案系統物件複製至執行個體之後,將套用指定之許可的一組檔案系統物件 (檔案或目錄/資料夾)。

    以字串指定 object

  • pattern - 選用。指定要套用許可的模式。如果未指定或已指定特殊字元 "**",會根據 type 將許可套用至所有相符的檔案或目錄。

    使用含引數 ("") 的字串指定 pattern

  • except - 選用。指定 pattern 例外狀況的任何檔案或目錄。

    以方括號內逗號分隔的字串清單,指定 except

  • owner - 選用。object 的擁有者名稱。如果未指定,在複製操作之後,所有套用至原始檔案或目錄/資料夾結構的現有擁有者都不會受到影響。

    以字串指定 owner

  • group - 選用。object 的群組名稱。如果未指定,在複製操作之後,所有套用至原始檔案或目錄/資料夾結構的現有群組都不會受到影響。

    以字串指定 group

  • mode - 選用。指定要套用之權限的數值object。該模式設置遵循 Linux chmod 命令語法。

    重要

    如果該值包括前導零,則必須用雙引號括住它,或者刪除前導零,以便僅保留三位數。

    注意

    mode設定不支援符號表示法 (例如)。u+x

    範例:

    • mode: "0644"授予物件擁有者的讀取和寫入權限 (6)、群組的唯讀權限 (4),以及所有其他使用者的唯讀權限 (4)。

    • mode: 644授予與相同的權限mode: "0644"

    • mode: 4755設置 setuid 屬性(4),賦予所有者完全控制權限(7),授予該組的讀取和執行權限(5),並授予所有其他用戶讀取和執行權限(5)。

      如需更多範例,請參閱 Linux chmod 指令文件。

      如果未指定 mode,則在複製操作之後,套用至原始檔案或資料夾結構的所有現有模式都會保持不變。

  • acls - 選用。字元字串清單,代表套用至 object 的一或多個存取控制清單 (ACL) 項目。例如,u:bob:rw 代表 bob 使用者的讀取和寫入許可 (如需範例,請參閱 Linux setfacl 命令文件中的 ACL 項目格式範例)。您可以指定多個 ACL 項目。如果未指定 acls,在複製操作之後,任何套用至原始檔案或目錄/資料夾結構的現有 ACL 都不會受到影響。這些會取代現有的所有 ACL。

    使用依序後接一個空格和一個字串的破折號 (-) 指定 acls (例如,- u:jane:rw)。如果您有多個 ACL,會在個別的行指定。

    注意

    設定未命名的使用者、未命名群組或其他類似 ACL 項目會導致 AppSpec 檔案失敗。使用 mode 指定這些類型的許可。

  • context - 選用。對於 Security-Enhanced Linux (SELinux) 啟動的執行個體,是套用到複製物件的安全相關內容標籤清單。標籤指定為包含 usertyperange 的索引鍵。(如需詳細資訊,請參閱 SELinux 文件)。每個金鑰都是以字串形式輸入。如果未指定,則在複製作業之後,任何套用至原始檔案或目錄/資料夾結構的現有標籤都不受影響。

    • user - 選用。SELinux 使用者。

    • type - 選用。SELinux 類型名稱。

    • range - 選用。SELinux 範圍的指標。這不會有任何影響,除非機器上有啟用 Multi-Level Security (MLS) 和 Multi-Category Security (MCS)。如果未啟用,range 預設為 s0

    以字串指定 context (例如,user: unconfined_u)。每個 context 指定於不同行。

  • type - 選用。要套用指定權限的物件類型。type 是字串,可設定為 filedirectory。如果指定 file,許可只會套用到立即包含在複製操作後的 object (而非 object 本身) 中的檔案。如果指定 directory,使用權限會以遞迴方式套用到位於複製操作後 object (但不是 object 本身) 中任何地方的所有目錄/資料夾。

    以破折號 (-) 後接一個空格和一個字串的形式指定 type (例如,- file)。

「權限」部分示例

以下範例顯示如何使用 objectpatternexceptownermodetype 說明指定 'permissions' 區段。此範例僅適用於 Amazon Linux、Ubuntu 伺服器和 RHEL 執行個體。在這個範例中,假設以下檔案和資料夾都複製到下列階層中的執行個體:

/tmp `-- my-app |-- my-file-1.txt |-- my-file-2.txt |-- my-file-3.txt |-- my-folder-1 | |-- my-file-4.txt | |-- my-file-5.txt | `-- my-file-6.txt `-- my-folder-2 |-- my-file-7.txt |-- my-file-8.txt |-- my-file-9.txt `-- my-folder-3

下列 AppSpec 檔案示範如何在複製這些檔案和資料夾之後設定權限:

version: 0.0 os: linux # Copy over all of the folders and files with the permissions they # were originally assigned. files: - source: ./my-file-1.txt destination: /tmp/my-app - source: ./my-file-2.txt destination: /tmp/my-app - source: ./my-file-3.txt destination: /tmp/my-app - source: ./my-folder-1 destination: /tmp/my-app/my-folder-1 - source: ./my-folder-2 destination: /tmp/my-app/my-folder-2 # 1) For all of the files in the /tmp/my-app folder ending in -3.txt # (for example, just my-file-3.txt), owner = adm, group = wheel, and # mode = 464 (-r--rw-r--). permissions: - object: /tmp/my-app pattern: "*-3.txt" owner: adm group: wheel mode: 464 type: - file # 2) For all of the files ending in .txt in the /tmp/my-app # folder, but not for the file my-file-3.txt (for example, # just my-file-1.txt and my-file-2.txt), # owner = ec2-user and mode = 444 (-r--r--r--). - object: /tmp/my-app pattern: "*.txt" except: [my-file-3.txt] owner: ec2-user mode: 444 type: - file # 3) For all the files in the /tmp/my-app/my-folder-1 folder except # for my-file-4.txt and my-file-5.txt, (for example, # just my-file-6.txt), owner = operator and mode = 646 (-rw-r--rw-). - object: /tmp/my-app/my-folder-1 pattern: "**" except: [my-file-4.txt, my-file-5.txt] owner: operator mode: 646 type: - file # 4) For all of the files that are immediately under # the /tmp/my-app/my-folder-2 folder except for my-file-8.txt, # (for example, just my-file-7.txt and # my-file-9.txt), owner = ec2-user and mode = 777 (-rwxrwxrwx). - object: /tmp/my-app/my-folder-2 pattern: "**" except: [my-file-8.txt] owner: ec2-user mode: 777 type: - file # 5) For all folders at any level under /tmp/my-app that contain # the name my-folder but not # /tmp/my-app/my-folder-2/my-folder-3 (for example, just # /tmp/my-app/my-folder-1 and /tmp/my-app/my-folder-2), # owner = ec2-user and mode = 555 (dr-xr-xr-x). - object: /tmp/my-app pattern: "*my-folder*" except: [tmp/my-app/my-folder-2/my-folder-3] owner: ec2-user mode: 555 type: - directory # 6) For the folder /tmp/my-app/my-folder-2/my-folder-3, # group = wheel and mode = 564 (dr-xrw-r--). - object: /tmp/my-app/my-folder-2/my-folder-3 group: wheel mode: 564 type: - directory

產生的許可,如下所示:

-r--r--r-- ec2-user root my-file-1.txt -r--r--r-- ec2-user root my-file-2.txt -r--rw-r-- adm wheel my-file-3.txt dr-xr-xr-x ec2-user root my-folder-1 -rw-r--r-- root root my-file-4.txt -rw-r--r-- root root my-file-5.txt -rw-r--rw- operator root my-file-6.txt dr-xr-xr-x ec2-user root my-folder-2 -rwxrwxrwx ec2-user root my-file-7.txt -rw-r--r-- root root my-file-8.txt -rwxrwxrwx ec2-user root my-file-9.txt dr-xrw-r-- root wheel my-folder-3

以下範例說明如何指定 'permissions' 區段,並新增 aclscontext 說明。此範例僅適用於 Amazon Linux、Ubuntu 伺服器和 RHEL 執行個體。

permissions: - object: /var/www/html/WordPress pattern: "**" except: [/var/www/html/WordPress/ReadMe.txt] owner: bob group: writers mode: 644 acls: - u:mary:rw - u:sam:rw - m::rw context: user: unconfined_u type: httpd_sys_content_t range: s0 type: - file