如何在AWS Security Group中仅放行指定IP及AWS OpenID Connect认证请求以访问自托管GitLab实例
如何在AWS Security Group中仅放行指定IP及AWS OpenID Connect认证请求以访问自托管GitLab实例
嘿,这个场景我太熟悉了——既要守好安全组的大门,又得让AWS的OIDC认证能正常工作,确实有点头疼。不过有几个靠谱的方案可以解决,咱们一个个说:
方案一:用AWS前缀列表(Prefix Lists)放行IAM服务IP
AWS会维护各个服务的公网IP范围,并且提供前缀列表来动态引用这些范围,不用你手动跟踪CIDR变化。针对你的情况,IAM服务发起OIDC认证请求的IP都来自对应区域的IAM服务IP池,你可以直接在EC2安全组的入站规则里添加:
- 端口:443
- 源:前缀列表
com.amazonaws.<你的GitLab所在区域>.iam
再加上你自己的几个手选IP,这样就只有你的IP和AWS的IAM服务能访问GitLab的443端口了。
这个方案的好处是完全不用手动维护IP范围,AWS会自动更新前缀列表里的内容,省心不少。
方案二:用CloudFront做反向代理+WAF控制访问
如果担心直接放IAM服务IP范围还是太宽泛,或者想对访问做更细粒度的控制,可以用CloudFront来中转流量:
- 给你的GitLab实例创建CloudFront分发,把源指向GitLab的公网域名/IP
- 在EC2安全组的入站规则里,只放行CloudFront的IP范围(用前缀列表
com.amazonaws.<你的区域>.cloudfront)访问443端口 - 给CloudFront配置WAF规则:
- 允许你自己的手选IP访问所有GitLab路径
- 只允许AWS IAM服务的IP访问OIDC相关的端点(比如
/.well-known/openid-configuration、/oauth2/jwks这些)
这样一来,所有流量都得经过CloudFront,WAF帮你把非授权的请求挡在门外,安全组也不用直接暴露给公网。
方案三:把OIDC元数据同步到S3,让AWS访问S3而不是GitLab
这个方案更彻底,直接让AWS不用访问你的GitLab实例:
- 把GitLab的OIDC配置文件(
/.well-known/openid-configuration)和JWKS密钥文件(/oauth2/jwks)下载下来,上传到另一个账号的S3桶里 - 在IAM的身份提供者配置里,把OIDC的端点改成S3的静态网站URL
- 写个简单的脚本或者用GitLab CI,定期同步GitLab的这两个文件到S3(比如每天一次,或者在GitLab密钥更新时触发)
这样AWS的OIDC认证请求会直接访问S3,你的GitLab安全组根本不需要开额外的端口给AWS,完全隔绝了外部访问风险。
不过这个方案需要维护同步机制,适合对安全要求极高的场景。
备注:内容来源于stack exchange,提问作者Escualo
相关产品推荐
相关产品推荐

