跳转到主要内容

AWS元数据代理

项目描述

PyPi Travis PyUp

元数据代理

目前正在进行一些重构

一个非常简单的项目,旨在向本地服务器提供一个与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) 可以是oidcdynamo
  • 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.pemkey.pemchain.pem环境变量的支持,以便它可以进行HTTPS
  • 完成文档

项目详情


下载文件

下载适合您平台的项目文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

terrycain-metadata-proxy-1.5.0.tar.gz (9.7 kB 查看散列)

上传时间

构建分布

terrycain_metadata_proxy-1.5.0-py3-none-any.whl (10.0 kB 查看散列)

上传时间 Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面