🐥

OCIRログインの地味な罠

2024/02/26に公開

OCIRにログインできない

Oracle Cloud Infrastructure Registryの認証周りで地味にハマったポイントをまとめてきます。
地味にdockerやbase64の知識を問われる部分です。

エンドポイント分からない問題

ここのURLを参考にする。
大阪ならkix.ocir.ioとなる。
https://docs.oracle.com/ja-jp/iaas/Content/Registry/Concepts/registryprerequisites.htm

余談

なんでkixなんだろうって思っていたのですが、関西国際空港のコードがkixらしいです。
パプアニューギニアにkiaを取られたらしい。

ポリシー設定

ココを参考に良しなに。
https://docs.oracle.com/ja-jp/iaas/Content/Registry/Concepts/registrypolicyrepoaccess.htm

ポリシー上、権限のないユーザーでもdocker login出来てしまうのはOCIの仕様。
(イメージのPullやPushはちゃんとにポリシー準拠になる)

docker loginできない問題

ここにやり方は書かれていますが、地味な罠があります。
https://docs.oracle.com/ja-jp/iaas/Content/Registry/Tasks/registrypushingimagesusingthedockercli.htm

docker login kix.ocir.io
ユーザー名: <tenancy-namespace>/<domain>/<username> ←別ドメインのユーザーの場合はドメインが必要
パスワード: 生成したトークン

Kubernetesでイメージプルできない問題

シークレットの作成方法が地味に罠。

https://docs.oracle.com/ja-jp/iaas/Content/Registry/Tasks/registrypullingimagesfromocir.htm

多くの場合、認証トークンを一重引用符で囲みます。それ以外の場合、単一引用符は必要ありません。

このやり方をすると、特殊文字が文字コード(UNICODE?)に変換されるので、パスワード不一致でログインできなくなる。
(なんでそうなるかは知らんがハマった箇所。検証した環境の言語設定が悪さしているかも)

kubectl create secret docker-registry <secret-name> --docker-server=<region-key>.ocir.io --docker-username=<tenancy-namespace>/<oci-username> --docker-password='<oci-auth-token>' --docker-email=<email-address>

Linux上のbase64コマンドで作っていくと安全。

authの値を生成する。
echo -nで改行させないことがポイント
(改行入れてしまうのはbase64変換でよくやるミス)

echo -n "<tenancy-namespace>/<domain>/<username>:<token>" | base64 -w 0

authはさっき確認した値を入れる。
シングルクォーテーションで囲む。

echo -n '{"auths":{"kix.ocir.io":{"username":"<tenancy-namespace>/<domain>/<username>","password":"token","email":"hoge@example.com","auth":"xxx"}}}' | base64 -w 0

Secretの一例としてこんな感じになる。

apiVersion: v1
kind: Secret
metadata:
  name: myregistrykey
  namespace: awesomeapps
data:
  .dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson

参考

https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials

Discussion