2021年4月4日日曜日

docker_auth を使って registry の認証サーバを構築してみた

docker_auth を使って registry の認証サーバを構築してみた

概要

docker_auth を使うことで簡単に docker registry に認証機能を追加することができます
今回は registry の認証に docker_auth を使ってベーシック認証を追加してみました

環境

  • macOS 11.2.3
  • docker 20.10.5

auth_config.yml の作成

今回は単純なベーシック認証を使います
また認証情報はこの config.yml 内で管理します
パスワードは htpasswd -nB USERNAME コマンドで作成された暗号化されたパスワードを使います

  • vim auth_config.yml
server:
  addr: ":5001"
  certificate: "/home/RootCA.pem"
  key: "/home/RootCA.key"

token:
  issuer: "test_auth_server"
  expiration: 900

users:
  "admin":
    password: "$2y$05$LO.vzwpWC5LZGqThvEfznu8qhb5SGqvBSWY1J3yZ4AxtMRZ3kN5jC"  # badmin
  "test":
    password: "$2y$05$WuwBasGDAgr.QCbGIjKJaep4dhxeai9gNZdmBnQXqpKly57oNutya"  # 123

acl:
  - match: {account: "admin"}
    actions: ["*"]
    comment: "Admin has full access to everything."
  - match: {account: "test"}
    actions: ["pull"]
    comment: "User \"test\" can pull stuff."

証明書の作成は以下のコマンドで行いました

  • openssl req -x509 -nodes -new -sha256 -days 1024 -newkey rsa:2048 -keyout RootCA.key -out RootCA.pem -subj "/C=US/CN=Registry Auth CA"
  • openssl x509 -outform pem -in RootCA.pem -out RootCA.crt

docker_auth 起動

作成した auth_config.yml を使って docker_auth を起動します
ポートは 5001 を使います
また証明書も必要になるのでマウントします

  • docker run -d --name docker_auth -p 5001:5001 -v $(pwd)/auth_config.yml:/config/auth_config.yml -v $(pwd)/RootCA.pem:/home/RootCA.pem -v $(pwd)/RootCA.key:/home/RootCA.key cesanta/docker_auth:1 /config/auth_config.yml

docker registry の config.yml 作成

構築した docker_auth を使って認証する docker registry を構築します
まずは設定ファイルを作成します

  • vim registry_auth.yml
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
auth:
  token:
    realm: https://host.docker.internal:5001/auth
    service: container_registry
    issuer: test_auth_server
    rootcertbundle: /home/RootCA.crt

ポイントは auth.token.realm の指定とauth.token.issuer の指定になります
前者は https://host.docker.internal:5001/auth を指定しています
docker_auth には必ず https でなければいけないのと /auth の URI にアクセスするようにしましょう
後者は auth_config.yml で指定した token.issuer と同じ issuer を指定しましょう

docker regsitry 起動

作成した registry_auth.yml を使用して registry を起動しましょう
証明書も忘れずにマウントします

  • docker run -d --name docker_registry -p 5000:5000 -v $(pwd)/registry_config.yml:/etc/docker/registry/config.yml -v $(pwd)/RootCA.crt:/home/RootCA.crt registry:2

動作確認

  • docker login localhost:5000

でアクセスして admin/badmin と test/123 で問題なくログインできるか確認してみましょう

最後に

今回はベーシック認証を試しましたが認証の ID 連携も LDAP や MySQL を使った連携方法があるので機会があれば試してみようと思います

今回はすでにある docker_auth を使いましたが自分で認証サーバを開発することもできます
仕様はこちらにあるのでレスポンスの返し方など参考にすれば簡単に作成できると思います

参考サイト

0 件のコメント:

コメントを投稿