星期日, 7月 28, 2019

使用 gcloud 建立 openSUSE Leap 15 GCE with startup-script 小記

使用 gcloud 建立 openSUSE Leap 15 GCE with startup-script 小記

上一篇 Blog 寫 AWS CLI with userdata, 這一篇來寫 使用 gcloud 建立 openSUSE Leap 15 的 GCE ( Google Compute Engine ) 加上 startup-script ( 開機指令碼 )

目的跟之前一樣, 就是建立 VM ( 就是 GCE ) 的同時, 設定建立完成要執行的指令

OS: Container with openSUSE Leap 15
GCE: openSUSE Leap 15 on GCP

==== 在主機上面 ====

啟動 container

> docker  run  -v  ~/.aws:/root/.aws -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -v  ~/.ssh:/root/.ssh  -it  sakana/ansible_opensuse15  /bin/bash

  • 這邊我有透過 -v 把本機上面的三個平台的設定檔掛載到容器內, 還有 .ssh 目錄 也掛載上面, 因為 google 的 SSH 金鑰 也會存放在裡面


==== 在 container 內 ====

參考官方文件

可以使用 --metadata-from-file 以及 startup-script 方式來指定

建立一個 default_startup-script 內容如下

#!/bin/bash
# edit by sakana 2019/7/27
# Turn on password authentication for lab challenge
# not use passwd --stdin because some OS not support
#echo 'lab-password' | passwd ec2-user --stdin
# Use chpasswd to change password 
# example: useradd -m ansible && echo "ansible:2016StudyArea" | chpasswd
useradd -m css-user
echo "css-user:20190727GCE" | chpasswd

# force user change password when first login
passwd -e css-user
#
sed -i 's|[#]*PasswordAuthentication no|PasswordAuthentication yes|g' /etc/ssh/sshd_config
systemctl restart sshd.service

  • 這邊我有實驗過, 不可以將兩個指令用 && 串接, 會失敗, 所以就先拆開為兩行, 以後再找原因

使用 gcloud 指令建立 openSUSE Leap 15 的 GCE ( VM )

# gcloud  compute  --project=sakanatest  instances  create  --zone=asia-east1-b  --machine-type=n1-standard-1  --image-project=opensuse-cloud  --image-family opensuse-leap --boot-disk-size=30GB --metadata-from-file startup-script=GCP/startup-script/default_startup-script  test20190727

  • --project 是因為我有多個 profile 所以指定那一個專案
  • 使用指定 --image-family 方式來取得最新的 image, 而不是 --image 指定某個版本 image 


接下來驗證是否成功

==== 在主機上面 ====

使用 ssh  -l css-user@SERVER_IP
看看是否可以登入, 如果可以就是大功告成

~ enjoy it



Reference:


星期六, 7月 27, 2019

AWS CLI 指令建立 EC2 機器 with Userdata 小記

AWS  CLI 指令建立 EC2 機器 with Userdata 小記


之前有使用 aws cli 建立 EC2, 但是建立 EC2 之後會有後續想要進行的動作, 例如安裝套件或是其他的要求, 這個部份其實可以在安裝的時候透過 userdata 來指定, 這一篇小記就是紀錄 aws-cli 建立 EC2 加上 userdata 作法.


一樣使用之前建立的 Container with 雲平台工具


OS: Container with openSUSE Leap 15


==== 在主機上面 ====


啟動 container


> docker  run  -v  ~/.aws:/root/.aws -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -v  ~/.ssh:/root/.ssh  -it  sakana/ansible_opensuse15  /bin/bash


==== 在 container 內 ====


參考官方文件


官方文件提到可以搭配 --user-data 參數使用 run-instances


先來看看這次要實驗的 defaul_userdata 檔案內容


#!/bin/bash
# Turn on password authentication for lab challenge
# not use passwd --stdin because some OS not support
#echo 'lab-password' | passwd ec2-user --stdin
# Use chpasswd to change password 
# example: useradd -m ansible && echo "ansible:2016StudyArea" | chpasswd
echo "ec2-user:2019TestEC2" | chpasswd
sed -i 's|[#]*PasswordAuthentication no|PasswordAuthentication yes|g' /etc/ssh/sshd_config
systemctl restart sshd.service


  • 將 ec2-user 密碼設定為 lab-password
  • 開啟 sshd 使用密碼驗證, 重啟 sshd 服務讓設定生效
  • 在容器內中文註解有問題, 所以我先把註解用英文


接下來準備建立 EC2, 參考之前的文章


這邊有些需要的資訊, 可以使用指令的方式, 也可以使用 console 方式來取的
  • Image-id
    • # aws  ec2  describe-images  --filters  'Name=name,Values=openSUSE*'
  • Subnet-id
    • # aws  ec2  describe-subnets
  • Security-group-id
    • # aws  ec2  describe-security-groups
  • Key-name
    • # aws ec2 describe-key-pairs

執行 aws 指令建立 EC2


# aws  ec2  run-instances --image-id  ami-026fef571e7830801 --subnet-id  subnet-92dfe4fb --security-group-ids sg-090a6648734644255  --instance-type  t2.micro --key-name  test-key --count  1 --user-data  file://AWS/user-data/default_userdata


接下來驗證是否成功


==== 在主機上面 ====


使用 ssh  -l ec2-user@SERVER_IP
看看是否可以登入, 如果可以就是大功告成


~ enjoy it

