AWS元数据代理
项目描述
元数据代理
目前正在进行一些重构
一个非常简单的项目,旨在向本地服务器提供一个与AWS兼容的元数据服务,所有凭证请求都通过一个中央服务器进行中继,该服务器要么具有AWS凭证,要么在AWS上运行并具有主机iam角色。
安装
元数据服务器
待办事项 - 创建docker容器
运行以下docker容器 terrycain/SOMECONTAINER
它监听HTTP 8000,因此请将其放在HTTPS负载均衡器/反向代理后面,
待办事项 - 创建以下Dynamo表:metadata-proxy-hosts、metadata-proxy-containers、metadata-proxy-users
配置
以下是用于配置元数据服务器的环境变量,默认值在括号中给出。
REG_KEY
- 用于初始客户端注册的随机字符串。HOSTNAME_PREFIX
- (ip) 主机名将生成如下:192.168.0.1
->HOSTNAME_PREFIX-192-168-0-1
.IAM_HOST_ROLE_CACHE_TTL
- (120) 缓存IAM角色列表(用于UI中的下拉列表)的时间(秒)。有时这可能需要一段时间。
目前Redis是一个依赖项,但可以与此容器一起运行独立的redis,将来将考虑将其作为可选项。
REDIS_HOST
- (localhost) Redis主机名。REDIS_PORT
- (6379) Redis端口。REDIS_DB
- (0) Redis 数据库。
STS凭据被缓存(目前保存在redis中)并且使用AES密钥加密。这允许以高可用性方式运行多个服务器,并减少STS.assume_role
请求。
STS_SEED
- 这应该是一个长的随机密钥。
用户身份验证基于DynamoDB表中的用户或通过OpenID Connect。
USER_AUTH_METHOD
- (oidc) 可以是oidc
或dynamo
OIDC_CLIENT_ID
- OpenID Connect客户端ID。OIDC_CLIENT_SECRET
- 客户端密钥。OIDC_BASE_URL
- OpenID服务器的基地址,在启动时,服务器将调用wellknown元数据URL以获取OpenID配置。
DynamoDB配置
DYNAMODB_REGION
- (eu-west-1) DynamoDB表的存储区域DYNAMODB_HOSTS_TABLE
- (metadata-proxy-hosts) 存储注册主机及其分配角色的表DYNAMODB_CONTAINER_TABLE
- (metadata-proxy-containers) 包含表的表DYNAMODB_USERS_TABLE
- (metadata-proxy-users)
元数据代理
待办事项 - 制作pip包
Linux
安装Python包(需要Python 3.5.3+)
sudo pip3 install terrycain-metadata-proxy[uvloop]
创建以下systemd单元文件和相关用户
sudo groupadd --system metadata-proxy
sudo useradd --system --gid metadata-proxy --home-dir /var/lib/metadata-proxy --shell /sbin/nologin metadata-proxy
sudo mkdir /var/lib/metadata-proxy
sudo chown metadata-proxy:metadata-proxy /var/lib/metadata-proxy
sudo chown 0700 /var/lib/metadata-proxy
cat << EOF | sudo tee /etc/systemd/system/metadata-proxy.service
[Unit]
Description=Metadata proxy
Requires=network.target
After=network.target
[Service]
Environment=PYTHONUNBUFFERED=1
TimeoutStartSec=0
Restart=always
User=metadata-proxy
Group=metadata-proxy
WorkingDirectory=/var/lib/metadata-proxy
PermissionsStartOnly=true
ExecStartPre=/sbin/iptables -t nat -I OUTPUT -p tcp -d 169.254.169.254 --dport 80 -j DNAT --to-destination 127.0.0.1:8000
ExecStart=/usr/local/bin/metadata-proxy
ExecStopPost=/sbin/iptables -t nat -D OUTPUT -p tcp -d 169.254.169.254 --dport 80 -j DNAT --to-destination 127.0.0.1:8000
[Install]
WantedBy=default.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now metadata-proxy
测试代理是否正在运行并且iptables规则是否有效
curl http://169.254.169.254/latest/meta-data/instance-type ; echo
# Should output:
# c5.16xlarge
使用UI中的curl命令将元数据服务注册到主服务器
curl --noproxy '*' -XPOST http://169.254.169.254/register -H "Content-Type: application/json" --data '{"server_url": "https://metadata-eu.ficoccs-prod.net/api/v1/register", "key": "0753e6f9-5884-462d-bb46-d376f27047a1"}'
Windows
在Windows上安装(需要Python 3.5.3+)
pip3 install terrycain-metadata-proxy
在Windows上创建服务 TODO
使用UI中的curl命令将元数据服务注册到主服务器
待办事项列表
- 更好的日志记录
- 添加对
cert.pem
、key.pem
、chain.pem
环境变量的支持,以便它可以进行HTTPS - 完成文档
项目详情
关闭
terrycain-metadata-proxy-1.5.0.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 3cc347b14bf0b3a90aeeb2d127a3b5cfab52e2dff5c9b9e1ff2fc7d30f9bcfb6 |
|
MD5 | 9116e7c223409b4822e810c2c997e52d |
|
BLAKE2b-256 | d9363e927207f58e0d8ba9fb2d855d0ddc2b9ce4e5652eec48e4cd916b57df5a |
关闭
terrycain_metadata_proxy-1.5.0-py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | eaf04ef3db0af60922d33accd624c4df442c8d478bbeca1a290563a2edc7ff78 |
|
MD5 | c25119766a45d656f0a8c4d7a856b002 |
|
BLAKE2b-256 | b050c70c57a1b7ffed7c28f8d1c3732f48c0ecd5bfb6742ddb5dffb21b38edc6 |