如何在个人计算机上安全地存储 AWS 凭证?
详细:
我们团队中的每个人都需要 AWS 安全凭证来执行管理任务(凭证按角色分开)。这些凭据通常以明文形式存储在磁盘上的某些配置文件中。我认为这是非常不安全的,特别是考虑到凭据分布在团队成员之间,最终以备份方式结束等。
我更喜欢以加密形式存储这些凭据(例如,类似于 ssh 密钥)。有没有一些自动化的方式这样做?或者我是否需要修改一些使用例如 openssl 来加密数据的 bash 脚本?
网络上有很多关于如何保护 EC2 实例上的凭证的信息。甚至还有此Amazon IAM 角色功能,但它也仅适用于 EC2。
在 Windows 10 中,我想知道如何在脚本中判断系统启动是因为它是通过接收 Wake-on-LAN (WoL) 数据包打开的,还是因为按下电源按钮而打开.
我确实找到了Win32_ComputerSystem类的 WakeUpType 属性。这被记录为返回“导致系统启动的事件”。有 9 个可能的返回值,其中之一是“5”(意思是“LAN 远程”)。
不幸的是,在我的系统上,它似乎总是返回“6”(意思是“电源开关”):
PS C:\WINDOWS\system32> echo $(Get-WmiObject -class win32_computersystem).wakeuptype
6
Run Code Online (Sandbox Code Playgroud)
我注意到在使系统进入睡眠状态并使用 WoL 唤醒它后,Windows 会在系统事件日志中发布一个事件,其中包含源“Power-Troubleshooter”和事件 ID 1,其中包含文本:
唤醒源:设备 -Intel(R) 82579V 千兆网络连接
此外,powercfg /lastwake报告 NIC 作为唤醒的原因。因此,至少在从睡眠状态唤醒时,Windows 能够确定它是由于 WoL 数据包而唤醒的,即使在这种情况下 WakeUpType 属性仍然返回“6”(电源开关)。
不幸的是,当系统在 S5 状态下接收到 WoL 数据包时,它会正常启动并启动,但我无法判断它是因为 WoL 启动的。powercfg /lastwake由于按下电源按钮,显示与系统从 S5 启动时完全相同的输出:
C:\WINDOWS\system32>powercfg /lastwake
Wake History Count - 0
Run Code Online (Sandbox Code Playgroud)
我如何从任何电源状态(直到 S5)可靠地判断系统是否因为 WoL 启动/唤醒?
我正在寻找升级服务器并试图找出一个好的计划。
我们目前有4台服务器:
FreeBSD 服务器
~2010 FreeBSD 8.4,32gb 内存,双 Xeon E5520 ZFS(8 个磁盘,镜像对中的 zraid 磁盘,8TB)
服务:
我的计划(基本)
我计划进行服务器升级,让我们从一台主服务器切换到两台服务器,每台服务器都会承担上面列表中的一些服务器职责(并相互复制),这样如果一台服务器出现故障,我可以快速激活第二个的所有功能。就像是:
服务器 1:
服务器 2:
我只运行过裸机,除了在 VirtualBox 上运行 Windows 2k3 之外,我没有使用 VM 的经验。我应该将我的服务器实例作为虚拟机运行吗?我认为这可能会使从崩溃中恢复更容易。总的来说,这看起来是一个好计划吗?
我一直在研究 ixSystems 服务器和戴尔机架硬件,如果这有什么不同的话。(我也从未使用过任何机架安装设备。)
我设置了一个 Puppet Master/Agent,并且已经成功地为 master 上的 agent 签署了证书。但是,当我运行时,puppet agent --test我遇到了如下所示的失败:
Warning: Unable to fetch my node definition, but the agent run will continue:
Warning: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [certificate signature failure for /CN=hostname.domain.com]
Info: Retrieving plugin
Error: /File[/var/lib/puppet/lib]: Failed to generate additional resources using 'eval_generate: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [certificate signature failure for /CN=hostname.domain.com]
Error: /File[/var/lib/puppet/lib]: Could not evaluate: SSL_connect returned=1 errno=0 state=SSLv3 read server …Run Code Online (Sandbox Code Playgroud) Puppet-reports 在以下位置使用了大量磁盘空间:
/var/lib/puppet/reports
/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
假设它将所有报告存储在 MySQL 数据库中,因为两个路径的大小大致相同。该resource_statuses表由行的每个代表在报告文件中的行。
我正在使用 Docker 以 swarm 模式(使用 Docker 17.03.1-ce)进行生产设置。将涉及2个数据中心。在两个数据中心,所有机器在私有网络上都有一个公共 IP 和一个私有(数据中心本地)IP,所以会有 2 个私有网络。
专用网络接口上的网络流量是免费的,而公共接口上的流量不受限制(而且速度较慢),因此在可能的情况下,我更希望网络流量通过专用接口。
现在,据我所知(我认为),集群模式下 Docker 节点之间的所有流量都将通过用于与集群主机通信的相同网络接口,在我的情况下,必须是公共接口才能进行多 DC 网络可能的。然而,大多数预期的流量将在同一个 DC 中的节点之间发生,如果源节点和目标节点碰巧在同一个私有网络上,如果 Docker 能够以某种方式通过我的私有网络路由流量,那就太好了。
恐怕这可能无法开箱即用,因为群主不知道这些专用网络以及节点在其上拥有的 IP。
我能想到的一个解决方案是设置一个 VPN 并在其上部署 swarm,但这会增加额外的复杂性,我更喜欢纯 Docker swarm 解决方案。
更新:正如评论中所建议的,解决方案的基础可能是使用 iptables 将传出流量路由到私有 IP 而不是公共 IP。但是,如果我想这样做,我的下一个问题将是如何管理所有这些规则。在 DC 中有 10 个服务器,我需要 10 * 9 = 90 个服务器来通过专用网络路由所有可能的本地流量。我可以想象,也许存在一些工具可以帮助完成这样的任务,或者我可以创建一个,但也许有一种更简单的方法来做到这一点。
跑步:
- name: get vhosts
command: rabbitmqctl list_vhosts
register: vhosts
changed_when: false
Run Code Online (Sandbox Code Playgroud)
通过发行
sudo ansible-playbook file.yml
Run Code Online (Sandbox Code Playgroud)
结果是:
TASK [030.sensu : get vhosts] **************************************************
fatal: [IP]: FAILED! => {"changed": false, "cmd": "rabbitmqctl list_vhosts",
"failed": true, "msg": "[Errno 2] No such file or directory", "rc": 2}
Run Code Online (Sandbox Code Playgroud)
如果 ansible 在系统本身上运行,则不会发生此错误。
讨论
1. 是否rc缺少命令?
rc以远程方式在本地发出两者会导致:
bash: rc: command not found...
Run Code Online (Sandbox Code Playgroud)
如果这是一个问题,那么在本地运行剧本也会失败。
2. 这是一个已知问题吗?
"No such file or directory" rc ansible centos在互联网上查询导致了这个问答。
根据其中一个答案,该问题是由command. 使用shell …
我们正在开发一个应用程序,该应用程序将在现场部署到各种安装(不是云)。我们的 OEM 合作伙伴要求我们为他们提供 ISO,以便能够快速配置新服务器。我们的应用程序是围绕容器构建的,我们有一个面向互联网的私有注册表设置,能够提取最新的通过构建。我还不确定 OEM 合作伙伴是否能够自己拉取这些映像,因此我们正在研究将 docker 映像与 ISO 一起预打包的可能性,但遇到了一些困难。我们尝试过的一些事情:
systemback - 我们尝试使用我们的首选设置(由我们拥有的 ansible 角色定义)配置新的 ubuntu 安装,然后使用 systemback 捕获结果。重新安装生成的 ISO 后,我们遇到了 docker 错误:Error response from daemon: open /var/lib/docker/aufs/layers/blahblahblah: no such file or directory类似于#22343
chroot jail - 我们再次尝试创建我们的用户,安装 docker,但是在尝试拉取我们的镜像时,我们会遇到:failed to register layer: Error processing tar file(exit status 1): invalid argument不管我们拉的是什么镜像(甚至是官方的 docker ubuntu 镜像,例如)。谷歌对这个错误没有帮助。
RancherOS - 在这里我们找到了预打包 docker 镜像的说明,但没有找到如何将它们与 iso 捆绑在一起。看起来我们的用例与#1449相同,但没有真正的解决方案。
现在我能想到的下一步就是尝试docker save我们的图像并包含带有 ISO 的 tarball,然后在第一次启动 iso 时运行一个脚本来检查 …
目的
目的是禁用每 30 分钟发生一次的自动 Puppet-agent 运行。可以更改时间间隔,但应完全禁用自动 Puppet-agent 运行。
尝试一
根据本文档,应该可以通过配置以下内容来禁用自动 Puppet-agent 运行:
/etc/puppet/puppet.conf
[agent]
daemonize=false
Run Code Online (Sandbox Code Playgroud)
结果是
Notice: Run of Puppet configuration client already in progress;
skipping (/var/lib/puppet/state/agent_catalog_run.lock exists)
Run Code Online (Sandbox Code Playgroud)
如果以 30 分钟的默认运行间隔手动运行 puppet。
尝试二
user@hostname:~$ sudo puppet agent --disable
Run Code Online (Sandbox Code Playgroud)
结果是
user@hostname:~$ sudo puppet agent -t
Notice: Skipping run of Puppet configuration client;
administratively disabled (Reason: 'reason not specified');
Use 'puppet agent --enable' to re-enable.
Run Code Online (Sandbox Code Playgroud)
尝试三
这个文档是在谷歌搜索这个问答的问题后找到的,但提供的信息没有回答这个问题。
ansible ×2
docker ×2
puppet ×2
puppet-agent ×2
bare-metal ×1
credentials ×1
debian ×1
deployment ×1
docker-swarm ×1
freebsd ×1
iso ×1
linux ×1
networking ×1
puppetdb ×1
puppetmaster ×1
security ×1
ssl ×1
upgrade ×1
wake-on-lan ×1
windows-10 ×1