元数据安全最佳实践
禁用实例元数据(购买ECS时)
当ECS应用不需要访问元数据时,可通过禁用元数据避免不必要的安全风险。
禁用实例元数据(使用ECS时)
当ECS应用不需要访问元数据时,可通过禁用元数据避免不必要的安全风险。
限制委托配置范围
ECS可通过配置委托实现通过元数据获取临时凭证,详细操作,请参见在ECS上通过委托的临时访问密钥访问其他云服务。
由于凭证泄露会导致安全风险,需要严格控制委托的配置范围:
- 当业务不需要获取临时凭证时,不配置实例委托。
- 当业务有获取临时凭证的诉求时,遵循权限最小化原则,对委托只配置必要的权限。
使用V2加固模式访问元数据
V2加固模式有助于预防绝大多数SSRF攻击元数据的场景。
但是由于此种模式下传统模式会被拒绝访问,所以需要按照实例粒度开启此能力:
- 操作系统内访问元数据的服务或应用,需要修改为适配V2加固模式的调用方式。
- 参考配置实例元数据选项,切换实例的“元数据访问方式”为“仅V2(Token)”。
ECS操作系统使用防火墙限制应用访问元数据
如果元数据中包含了敏感数据,您可以通过使用本地防火墙规则,以操作系统用户粒度实现对实例元数据的访问限制。
防火墙配置示例如下所示:
- Windows
如果您不希望管理员之外的用户访问实例自定义数据,请以管理员身份开启防火墙后,在PowerShell中执行下面的命令,限制非管理员用户访问实例自定义数据:
PS C:\>$RejectPrincipal = New-Object -TypeName System.Security.Principal.NTAccount ("Everyone")
PS C:\>$RejectPrincipalSID = $RejectPrincipal.Translate([System.Security.Principal.SecurityIdentifier]).Value
PS C:\>$ExceptPrincipal = New-Object -TypeName System.Security.Principal.NTAccount ("Administrator")
PS C:\>$ExceptPrincipalSID = $ExceptPrincipal.Translate([System.Security.Principal.SecurityIdentifier]).Value
PS C:\>$PrincipalSDDL = "O:LSD:(D;;CC;;;$ExceptPrincipalSID)(A;;CC;;;$RejectPrincipalSID)"
PS C:\>New-NetFirewallRule -DisplayName "Reject metadata service for $($RejectPrincipal.Value), exception: $($ExceptPrincipal.Value)" -Action block -Direction out -Protocol TCP -RemoteAddress 169.254.169.254 -LocalUser $PrincipalSDDL
- Linux
如果您不希望root之外的用户访问自定义实例自定义数据,请以root用户权限执行下面的命令,限制非root用户访问自定义实例自定义数据:
iptables --append OUTPUT --proto tcp --destination 169.254.169.254 --match owner ! --uid-owner root --jump REJECT