結論だけ見たい方は一番下のTwitterのリンクからどうぞ。
他のブログだとアフィリエイトまみれでまともな情報がなさそうだったのでメモ。
勉強メモ。
結論だけ見たい方は一番下のTwitterのリンクからどうぞ。
他のブログだとアフィリエイトまみれでまともな情報がなさそうだったのでメモ。
Ubuntu 22.04の環境でapt-get update 時、下記のメッセージが出てアップデートが出来なくなりました。
Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
Debianの場合は下記のエラーメッセージが出るようです。
Warning: apt-key output should not be parsed (stdout is not a terminal)
... "Key is stored in legacy trusted.gpg keyring……の対処方法" を続けて読む
以下、chrome:// から始まるアドレスはコピー&ペーストしてEnterキーで移動する必要があります。(別のタブからは飛べないようになっているため)
以下、chrome:// から始まるアドレスはコピー&ペーストしてEnterキーで移動する必要があります。(別のタブからは飛べないようになっているため)
Packerを使ってCompute Engineのマシンイメージを作成し、Google Cloud上のプロジェクトに保存する方法です。
今回の環境
Ubuntu 21.04 192.168.10.211 ControlPlane 2vCPU 3GBメモリ 16GB SSD
Ubuntu 21.04 192.168.10.212 WorkerNode 1vCPU 1GBメモリ 16GB SSD
Ubuntu 21.04 192.168.10.213 WorkerNode 2vCPU 2GBメモリ 16GB SSD
Kubernetes のバージョンは1.22です。
VMWare ESXi 6.7U2上に構築しています。
スペックはわざとバラバラにしてみました。ちょっとケチりすぎたかも。
基本的に公式ドキュメントに沿って作業していきます。
https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
nftablesではなくiptablesを使うよう変更
# レガシーバイナリがインストールされていることを確認してください sudo apt-get install -y iptables arptables ebtables # レガシーバージョンに切り替えてください。 sudo update-alternatives --set iptables /usr/sbin/iptables-legacy sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy sudo update-alternatives --set arptables /usr/sbin/arptables-legacy sudo update-alternatives --set ebtables /usr/sbin/ebtables-legacy
Dockerをインストール
https://kubernetes.io/ja/docs/setup/production-environment/container-runtimes/
sudo apt-get update && sudo apt-get install -y \
apt-transport-https ca-certificates curl software-properties-common gnupg2
Docker公式のGPG鍵を追加
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
バージョン指定が利かなかったので外しています
sudo apt-get update && sudo apt-get install -y \ containerd.io \ docker-ce \ docker-ce-cli
sudo cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF ※Permission Deniedでファイルが出来なければsudo viで普通に作る sudo mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload sudo systemctl restart docker
kubeadm、kubelet、kubectlのインストール
sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl sudo apt-get update && sudo apt-get upgrade
swapを無効に
sudo swapoff -a
再起動したとき元に戻らないよう、swap.imgをコメントアウト
sudo vi /etc/fstab #swap.img none swap sw 0 0
Project CalicoをKubernetesで使ってみる:構築編 を参考にkubeadmの操作
sudo kubeadm init --apiserver-advertise-address=192.168.10.211 --pod-network-cidr=192.168.0.0/16
CNI(Container Network Interface)はCalicoを使う予定で、--pod-network-cidr で指定しているIPアドレス範囲は、CALICO_IPV4POOL_CIDRの値に合わせています。
https://docs.projectcalico.org/reference/node/configuration
Your Kubernetes control-plane has initialized successfully! のあとに、クラスタに参加させるためのkubeadmコマンドが表示されます。
kubeadm join 192.168.10.211:6443 --token ********************* \ --discovery-token-ca-cert-hash sha256:***************************************************************
kubectlをroot以外のユーザーでも実行できるように
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
他2台のWorkerNodeでもswapの無効化とkubeadm join ~を実行してクラスタに参加させます。
CNIのインストールを行います。
Installing Addonsのページでは大量に紹介されているのですが、前述の通りCalicoを選択。
Google Cloud のGKEでもCalicoを使っているらしく、似た環境にしたいためです。
CalicoのQuickStartを参考に。
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
tigera-operator.yaml をkubectl createすると実行はできますが、下記のWarningが出ます。
Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
Kubernetes1.21以降PodSecurityPolicyは非推奨で、1.25から正式に廃止されるとのこと。
ちなみに、policy/v1ではPodSecurityPolicyは存在しません。
PodSecurityPolicyの置き換えは議論中らしいのでそのまま使うことに。
上のふたつのyamlをcreateしてからPodの様子を見てみます。
$ kubectl get pods -n calico-system NAME READY STATUS RESTARTS AGE calico-kube-controllers-bdd5f97c5-zq5tp 1/1 Running 0 9h calico-node-nl5mt 1/1 Running 0 9h calico-node-vgjb2 1/1 Running 0 9h alico-node-wrmtn 1/1 Running 0 9h calico-typha-788bf594d7-fjt54 1/1 Running 0 9h calico-typha-788bf594d7-tvld2 1/1 Running 0 9h calico-typha-788bf594d7-x5pcr 1/1 Running 0 9h
STATUSがすべてRunningになっていたらOK
Nodeの様子も確認します。
$ kubectl get pods -n calico-system NAME READY STATUS RESTARTS AGE calico-kube-controllers-bdd5f97c5-zq5tp 1/1 Running 0 9h calico-node-nl5mt 1/1 Running 0 9h calico-node-vgjb2 1/1 Running 0 9h calico-node-wrmtn 1/1 Running 0 9h calico-typha-788bf594d7-fjt54 1/1 Running 0 9h calico-typha-788bf594d7-tvld2 1/1 Running 0 9h calico-typha-788bf594d7-x5pcr 1/1 Running 0 9h
もしNotReadyになっていたらkubectl describe nodesやsystemctl status kubectlで何が起きているか確認し、トラブルシュートしていきます。
Google Cloudを使ったアプリケーション開発において、「簡単にデプロイされているアプリのバージョンを確認したい」という要望があったので、gitのCommit IDやpushしたタグをコンテナに詰める方法をメモっておきます。
なお、メインはCloud Buildのため、Cloud RunとSource Repogitriesについては省略しています。
ディレクトリ構成
┣cloudbuild
┃┗cloudbuild.yaml
┗container
┣Dockerfile
┗html
┗index.html
cloudbuild/cloudbuild.yamlの中身(の一部)
steps: - name: gcr.io/cloud-builders/docker args: - build - '--no-cache' - '-t' - '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA' - container - '-f' - container/Dockerfile - '--build-arg' - COMMIT_SHA=$COMMIT_SHA - '--build-arg' - TAG_NAME=$TAG_NAME id: Build (長いので以下略/Cloud RunをWebコンソールから作ったときに作成されるものと同じ)
container/Dockerfile の中身
FROM nginx COPY ./html /usr/share/nginx/html ARG COMMIT_SHA ARG TAG_NAME ENV COMMIT_SHA ${COMMIT_SHA:-local} ENV TAG_NAME ${TAG_NAME:-local} RUN echo ${COMMIT_SHA} > /usr/share/nginx/html/commit.txt RUN echo ${TAG_NAME} > /usr/share/nginx/html/tag.txt
--build-arg を使ってCOMMIT_SHAとTAG_NAMEを渡します。
ビルド時にARGで受け取った後、環境変数に格納して公開ディレクトリのテキストファイルに書き出しています。
上記画像の場合、[URL]/commit.txtにアクセスすると、「42e23d574a162804813b1a5dee1da7cb8247f734」
[URL]/tag.txtにアクセスすると、「1.0.2」のテキストが表示されます。
WordPressに二要素認証(今回は「知識」と「所有」)を導入する、Two-FactorプラグインとYubico セキュリティ―キーを試してみました。
今回、Panasonic WonderLabで開催されたMINI Hardening Project #3.5@OWASP Kansaiに参加しました。
「詳細な競技内容は発信禁止」とのことなので詳細は書けませんが一般的な話として。
こういった「普通やろ?」と思われる事柄が、Hardeningでは身をもって体験できます。
体で覚える情報セキュリティ(インシデントレスポンス)といったところでしょうか。
今回は競技時間も長かったため、約5時間サービスがダウンしたり、改ざんされたり「コレ放っておくとヤバイ!」な事象が次々起こるのをひたすら捌き続ける(捌けるとは言っていない)感じでした。
私はLinuxの操作と一部のCMSなら少しは自分で動けたのですが、知らない分野(特にアプリケーション)がよわよわなので課題が山積み…というかLinuxすら最近Docker/Kubernetesばかり触っているため、Linux力の低下を実感しました。
次々と事件が起きるためオペレーションミスや判断ミスも多々発生し、悔しいことも多いですが、それも含めて色々と良い経験になりました。
以上、Hardeningはインシデントレスポンスという珍しいイベントを体験できる、楽しく学べる貴重な勉強会だと思います。サーバーを構築・管理する人には強くおすすめします。
出来れば最初はMicroHardening、次にMiniHardening、そして本家Hardening Projectのステップが望ましいとは思います。ただ、開催自体がそんなに多くはないのでお近くの地域で開催されていたら思い切って飛び込むと良いと思います。
最後に、OWASP Kansai・MINI Hardening Projectの運営の皆様、ありがとうございました。
OpenSSLのWikiからリンクされている下記のページからダウンロードします。
Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions (slproweb.com)
普通に個人環境で実験するだけならWin64 OpenSSL Light EXE版で問題ありません。
Win64OpenSSL_Light-3_0_7.exe(3_0_7の箇所はバージョンが入るので、その時々によって異なります)を実行してインストーラを起動し、同意してNextを押して進みます。
下記の画像のようにThe OpenSSL binaries (/bin) directoryを選び、「C:\Program Files\OpenSSL-Win64\bin」にopenssl.exeが配置されるようにします。
インストールが済んだらWindows Terminalかコマンドプロンプトを起動し、openssl versionしてみます。まだパスを通していないので、失敗します。
>openssl version 'openssl' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
そのまま下記コマンドを実行し、OpenSSLの実行ファイルのパスを通します。
set Path=%Path%;C:\Program Files\OpenSSL-Win64\bin
Pathを表示し、末尾に「C:\Program Files\OpenSSL-Win64\bin」が入っていることを確認します。
echo %Path%
再度openssl versionを実行し、正常に実行出来ることを確認します。
>openssl version OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)
もし失敗していた場合は一から手順を見直してください。
OpenSSLのバージョンが確認できたら次へ。
setコマンドは一時的な追加なので、最後にsetxで環境変数に保存します。
setx Path "%Path%"
以上で終わりです。
ちなみに、CUI(コマンド)ではなく、GUI(画面からポチポチ)する方法もあります。
Windowsキー+Rでファイル名を指定して実行から「rundll32 sysdm.cpl,EditEnvironmentVariables」を入力してOKを押します。
環境変数のウィンドウが表示されたらユーザー環境変数のPathの項目を選んで編集し、「環境変数名の編集」ウィンドウにある新規(N)から「C:\Program Files\OpenSSL-Win64\bin」を追加します。