我一直在尝试使用.ebextensions container_commands将IIS APPPOOL \ DefaultAppPool用户写入wwwroot文件夹下的两个文件夹 .

我需要涵盖两种情况:

  • 能够在发布到新的EBS环境时授予DefaultAppPool用户写入权限,其中运行.ebextensions时,wwwroot文件夹 does not 包含我的解决方案 .

  • 能够重新发布到现有的EBS环境,并在.ebextensions运行时保持DefaultAppPool写入权限,其中wwwroot文件夹 does 包含我的解决方案 .

我能够执行后者而不是前者 . 前者失败是因为我在wwwroot下指定了文件夹的路径,我想要更改哪些权限,但解决方案尚未部署到wwwroot,导致出现错误消息:“系统找不到指定的文件 . ”

我尝试了另一种方法,我将DefaultAppPool写入权限授予整个wwwroot文件夹,希望在解压缩项目时,新添加的文件夹将继承wwwroot的权限 . 当我这样做,并将icacls命令的输出记录到文件时,我可以验证是否确实为wwwroot添加了写权限 . 尽管能够在.ebextensions运行时验证是否添加了写入权限,但它们在部署过程中稍后会以某种方式更改回其原始状态(仅读取),可能是:

c:\Program Files\Amazon\ElasticBeanstalk\Tools\Deploy.exe

这是我用来验证权限已更改的.config文件:

container_commands:
  00_dir:
    command: dir c:\inetpub\wwwroot >> c:\cfn\perms.log 2>&1
    waitAfterCompletion: 0
  01_what_perms:
    command: icacls.exe c:\\inetpub\\wwwroot >> c:\\cfn\\perms.log 2>&1
    waitAfterCompletion: 0 
  02_changeperm:
    command: icacls.exe c:\\inetpub\\wwwroot /grant "IIS AppPool\DefaultAppPool":(OI)(CI)W >> c:\\cfn\\perms.log 2>&1
    waitAfterCompletion: 0
  03_what_perms:
    command: icacls.exe c:\\inetpub\\wwwroot >> c:\\cfn\\perms.log 2>&1
    waitAfterCompletion: 0
  04_dir:
    command: dir c:\inetpub\wwwroot >> c:\cfn\perms.log 2>&1
    waitAfterCompletion: 0

因此我问:

  • 有没有办法授予DefaultAppPool用户对这两个文件夹的写权限,这两个文件夹在发布到新的EBS环境和重新发布到现有的EBS环境时都有效?

  • 有没有办法在将应用程序部署到wwwroot之后运行命令,但是在container_commands之前没有?

  • 当我查看.ebextensions .config文件中的日志时,我发现它们运行了两次,这是正常的吗?