मैं चाहता हूं कि उपयोगकर्ता पूरी तरह से योग्य डोमेन नाम (एफक्यूडीएन) में पास हों, जो जरूरी नहीं कि एडब्ल्यूएस क्लाउड का हिस्सा हो। मैं एक एफक्यूडीएन से अधिक उपयोगकर्ता के अनुकूल होने का अनुरोध कर रहा हूं (मुझे पता है कि एक आईपी मांगने से यह बहुत आसान हो जाएगा)। मैं इस एफक्यूडीएन को लेना चाहता हूं, इसके आईपी की गणना करना चाहता हूं, और उस आईपी का उपयोग सुरक्षा समूह में सिड्रिप संपत्ति में प्रवेश करना चाहता हूं।

मैं आईपी की गणना कैसे करूं?

मेरा पैरामीटर

Parameters:
  FQDN: 
    Type: String   #Pass in FQDN as a String
    Description: The Fully Qualified Domain Name (FQDN) of your server

मेरा सुरक्षा समूह

SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    DependsOn: Subnet
    Properties:
      GroupDescription: Security Group governing ingress and egress rules.
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 8443
          ToPort: 8443
          CidrIp: <IP of FQDN>/32
0
Yo.I 15 अप्रैल 2020, 21:03

1 उत्तर

सबसे बढ़िया उत्तर

आप लैम्ब्डा-समर्थित कस्टम संसाधन का उपयोग करके इसे प्राप्त कर सकते हैं, लैम्ब्डा FQDN पैरामीटर में ले जाएगा, आईपी निर्धारित करेगा और फिर इसे सुरक्षा समूह संसाधन में संदर्भित करने के लिए वापस कर देगा।

एक उदाहरण के रूप में, यहाँ CloudFormation कैसे दिख सकता है (इस विशेष उदाहरण के लिए SAM का उपयोग करके):

Transform: AWS::Serverless-2016-10-31

Parameters:
  FQDN:
    Type: String

Resources:
  GetIpFromFqdnFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: main.handler
      Runtime: python3.7
      CodeUri: ./

  GetIpFromFqdn:
    Type: Custom::GetIpFromFqdn
    Properties:
      ServiceToken: !GetAtt GetIpFromFqdnFunction.Arn
      FQDN: !Ref FQDN

  SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: SG allowing IP from given FQDN
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: !Sub ${GetIpFromFqdn}/32

और लैम्ब्डा घटनाओं को संभालने के लिए क्रेल्पर का उपयोग करके कुछ इस तरह दिख सकता है

from crhelper import CfnResource
import socket

helper = CfnResource()

def handler(event, context):
    helper(event, context)


@helper.create
@helper.update
def get_ip_from_fqdn(event, _):
    fqdn = event['ResourceProperties']['FQDN']
    ip = socket.gethostbyname(fqdn)

    return ip


@helper.delete
def no_op(_, _):
    pass
0
ljones92 15 अप्रैल 2020, 22:56