Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[+Windows GuestOS] #805

Closed
powerkimhub opened this issue Oct 24, 2022 · 28 comments
Closed

[+Windows GuestOS] #805

powerkimhub opened this issue Oct 24, 2022 · 28 comments
Assignees

Comments

@powerkimhub
Copy link
Member

powerkimhub commented Oct 24, 2022

@inno-cloudbarista @MZC-CSC @innodreamer => @seokho-son @jihoon-seo => @inno-cloudbarista => @MZC-CSC

=============

  • CB-Spider/Driver 참고 사항

    • 기본 계정 Administrator 활용
      • cb-user 추가 작업 불필요
    • ssh daemon waiting 불필요 등
    • 검증 시험: 대상 VM에 Windows Desktop 접속 확인
      • 시험 환경(Region/Image/Spec) 정보 입력 부탁 드립니다.
  • CB-Tumblebug 참고 사항

    • Agent 설치 불필요
  • CB-Dragonfly 참고 사항

    • Agent 수동 설치
    • 수집 메트릭 제약 등
    • 검증 시험: 제공하는 메트릭 정보 수집 및 제공 여부 확인
  • CB-WebTool 참고 사항

    • 제공 메트릭 그래프 반영 등
    • 검증 시험: WebTool 통한 메트릭 정보 확인
@inno-cloudbarista
Copy link
Contributor