Reference:

星期六, 7月 20, 2019

AWS 以console 及 aws-cli 新增IAM使用者小記

AWS 以console 及 aws-cli 新增IAM使用者小記

有些專案, 同事需要有 AWS console 登入檢視相關資訊的需求
寫一篇小記紀錄如何建立使用者然後給予相關權限

======== Console 方式 ========

登入 AWS Console -- > 點選 IAM 服務  -- > 點選 使用者

點選 新增使用者
輸入 使用者名稱 , 勾選 AWS Management Console 存取, 設定密碼 
確認 使用者必須在下次登入時建立新的密碼已經勾選
點選 下一個:許可


這次要建立的是只有 EC2 檢視的使用者, 官方建議使用群組的方式來管理
在 設定許可畫面中 , 點選建立群組

輸入群組名稱, 以這邊為例 EC2ReadOnlyAccess
搜尋 EC2Re 可以找到 AmazonEC2ReadOnlyAccess 政策
勾選 AmazonEC2ReadOnlyAccess 政策 -- > 建立群組 

確認 EC2ReadOnlyAccess 群組已經勾選 -- > 點選 下一個:標籤


標籤的部份, 因為在Console 沒有辦法輸入中文, 實物上可能有相關需求, 所以我是之後使用指令來完成, 點選 下一個:檢閱


再次瀏覽相關資訊 
點選 建立使用者
點選關閉 完成設定

接下來進行驗證

另外開啟新的瀏覽器到 AWS 登入Console
以剛剛建立好的使用者登入, 
可以嘗試進行相關動作, 但是因為沒有相關權限, 所以應該會得到相關錯誤訊息



另外一種方式是使用指令的方式

======== Console 方式 ========

一樣使用之前建立的 Container with 雲平台工具

OS: Container with openSUSE Leap 15

==== 在主機上面 ====

啟動 container

> docker  run  -v  ~/.aws:/root/.aws -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -v  ~/.ssh:/root/.ssh  -it  sakana/ansible_opensuse15  /bin/bash

==== 在 container 內 ====

參考官方文件

建立使用者

# aws  iam  create-user --user-name  max

{
    "User": {
        "UserName": "max", 
        "Path": "/", 
        "CreateDate": "2019-07-20T03:41:17Z", 
        "UserId": "AIDA2MGTTTNPHXG2DWTKL", 
        "Arn": "arn:aws:iam::781126831704:user/max"
    }
}

給予 console login 權限

# aws iam create-login-profile --user-name max --password YOURPW  --password-reset-required

{
    "LoginProfile": {
        "UserName": "max", 
        "CreateDate": "2019-07-20T03:47:35Z", 
        "PasswordResetRequired": true
    }
}


接下來就是建立群組, 讓使用者加入還有設定政策

# aws  iam  create-group  --group-name EC2ReadOnlyAccess

{
    "Group": {
        "Path": "/", 
        "CreateDate": "2019-07-20T03:54:14Z", 
        "GroupId": "AGPA2MGTWTNTKQRGBFF7U", 
        "Arn": "arn:aws:iam::781126831704:group/EC2ReadOnlyAccess", 
        "GroupName": "EC2ReadOnlyAccess"
    }
}


將政策( Policy ) 加入到群組
在加入政策之前要先先找到相關 政策還有他的 ARN

先觀察相關資訊, 先列出兩個
#aws  iam  list-policies --max-items 2

{
         "Policies": [
        {
                "PolicyName": "AdministratorAccess",
                "CreateDate": "2015-02-06T18:39:46Z",
                "AttachmentCount": 5,
                "IsAttachable": true,
                "PolicyId": "ANPAIWMBCKSKIEE64ZLYK",
                "DefaultVersionId": "v1",
                "Path": "/",
                "Arn": "arn:aws:iam::aws:policy/AdministratorAccess",
                "UpdateDate": "2015-02-06T18:39:46Z"
              },
              {
                "PolicyName": "ASamplePolicy",
        "CreateDate": "2015-06-17T19:23;32Z",
        "AttachmentCount": "0",
        "IsAttachable": "true",
                "PolicyId": "Z27SI6FQMGNQ2EXAMPLE1",
        "DefaultVersionId": "v1",
                "Path": "/",
                "Arn": "arn:aws:iam::781126831704:policy/ASamplePolicy",
                "UpdateDate": "2015-06-17T19:23:32Z"
              }
        ]
}

  • 這邊可以觀察到有 2 種 ARN, 官方ARN以及有帶 使用者帳號ID 的 ARN 

實務上我會使用 list-policies 加上 egrep 方式來找出我想要的
例如 # aws iam list-policies | egrep  '*EC2*' 

這次的作法是要找出 EC2 然後 ReadOnly
所以我會這樣搭配

# aws  iam  list-policies | egrep  -i   '*EC2*ReadOnly*'

            "PolicyName": "AmazonEC2ReadOnlyAccess", 
            "Arn": "arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess", 

  • 這邊一定要用 egrep 而不是 grep

接下來把 找到的 AmazonEC2ReadOnlyAccess 政策套用到群組

# aws  iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess --group-name  EC2ReadOnlyAccess

最後就是把使用者加到群組

# aws  iam  add-user-to-group --user-name max --group-name EC2ReadOnlyAccess


先記下來
~ enjoy it

有關於 IAM 使用者 加上標籤可以參考之前的 Blog


Reference: