概要
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 件のコメント:
コメントを投稿