AWS Gov Cloud 应用程序负载均衡器使用 Cognito 验证规则

AWS Gov Cloud application load balancer authenticate rule with Cognito

在 AWS 的商业云 (us-west-2) 中,我可以在我的 HTTPS (443) 侦听器上创建一个 ALB 侦听器规则,以首先向 Cognito 用户池(使用 OIDC 集成 Azure AD)进行身份验证,然后转发身份验证成功后到 Ec2 实例。

我在 gov cloud (gov-west-1) 中尝试了相同的操作,但没有选项可以在使用 Cognito 的负载平衡侦听器规则中进行身份验证,只有纯 OIDC 身份验证。

政府云中是否存在此功能?

我专门讨论图中显示的附加“插入规则”UI。在我的政府云帐户 (gov-west-2) 中,“Amazon Cognito”不是“1.Authentucate”下拉列表中的选项。唯一存在的选项是“OIDC”

遗憾的是,此功能在 GovCloud 中尚不可用(请参阅 this doc on govcloud-differences),但您可以通过设置指向您的 Cognito 用户池(能够充当标准 OIDC 提供商)。

此身份验证操作要求您提供 OIDC 端点,这些端点在以下文档页面中针对 AWS Cognito 进行了描述:https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html

这确实需要您设置一个用户池应用程序客户端,配置一个客户端密码,以及一个用户池域。

最后,确保为 Cognito 客户端配置 CallbackURL,以允许重定向回负载均衡器上的 /oauth2/idpresponse 端点;例如对于位于 <DNS> 的负载均衡器,使用 CallbackURL:https://DNS/oauth2/idpresponse.

配置身份验证操作时,您需要提供以下详细信息:

  • 验证OIDC
  • 发行人https://cognito-idp.us-gov-west-1.amazonaws.com/us-gov-west-1_abc123
  • 授权端点https://my-cognito-domain.auth-fips.us-gov-west-1.amazoncognito.com/oauth2/authorize
  • 令牌端点https://my-cognito-domain.auth-fips.us-gov-west-1.amazoncognito.com/oauth2/token
  • 用户信息端点https://my-cognito-domain.auth-fips.us-gov-west-1.amazoncognito.com/oauth2/userInfo
  • 客户端 IDabcdef123456
  • 客户端密码hunter7

示例 CloudFormation 片段如下:

Parameters:
  SessionTimeout:
    Description: The maximum duration of the authentication session, in seconds.
    Type: Number
    Default: 604800  # One day
    MinValue: 60
    MaxValue: 604800
  CognitoClientID:
    Description: Client ID from pre-configured cognito environment
    Type: String
    NoEcho: true
  CognitoClientSecret:
    Description: Client Secret from pre-configured cognito environment
    Type: String
    NoEcho: true
  CognitoProviderUrl:
    Description: Provider URL from pre-configured cognito environment
    Type: String
  CognitoDomainName:
    Description: Domain Name from pre-configured cognito environment
    Type: String
  TargetGroupArn:
    Description: ARN of the Target Group for forwarding traffic
    Type: String

Conditions:
  IsGovCloud: !Not [!Equals ['aws', !Ref AWS::Partition]]

Resources:
  AuthenticatedListenerRule:
    Type: AWS::ElasticLoadBalancingV2::ListenerRule
    Properties:
      Actions:
        - Type: authenticate-oidc
          Order: 1
          AuthenticateOidcConfig:
            ClientId: !Ref CognitoClientID
            ClientSecret: !Ref CognitoClientSecret
            Issuer: !Ref CognitoProviderUrl
            UserInfoEndpoint:
              Fn::Sub:
                - https://${CognitoDomainName}.${AuthSuffix}.${AWS::Region}.amazoncognito.com/oauth2/userInfo
                - AuthSuffix: !If [IsGovCloud, "auth-fips", "auth"]
            AuthorizationEndpoint:
              Fn::Sub:
                - https://${CognitoDomainName}.${AuthSuffix}.${AWS::Region}.amazoncognito.com/oauth2/authorize
                - AuthSuffix: !If [IsGovCloud, "auth-fips", "auth"]
            TokenEndpoint:
              Fn::Sub:
                - https://${CognitoDomainName}.${AuthSuffix}.${AWS::Region}.amazoncognito.com/oauth2/token
                - AuthSuffix: !If [IsGovCloud, "auth-fips", "auth"]
            OnUnauthenticatedRequest: authenticate
            Scope: openid
            SessionTimeout: !Ref SessionTimeout
        - Type: forward
          Order: 2
          TargetGroupArn:
            Ref: TargetGroup

祝你好运,希望 GovCloud 功能尽快得到扩展