英文:
AWS CDK: NaN.NaN.NaN.NaN is not a valid IP Address when creating Client VPN Endpoint
问题
当尝试创建客户端 VPN 资源时,我遇到以下错误:
Error: NaN.NaN.NaN.NaN 不是有效的 IP 地址
at NetworkUtils.numToIp (C:\Users\user\AppData\Local\Temp\jsii-kernel-mj0Ij1\node_modules\aws-cdk-lib\aws-ec2\lib\network-util.js:80:19)
at CidrBlock.minIp (C:\Users\user\AppData\Local\Temp\jsii-kernel-mj0Ij1\node_modules\aws-cdk-lib\aws-ec2\lib\network-util.js:202:29)
at new CidrBlock (C:\Users\user\AppData\Local\Temp\jsii-kernel-mj0Ij1\node_modules\aws-cdk-lib\aws-ec2\lib\network-util.js:189:29)
at new ClientVpnEndpoint (C:\Users\user\AppData\Local\Temp\jsii-kernel-mj0Ij1\node_modules\aws-cdk-lib\aws-ec2\lib\client-vpn-endpoint.js:133:29)
上述异常是以下异常的直接原因:
Traceback (most recent call last):
File "C:\Users\user\cdk\networking\client_vpn_stack.py", line 95, in __init__
client_vpn = ec2.ClientVpnEndpoint(
^^^^^^^^^^^^^^^^^^^^^^
这是代码(所有其他资源,如 VPC,都在代码中较早地创建):
from aws_cdk import aws_ec2 as ec2
client_vpn = ec2.ClientVpnEndpoint(
self,
id='ClientVPNEndpoint',
description=f'Client VPN in VPC - {vpc.attr_vpc_id}',
# Networking
split_tunnel=True,
cidr='172.16.0.0/16',
vpc=vpc,
port=ec2.VpnPort.HTTPS,
session_timeout=ec2.ClientVpnSessionTimeout.TEN_HOURS,
# Security
server_certificate_arn=f'arn:aws:acm:eu-west-1:{self.account}:certificate/{certificate_id}',
security_groups=[sg],
user_based_authentication=ec2.ClientVpnUserBasedAuthentication.federated(
saml_provider=saml_provider
)
)
我能想到的唯一 IP 地址是 CIDR,但根据文档,它们期望的 CIDR 块格式应为 X.X.X.X/X。
我尝试用其他值替换 CIDR,但没有帮助...
有人可以帮我看看这里缺少什么吗?
提前感谢。
英文:
When trying to create a client vpn resource, I get the following error:
Error: NaN.NaN.NaN.NaN is not a valid IP Address
at NetworkUtils.numToIp (C:\Users\user\AppData\Local\Temp\jsii-kernel-mj0Ij1\node_modules\aws-cdk-lib\aws-ec2\lib\network-util.js:80:19)
at CidrBlock.minIp (C:\Users\user\AppData\Local\Temp\jsii-kernel-mj0Ij1\node_modules\aws-cdk-lib\aws-ec2\lib\network-util.js:202:29)
at new CidrBlock (C:\Users\user\AppData\Local\Temp\jsii-kernel-mj0Ij1\node_modules\aws-cdk-lib\aws-ec2\lib\network-util.js:189:29)
at new ClientVpnEndpoint (C:\Users\user\AppData\Local\Temp\jsii-kernel-mj0Ij1\node_modules\aws-cdk-lib\aws-ec2\lib\client-vpn-endpoint.js:133:29)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\user\cdk\networking\client_vpn_stack.py", line 95, in __init__
client_vpn = ec2.ClientVpnEndpoint(
^^^^^^^^^^^^^^^^^^^^^^
This is the code (all the other resources such as the VPC are created earlier in the code):
from aws_cdk import aws_ec2 as ec2
client_vpn = ec2.ClientVpnEndpoint(
self,
id='ClientVPNEndpoint',
description=f'Client VPN in VPC - {vpc.attr_vpc_id}',
# Networking
split_tunnel=True,
cidr='172.16.0.0/16',
vpc=vpc,
port=ec2.VpnPort.HTTPS,
session_timeout=ec2.ClientVpnSessionTimeout.TEN_HOURS,
# Security
server_certificate_arn=f'arn:aws:acm:eu-west-1:{self.account}:certificate/{certificate_id}',
security_groups=[sg],
user_based_authentication=ec2.ClientVpnUserBasedAuthentication.federated(
saml_provider=saml_provider
)
)
The only IP I can think of is the cidr but from the documentation they except a cidr block of the format X.X.X.X/X.
I tried to replace the cidr with other values, but nothing helped...
Can anyone help me what is missing here?
Thanks in advance.
Edit
VPC range: 10.1.0.0/16 (defined in another stack but passed by value in the same app)
I tried using /22 and /16 for the client VPN CIDR block, this didn't change anything.
答案1
得分: 0
我的错误...
使用的vpc
变量的类型为ec2.CfnVPC
。编译器找不到ec2.IVpc
中包含的必需字段,并返回错误。
虽然我应该更仔细地阅读文档,但错误消息并不十分清晰。
这是文档中的构造函数:
class ClientVpnEndpoint(
scope: Construct,
id: str,
*,
vpc: IVpc,
cidr: str,
server_certificate_arn: str,
authorize_all_users_to_vpc_cidr: bool | None = None,
client_certificate_arn: str | None = None,
client_connection_handler: IClientVpnConnectionHandler | None = None,
client_login_banner: str | None = None,
description: str | None = None,
dns_servers: Sequence[str] | None = None,
logging: bool | None = None,
log_group: ILogGroup | None = None,
log_stream: ILogStream | None = None,
port: VpnPort | None = None,
security_groups: Sequence[ISecurityGroup] | None = None,
self_service_portal: bool | None = None,
session_timeout: ClientVpnSessionTimeout | None = None,
split_tunnel: bool | None = None,
transport_protocol: TransportProtocol | None = None,
user_based_authentication: ClientVpnUserBasedAuthentication | None = None,
vpc_subnets: SubnetSelection | Dict[str, Any] | None = None
)
如果有兴趣,以下是完整的堆栈:
from aws_cdk import (
Tags,
aws_ec2 as ec2,
aws_iam as iam
)
# Client VPN Endpoint
saml_provider = iam.SamlProvider.from_saml_provider_arn(
self,
id='IdP',
saml_provider_arn=f'arn:aws:iam::{self.account}:saml-provider/{identity_provider_id}'
)
client_vpn = ec2.ClientVpnEndpoint(
self,
id='ClientVpn',
description=f'Client VPN Endpoint',
# Networking
vpc=vpc,
vpc_subnets=ec2.SubnetSelection(
subnets=clientvpn_subnets
),
cidr=clientvpn_cidr_block,
port=ec2.VpnPort.HTTPS,
split_tunnel=True,
transport_protocol=ec2.TransportProtocol.TCP,
session_timeout=ec2.ClientVpnSessionTimeout.TEN_HOURS,
# Security
server_certificate_arn=f'arn:aws:acm:eu-west-1:{self.account}:certificate/{certificate_id}',
security_groups=[sg],
user_based_authentication=ec2.ClientVpnUserBasedAuthentication.federated(
saml_provider=saml_provider
),
authorize_all_users_to_vpc_cidr=False,
# Logging
logging=True,
log_group=log_group,
log_stream=log_stream
)
client_vpn.add_authorization_rule(
id='AuthorizationRule',
description='Authorize all private ip range to everyone',
cidr='10.0.0.0/8'
)
英文:
My bad...
The vpc
variable in use was of type ec2.CfnVPC
. The compiler couldn't find required fields contained in ec2.IVpc
and returned an error.
Although I should have read the documentation more carefully, the error message wasn't quite clear.
This is the constructor from the documentation:
> python
> class ClientVpnEndpoint(
> scope: Construct,
> id: str,
> *,
> vpc: IVpc,
> cidr: str,
> server_certificate_arn: str,
> authorize_all_users_to_vpc_cidr: bool | None = None,
> client_certificate_arn: str | None = None,
> client_connection_handler: IClientVpnConnectionHandler | None = None,
> client_login_banner: str | None = None,
> description: str | None = None,
> dns_servers: Sequence[str] | None = None,
> logging: bool | None = None,
> log_group: ILogGroup | None = None,
> log_stream: ILogStream | None = None,
> port: VpnPort | None = None,
> security_groups: Sequence[ISecurityGroup] | None = None,
> self_service_portal: bool | None = None,
> session_timeout: ClientVpnSessionTimeout | None = None,
> split_tunnel: bool | None = None,
> transport_protocol: TransportProtocol | None = None,
> user_based_authentication: ClientVpnUserBasedAuthentication | None = None,
> vpc_subnets: SubnetSelection | Dict[str, Any] | None = None
> )
>
This is the full stack if someone is interested:
from aws_cdk import (
Tags,
aws_ec2 as ec2,
aws_iam as iam
)
# Client VPN Endpoint
saml_provider = iam.SamlProvider.from_saml_provider_arn(
self,
id='IdP',
saml_provider_arn=f'arn:aws:iam::{self.account}:saml-provider/{identity_provider_id}'
)
client_vpn = ec2.ClientVpnEndpoint(
self,
id='ClientVpn',
description=f'Client VPN Endpoint',
# Networking
vpc=vpc,
vpc_subnets=ec2.SubnetSelection(
subnets=clientvpn_subnets
),
cidr=clientvpn_cidr_block,
port=ec2.VpnPort.HTTPS,
split_tunnel=True,
transport_protocol=ec2.TransportProtocol.TCP,
session_timeout=ec2.ClientVpnSessionTimeout.TEN_HOURS,
# Security
server_certificate_arn=f'arn:aws:acm:eu-west-1:{self.account}:certificate/{certificate_id}',
security_groups=[sg],
user_based_authentication=ec2.ClientVpnUserBasedAuthentication.federated(
saml_provider=saml_provider
),
authorize_all_users_to_vpc_cidr=False,
# Logging
logging=True,
log_group=log_group,
log_stream=log_stream
)
client_vpn.add_authorization_rule(
id='AuthorizationRule',
description='Authorize all private ip range to everyone',
cidr='10.0.0.0/8'
)
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论