直接使用
docker exec -it etcd1 etcdctl --endpoints=地址 --user=root:123456 role add test_role && \
docker exec etcd1 etcdctl --endpoints=地址 --user=root:123456 role grant-permission test_role readwrite /test --prefix=true && \
docker exec etcd1 etcdctl --endpoints=地址 --user=root:123456 user add testuser:test_password_123456 && \
docker exec etcd1 etcdctl --endpoints=地址9 --user=root:123456 user grant-role testuser test_role
#!/bin/bash
etcd 用户权限配置脚本
用途:配置 etcd 访问用户和权限
set -e
配置参数
ETCD_ENDPOINTS=""
ROOT_PASSWORD=""
APP_USER=""
APP_PASSWORD=""
颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo -e "{GREEN}========================================{NC}"
echo -e "{GREEN}etcd 用户权限配置脚本{NC}"
echo -e "{GREEN}========================================{NC}"
等待集群就绪
echo -e "{YELLOW}\[1/8\] 等待 etcd 集群就绪...{NC}"
sleep 5
检查集群状态
echo -e "{YELLOW}\[2/8\] 检查集群状态...{NC}"
docker exec etcd1 etcdctl --endpoints=${ETCD_ENDPOINTS} endpoint status --write-out=table
echo -e "{GREEN}✓ 集群运行正常{NC}"
创建 root 用户
echo -e "{YELLOW}\[3/8\] 创建 root 用户...{NC}"
docker exec etcd1 etcdctl --endpoints={ETCD_ENDPOINTS} user add root:{ROOT_PASSWORD} || echo "root 用户可能已存在"
echo -e "{GREEN}✓ root 用户已配置{NC}"
创建应用用户
echo -e "{YELLOW}\[4/8\] 创建应用用户 ({APP_USER})...${NC}"
docker exec etcd1 etcdctl --endpoints={ETCD_ENDPOINTS} user add {APP_USER}:{APP_PASSWORD} \|\| echo "{APP_USER} 用户可能已存在"
echo -e "{GREEN}✓ {APP_USER} 用户已创建${NC}"
创建角色
echo -e "{YELLOW}\[5/8\] 创建角色...{NC}"
docker exec etcd1 etcdctl --endpoints=${ETCD_ENDPOINTS} role add readwrite || echo "readwrite 角色可能已存在"
echo -e "{GREEN}✓ readwrite 角色已创建{NC}"
授予权限(读写所有 key)
echo -e "{YELLOW}\[6/8\] 授予权限...{NC}"
docker exec etcd1 etcdctl --endpoints=${ETCD_ENDPOINTS} role grant-permission readwrite readwrite '' --prefix=true
docker exec etcd1 etcdctl --endpoints=${ETCD_ENDPOINTS} role grant-permission readwrite read '' --prefix=true
echo -e "{GREEN}✓ 权限已授予{NC}"
将用户绑定到角色
echo -e "{YELLOW}\[7/8\] 绑定用户到角色...{NC}"
docker exec etcd1 etcdctl --endpoints={ETCD_ENDPOINTS} user grant-role {APP_USER} readwrite
echo -e "{GREEN}✓ 用户角色绑定完成{NC}"
启用认证
echo -e "{YELLOW}\[8/8\] 启用认证...{NC}"
docker exec etcd1 etcdctl --endpoints=${ETCD_ENDPOINTS} auth enable || echo "认证可能已启用"
echo -e "{GREEN}✓ 认证已启用{NC}"
测试认证
echo -e "{YELLOW}\[测试\] 测试认证...{NC}"
echo -e "使用 root 用户测试:"
docker exec etcd1 etcdctl --endpoints={ETCD_ENDPOINTS} --user=root:{ROOT_PASSWORD} put /test/auth "authentication works"
docker exec etcd1 etcdctl --endpoints={ETCD_ENDPOINTS} --user=root:{ROOT_PASSWORD} get /test/auth
echo -e ""
echo -e "使用 ${APP_USER} 用户测试:"
docker exec etcd1 etcdctl --endpoints={ETCD_ENDPOINTS} --user={APP_USER}:{APP_PASSWORD} put /test/{APP_USER} "app user works"
docker exec etcd1 etcdctl --endpoints={ETCD_ENDPOINTS} --user={APP_USER}:{APP_PASSWORD} get /test/{APP_USER}
echo -e ""
echo -e "{GREEN}========================================{NC}"
echo -e "{GREEN}用户权限配置完成!{NC}"
echo -e "{GREEN}========================================{NC}"
echo -e "Root 用户: root"
echo -e "Root 密码: ${ROOT_PASSWORD}"
echo -e ""
echo -e "应用用户: ${APP_USER}"
echo -e "应用密码: ${APP_PASSWORD}"
echo -e ""
echo -e "{YELLOW}重要提示:{NC}"
echo -e "1. 请妥善保管这些密码"
echo -e "2. 建议修改密码: etcdctl user passwd <username>"
echo -e "3. 连接字符串: ${ETCD_ENDPOINTS}"
echo -e ""
echo -e "使用示例:"
echo -e " etcdctl --endpoints={ETCD_ENDPOINTS} --user={APP_USER}:${APP_PASSWORD} get / --prefix"
echo -e "{GREEN}========================================{NC}"