@powerkimhub
[Azure] WindowOS 이슈
이슈 1.

  • admin 사용자 이름 제한에 administrator이 제한됨 (https://learn.microsoft.com/en-us/rest/api/compute/virtual-machines/create-or-update?tabs=HTTP#osprofile)
    • 이름 제한 목록 [ "administrator", "admin", "user", "user1", "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql", "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5"]
  • Password 규칙 대문자, 소문자, 숫자 포함 12 ~ 123 (위 경로엔 8 ~ 123이나, console에선 12~123, api 확인 필요)

이슈 2.

  • WindowsServer:2012-R2의 이미지가 Standard 버전이 존재하지 않고, Datacenter만 존재

@powerkimhub
Copy link
Member Author

@inno-cloudbarista

[Azure 관련]

[이슈-1]

  • 추가 계정 생성 없이 Administrator에 API를 통해서 password만 사용자 입력 값으로 설정해서 사용 가능한지 확인 부탁 드립니다.
    • password 설정이 불가능하다면, VM 생성 후 API를 통해서 Administrator의 password를 얻을 수 있는 지 확인 부탁 드립니다.
    • 불가하면, 그때 다시 협의 부탁드립니다.

[이슈-2]

  • 일단, 2012-R2 DataCenter 버전으로 진행해주시기 바랍니다.
  • 참고로,
    • 얼마 전에 MicrosoftWindowsServer:WindowsServer:2019-datacenter-gensecond:latest 생성 후 Administrator 계정으로 원격데스크탑 연결 해본 적이 있습니다.
    • 비밀번호는 기억은 잘 안나지만 아마도, 웹 콘솔에서 얻어서 해봤을 것 같습니다.

@inno-cloudbarista
Copy link
Contributor

@powerkimhub
api 수정하여 위 케이스에 대해 대처 가능한지 확인해보겠습니다!

@powerkimhub
Copy link
Member Author

@inno-cloudbarista

  • 캄사합니다.

@inno-cloudbarista
Copy link
Contributor

inno-cloudbarista commented Oct 25, 2022

@powerkimhub
[Azure] Window user 이슈 및 대안책

  1. Username의 제한점 및 대안
  • Azure의 Window의 userName의 제한 설정으로 생성시, userName에 'administrator'를 입력하지 못하는 이슈

    • UI 하단의 사진과 같이, 'Administrator'의 값이 입력되지 않습니다. (API 확인 결과, 동일한 현상, 2019,2012 등 생성 테스트 )

    • 기본적인 administrator 사용자가 생성된것인지 확인해보았으나, administrator 유저는 생성되지 않았습니다.(이미지별로 미리 생성되어 있는 유저 다르긴 했습니다.)

    • 어떤 특수한 옵션이 활성화 된것인지, 혹시 오타에 의한 통과가 아닐까 생각하고 있습니다. (ex: adminstrator)
      image

      [API]
      {
        "error": {
          "code": "InvalidParameter",
          "message": "The Admin Username specified is not allowed.",
          "target": "adminUsername"
        }
      }
      
  • 대안으로 Azure VM 생성후, 'administrator' user를 생성하는 것으로 생각하고 있습니다.

    • Azure의 기능중, RunPowerShellScript 기능을 활용하여, 'administrator'라는 이름의 user를 생성후, administrators 그룹에 추가, 기존 VM 생성시 임시 유저 삭제하는 식으로 기능 제공을 생각하고 있습니다.(API로 생성 및 유저 변경 테스트, 원격 데스크탑 연결 성공)
  1. VMInfo내 VMUserPasswd 값의 처리
  • SSH키 생성시와 같이 생성후 password 반환, 조회시 password 미반환으로 처리하면 될까요?

@powerkimhub
Copy link
Member Author

@inno-cloudbarista

  • 상세한 현황 캄사드립니다.

[Administrator 계정 관련]

  • Azure의 경우 제가 Test 계정을 생성 후 해봤나 봅니다.
    • AWS의 경우에는 Administrator 가 기본 계정으로 내장되어 있어서 이와 혼돈된 거 같습니다.
  • 제안 주신 방법이 유일한 방법인 거 같습니다.
  • 다음 순으로 시도해보시면 좋을 거 같습니다.
    • (1) VM 생성시: cb-user 계정 생성 => Rename(cb-user, Administrator) // TMI: 첫자는 대문자, 생성보다 rename이 빠를 듯
    • (2) (1)이 안되면: VM 생성시: cb-user 계정 생성 => Administrator 계정 추가 => cb-user 계정 삭제

[Administrator 비번 관련]

  • 일단, 올려주시기 바랍니다.
  • 필요하면, 서버단에서 스크린 처리 하겠습니다. (@powerkimhub : @todo)

@inno-cloudbarista
Copy link
Contributor

@powerkimhub
제안해주신 rename 방식으로 가능한지, 검토해보겠습니다!

VMInfo내 VMUserPasswd의 값을 조회시, 보여줄 수 있는지는 위의 user 지정후 확인후 말씀드리겠습니다.

@powerkimhub
Copy link
Member Author

@inno-cloudbarista

  • 넵, 캄사합니다.

@dev4unet
Copy link
Member

dev4unet commented Oct 26, 2022

@powerkimhub AWS의 경우 기존 Spider에서 Windows 생성 시 이슈 없이 EC2 인스턴스가 생성됩니다.
다만, Windows에 RDP로 접속하기 위해 자동 생성된 Administrator의 Password 를 확인하기 위해 AWS 웹 콘솔을 이용해야 합니다.
01

나중에 기능 추가를 위해 잠깐 API들을 살펴 봤는데 GetPasswordData의 스펙을 보면 --priv-launch-key 옵션을 이용해서 암호가 해독된 Password를 획득할 수 있습니다.
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/get-password-data.html
get-password-data --instance-id <value> [--dry-run | --no-dry-run] [--priv-launch-key <value>] [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>] [--debug] [--endpoint-url <value>] [--no-verify-ssl] [--no-paginate] [--output <value>] [--query <value>] [--profile <value>] [--region <value>] [--version <value>] [--color <value>] [--no-sign-request] [--ca-bundle <value>] [--cli-read-timeout <value>] [--cli-connect-timeout <value>] [--cli-binary-format <value>] [--no-cli-pager] [--cli-auto-prompt] [--no-cli-auto-prompt]

하지만 API에서는 DryRun 옵션과 InstanceId 옵션 뿐이 없네요^^
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/APIReference/API_GetPasswordData.html

일단 EC2 런치 시 사용한 SSH Key 없이 호출하면 암호화된 Password를 획득하기는 합니다.
(*ec2.GetPasswordDataOutput)(0xc0000aacd8)({ InstanceId: "i-0cea86282a9e2a569", PasswordData: "dUcHvPat4gC2fqLYlGbU7qKpcV8jfVEdSe6Ahav1FKLd697+TuS+P97NdXntw2ym1WSwOsHdtOtOnh+tfNnSTcx5C7VzRDXSK6RF5Ybnh0BQoCFi8lgnuYGQ+Anf/bCPdoCjVo0s+q+iIDDAg2Y/ze6/nqtOsKBzw2M/3p1AL3iwlfHxlqkj2JSqwnYyTE6QC9kcsrdWYFkUmFFzUVF9GIGlIsXdwIcUgcLVBbPJTcFL96QWODi8eX0J78kxe3wSXVsobmQ0JsiaOdxVBNsinInMal5RcKZCk7B3zmTacimqfpMxU9+iyUPmt4hnYu26r6RiQe7szxgL2X33DuOYHA==", Timestamp: 2022-10-26 06:13:05 +0000 UTC })

@inno-cloudbarista
Copy link
Contributor

@powerkimhub
[Azure] Administrator 이름 패스워드

  1. Azure의 Administrator Rename 이름 변경의 PowerShell 명령어의 경우,
    Rename-LocalUser, wmic 등 PowerShell 버전이 낮아 제공되지 않는것 같습니다...
    우선, 유저 생성하여 바꿔치는 로직으로 적용해놓으려고 합니다.

  2. userPassword
    Azure에서 해당 VM의 password를 알 수 있는 API가 나오지 않습니다..
    (API가 존재하더라도 1번의 이슈로 내부에서 생성된 사용자이기에 값이 나올지 모르겠습니다.)
    SSHKey에서 사용하듯, 내부 DB를 이용하는 방식으로 제공할수 있을것 같으나, 현재는 일단 생성시 리턴하는 방식으로 구현중에 있습니다.

@powerkimhub
Copy link
Member Author

@inno-cloudbarista

  • 넵, 현황 공유 캄사드립니다.

@powerkimhub
Copy link
Member Author

@powerkimhub
Copy link
Member Author

@dev4unet

  • 일단, PW decryption 관련 다음 링크 참고 해보시기 바랍니다.
  • 문제는 VM Key가 필요한데, 현재 Spider에서는 Key 생성시에만 반환하고 있습니다.
  • 일단, 관련 현황만 파악 해주시고 개발은 좀 기다려 주시기 바랍니다.
  • PW 획득 방법에 대해서는 좀더 고민을 해바야 겠습니다.

@powerkimhub
Copy link
Member Author

powerkimhub commented Nov 1, 2022

@dev4unet @inno-cloudbarista @MZC-CSC @innodreamer

  • 공유 해주신 CSP별 Windows 계정 현황 및 이슈를 토대로 CB-Spider 방안을 수립하였습니다.
  • 아래 내용을 확인 하시어 Driver별 적용 및 시험(RDP 연결) 부탁 드립니다.
  • 마무리 되는 CSP별로 아래 링크에 바로 현황 공유 부탁 드립니다.

[CB-Spider WindowsOS 계정 제공 방법 및 Driver 개발 가이드 참고]

[Driver 적용 개발 및 시험 현황 공유]

@powerkimhub
Copy link
Member Author

@inno-cloudbarista

  • 모든 Driver에서 개별 수행해야 할 수도 있는,

  • 또한 추후 판단 조건이 변경 될 수도 있어 일괄 적용이 필요할 수 있는,

  • 다음 2가지 사항을 서버에서 수행/검증 후 Driver에 내려 보낼 예정입니다.

    • (1) ImageID로부터 GuestOS의 Windows Type 여부 확인 및 설정(VMReqInfo.WindowsType bool)
    • (2) WindowsOS 경우 입력된 Administrator PW의 Windows PW적합성 검증
  • 관련하여, 이미 다음 코드 구현을 해주셨습니다.

  • 이를 서버 단으로 옮겨 활용하고자 합니다.

  • 그래도 괜찮을지 사전 문의 드립니다.

  • 그리고, 혹시, 별도의 출저가 있는 코드인 지요?

@inno-cloudbarista
Copy link
Contributor

@powerkimhub
해당 함수는 Azure의 Window password에 대한 조건입니다.
https://learn.microsoft.com/en-us/rest/api/compute/virtual-machines/create-or-update?tabs=HTTP#osprofile
위에서는 8글자 이상이라고 적혀있으나, 콘솔에서 12글자로 제한하고 있기에 글자수조건은 변경하였습니다.
위 문서와 콘솔 외 별도의 출처는 없습니다.

@powerkimhub
Copy link
Member Author

@inno-cloudbarista

  • 해당 함수를 서버 파트로 옮겨 가도 될까요?

@inno-cloudbarista
Copy link
Contributor

@powerkimhub
넵! 좋습니다!

@MZC-CSC
Copy link
Contributor

MZC-CSC commented Nov 4, 2022

(1) ImageID로부터 GuestOS의 Windows Type 여부 확인 및 설정(VMReqInfo.WindowsType bool)
: WindowsType 을
client에서 호출 할 때 parameter에 넣어서 보낸다는 뜻인지
아니면 ImageID 를 가지고 csp에 이미지 조회를 한 뒤 windows 유무를 설정해서 내려보낸다는 뜻인지요?

@powerkimhub
Copy link
Member Author

powerkimhub commented Nov 4, 2022

@MZC-CSC @inno-cloudbarista @innodreamer

[WindowsType 관련]

  • User가 사용하는 Spider User API는 전과 동일하고,
  • Spider Server에서 ImageId를 이용하여 WindowsType 여부를 판단 및 VMReqInfo.WindowsType에 설정
  • Driver에서는 WindowsType 확인하여 처리

[Administrator Passwd 검증 관련]

  • Spider Server에서 검증하여 Windows OS에 부적합한 경우 에러 처리
  • Driver에서는 검증 없이 처리

[MyImage 경우]

  • WindowsOS Snapshot 결과인 MyImage-based VM 생성 요청일 경우
  • Administrator/PW가 이미 포함되어 있을 것으로 예상됩니다.
  • 사용자가 PW 설정 요청이 없으면, 그냥 pass
  • 사용자가 신규 PW 설정 요청하면, 변경
    • PW 설정 API 제공 CSP: 해당 API 활용
    • PW 설정 API 제공 안하는 CSP: User data(Custom Data) 활용
      • 대략 이런식: $ net user administrator {new-PW}
  • 정말 그런지는 검증 시험이 필요합니다.
    • 이 부분은 행사 후 진행

[서버 현황]

  • 아직 반영 전입니다.
  • 아마도, 오늘 반영 가능할 거 같습니다.

@powerkimhub
Copy link
Member Author

@MZC-CSC @inno-cloudbarista @innodreamer

  • 그런데,
  • ImageType 확인의 경우 Driver별로 이미 구현이 되신 것 같습니다.
  • 위에서와 같이 서버에서 일괄 적용할지
  • Slack으로 추가 문의 후 확정하도록 하겠습니다.

@inno-cloudbarista
Copy link
Contributor

@powerkimhub
Openstack Window 이미지 만들기 가이드입니다.(markdown 원본이 필요하실 경우 슬랙으로 전달드리겠습니다.)

Openstack Window Server 2022 R2 이미지 만들기

1. 이미지 생성 사전 준비

1-1. qcow2 이미지 생성을 위한 virt-manager 설치
sudo apt install -y virt-manager qemu-efi
1-2. Window Server 2022 R2 installer iso 다운로드(해당 기능은 Test이므로 free trial 버전으로 이미지 생성하였습니다.)
1-3. window driver iso 다운로드(https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.102/virtio-win-0.1.102.iso)

2. 15G 빈 qcow2 이미지 생성(window설치에 문제 없도록 여유로운 사이즈)

qemu-img create -f qcow2 ws2012r2.qcow2 15G

3. vm 생성

1-2의 window Installer ISO: win2012r2-installer.iso
1-3의 window driver iso:virtio-win-0.1.102.iso
2의 빈 qcow2 이미지:wininstall.iso
생성될 vm window2012r2qcow2

sudo virt-install --connect qemu:///system \
  --name window2012r2qcow2 --ram 2048 --vcpus 2 \
  --network network=default,model=virtio \
  --cdrom win2012r2-installer.iso \
  --disk path=./ws2012r2.qcow2,format=qcow2,device=disk,bus=virtio \
  --disk path=./virtio-win-0.1.102.iso,device=cdrom \
  --vnc --os-type windows --os-variant win2k12

이슈 :No Bootable device 일 경우,
UI상 virt-manager로 window2012r2qcow2 열기, 상단의 보기 -> 상세정보 -> 부팅옵션 win2012r2-installer.iso 디스크로 변경 => 강제 종료 => Run

4. Window 설치

현재 부분부터는 가상환경에서 수행되는 부분입니다.
윈도우 설치 디스크 선택 구간에서 드라이버 설치(윈도우 - GUI 추천)

  • SCSI 드라이버 설치
    • Load driver > Browse > CD Drive virtio-win-0.1.1 > viostor > 2k12R2 > amd64 선택 > SCSI controler > Next
  • NetKVM 드라이버 설치
    • Load driver > Browse > CD Drive virtio-win-0.1.1 > NetKVM > 2k12R2 > amd64 선택 > SCSI controler > Next
      설치 완료후, 리부팅 => password 설정으로 설치 완료

5. Cloudbase-init 설치 및 이미지 일반화

5-1. Cloudbase-init 사전 설정

  • RunScript 활용을 위한 설정 변경: PowerShell로 powershell 실행 혹은 UI powershell 실행후 Set-ExecutionPolicy Unrestricted 커맨드 입력
  • Remote 접근 허용 :
    • 방화벽 해제 Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
    • 원격데스크탑 허용 powershell: sysdm.cpl => [Remote] 탭 내부 Allow remote connections to the compute 체크 및 하단 체크 해제(Allow connecttion~)

5-2. Cloudbase-init 다운로드
powershell 내에서 하단 명령어 수행 혹은 하단 url에서 다운로드

(New-Object System.Net.WebClient).DownloadFile('https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi','C:\Users\Administrator\CloudbaseInitSetup_Stable_x64.msi');
.\CloudbaseInitSetup_Stable_x64.msi

위 다운로드 파일은 https://cloudbase-init.readthedocs.io/en/latest/intro.html 에서 구하실수 있습니다.

5-3. Cloudbase-init 설치 및 이미지 일반화
CloudbaseInitSetup 위자드로 설치 진행

Configuration options
Username: Administrator
[V]Use metadata password

Serial port for logging:
COM1
[V]Run Cloudbase-init service as LocalSystem

설치 진행 후 Finish 페이지에서 멈춘뒤 cloudbase-init config 수정

경로 C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf 수정
내용 변경 혹은 확인:

username=Administrator

내용추가

allow_reboot=true
rdp_set_keepalive=true
first_logon_behaviour="no"
rename_admin_user=true
metadata_services=cloudbaseinit.metadata.services.httpservice.HttpService
plugins=cloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin,
    cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,
    cloudbaseinit.plugins.common.sshpublickeys.SetUserSSHPublicKeysPlugin,
    cloudbaseinit.plugins.common.userdata.UserDataPlugin,
    cloudbaseinit.plugins.common.setuserpassword.SetUserPasswordPlugin,
    cloudbaseinit.plugins.windows.createuser.CreateUserPlugin,
    cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,
    cloudbaseinit.plugins.windows.winrmlistener.ConfigWinRMListenerPlugin

[V] Run Sysprep~, [V] Shutdown ~ 선택 후 Finish => Shutdown VM

6. 오픈 스택 이미지 생성

위에서 생성된 ws2012r2.qcow2 업로드
대쉬보드 내 Image 생성, format QCOW2 설정, metadata os_type: windows 설정(해당 os_type이 존재하여야 CB-Spider내에서 이용가능합니다.)

@powerkimhub
Copy link
Member Author

@inno-cloudbarista

  • Markdown 부탁드립니다^^

@powerkimhub
Copy link
Member Author

@MZC-CSC @inno-cloudbarista @innodreamer

[Windows GuestOS ID/PW 처리 최종 정리]

@powerkimhub
Copy link
Member Author

@powerkimhub
Copy link
Member Author

@powerkimhub
Copy link
Member Author

@innodreamer

@powerkimhub
Copy link
Member Author

  • 현 이슈는 3살이 넘게 오래되었고,
  • 자연 치유 되었거나 발현 되지 않는 이슈로 판단 되어 close 합니다.
  • 유사 문제 발생시 Reopen되거나, 누군가에 의해 신규 이슈로 오픈되기를 희망합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants