iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
自我挑戰組

用Unity製作連線遊戲系列 第 22

Start to Know Vault

  • 分享至 

  • xImage
  •  

今天也沒有太多時間,但安排是了解Vault的使用。目前已經開始著手了解Terraform的使用,但每次要進行GCP的操作時,都必需要以file的形式將service account產生出來的json檔放進來。Terraform的寫法大致如下

provider "google" {
  version = "3.5.0"

  credentials = file("/terraform/keyfile-terraform.json")

  project = "project-id"
  region  = "us-west1"
}

雖然目前還不太會用variable的方式撰寫,所以多數的值都是直接hard code上去的,但最主要的問題仍是在於用variable也還是會碰到相同的問題,那個由service account做出來的json檔要怎麼給。為了試著將json檔的內容由一個安全的地方拿取,有試著想過用Google KMS。但用KMS最先碰到的問題在於要怎麼拿取後給予。

先說明流程上用KMS,仍還是會需要一份service account的json檔,如果有給權限(IAM Role),則也可以直接用同一份,不過如果用KMS,流程上就會相當的複雜。原因是目前的Terraform已經是利用官方的Docker進行,而KMS若一樣是要用Docker,則需要再開一個Docker Compose,並利用mount的方式掛載檔案volume給二個Docker使用。

概念上會變成,KMS拿到一份json檔,放在volume上,而terrform所在的那個docker,則必需要等到KMS docker拿取完後才能夠取用。這裡複雜的部份是在於要怎麼樣讓terrform那份docker等到kms拿取完後再開始動作。最簡單的方式或許是等個數秒,再開始,但KMS要花多時間拿並不一定,也是可以直接給最大值後不理會它,反正過一分鐘很再塼執行也無所謂。

另一個比較好的方式是寫script,並在kms完成拿取時利用API的方式通知terraform所在的docker,但這個方式的bash script不知道怎麼寫,如果利用nodejs的方式進行,整個就是走偏變得更複雜了。

所以,自然而然的就放棄Google KMS的方式,轉而去了解同是一家的產品,也就是Vault。

網路上的文章看到後,就開始依樣畫葫蘆,期望能順利的了解怎麼用,不過今天也只大約了解一點點關於valut怎麼開始

version: '3.7'

services:

  vault:
    build:
      context: ./vault
      dockerfile: Dockerfile
    ports:
      - 8200:8200
    volumes:
      - ./vault/config:/vault/config
      - ./vault/policies:/vault/policies
      - ./vault/data:/vault/data
      - ./vault/logs:/vault/logs
    environment:
      - VAULT_ADDR=http://127.0.0.1:8200
      - VAULT_API_ADDR=http://127.0.0.1:8200
    command: server -config=/vault/config/vault-config.json
    cap_add:
      - IPC_LOCK

而指向的Dockerfile內容則如下

# base image
FROM alpine:latest

# set vault version
ENV VAULT_VERSION 1.5.3

# create a new directory
RUN mkdir /vault

# download dependencies
RUN apk --no-cache add \
      bash \
      ca-certificates \
      wget

# download and set up vault
RUN wget --quiet --output-document=/tmp/vault.zip https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip && \
    unzip /tmp/vault.zip -d /vault && \
    rm -f /tmp/vault.zip && \
    chmod +x /vault

# update PATH
ENV PATH="PATH=$PATH:$PWD/vault"

# add the config file
COPY ./config/vault-config.json /vault/config/vault-config.json

# expose port 8200
EXPOSE 8200

# run vault
ENTRYPOINT ["vault"]

簡單來說,Vault需要幾個目錄,就在一開始直接mount volume進行引用。

最重要的部份還是在於unseal後才能使用

vault operator init

vault operator unseal

今天就只能先研究到這裡,明天再開始了解後續怎麼直接使用在Terraform裡。


上一篇
Deploy Cloud Function via Serverless
下一篇
Remote Config
系列文
用Unity製作連線遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言