> ## Documentation Index
> Fetch the complete documentation index at: https://gcore.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Create security group

> Creates a new security group with the specified configuration.
If no egress rules are provided, default set of egress rules will be applied
If rules are explicitly set to empty, no rules will be created.



## OpenAPI

````yaml /api-reference/services_documented/cloud_api.yaml post /cloud/v2/security_groups/{project_id}/{region_id}
openapi: 3.1.0
info:
  title: Gcore OpenAPI – Cloud API
  description: >-
    This OpenAPI is an aggregated OpenAPI specification that unifies all Gcore
    products into a single file. It covers Cloud, CDN, DNS, WAAP, DDoS
    Protection, Object Storage, Streaming, and FastEdge services.
  version: '2026-05-15T06:37:28.230198+00:00'
servers:
  - url: https://api.gcore.com
security:
  - APIKey: []
tags:
  - name: Bare Metal
    x-displayName: Bare Metal
  - name: Container as a Service
    x-displayName: Container as a Service
  - name: Cost Reports
    x-displayName: Cost Reports
  - name: DDoS Protection
    x-displayName: DDoS Protection
  - name: Everywhere Inference
    x-displayName: Everywhere Inference
  - name: Everywhere Inference Apps
    x-displayName: Everywhere Inference Apps
  - name: File Shares
    x-displayName: File Shares
  - name: Floating IPs
    x-displayName: Floating IPs
  - name: Function as a Service
    x-displayName: Function as a Service
  - name: GPU Bare Metal
    x-displayName: GPU Bare Metal
  - name: GPU Virtual
    x-displayName: GPU Virtual
  - name: IP Ranges
    x-displayName: IP Ranges
  - name: Images
    x-displayName: Images
  - name: Instances
    x-displayName: Instances
  - name: Load Balancers
    x-displayName: Load Balancers
  - name: Logging
    x-displayName: Logging
  - name: Managed Kubernetes
    x-displayName: Managed Kubernetes
  - name: Managed PostgreSQL
    x-displayName: Managed PostgreSQL
  - name: Networks
    x-displayName: Networks
  - name: Placement Groups
    x-displayName: Placement Groups
  - name: Projects
    x-displayName: Projects
  - name: Quotas
    x-displayName: Quotas
  - name: Regions
    x-displayName: Regions
  - name: Registry
    x-displayName: Registry
  - name: Reservations
    x-displayName: Reservations
  - name: Reserved IPs
    x-displayName: Reserved IPs
  - name: Routers
    x-displayName: Routers
  - name: SSH Keys
    x-displayName: SSH Keys
  - name: Secrets
    x-displayName: Secrets
  - name: Security Groups
    x-displayName: Security Groups
  - name: Snapshot Schedules
    x-displayName: Snapshot Schedules
  - name: Snapshots
    x-displayName: Snapshots
  - name: Tasks
    x-displayName: Tasks
  - name: User Actions
    x-displayName: User Actions
  - name: User Role Assignments
    x-displayName: User Role Assignments
  - name: Volumes
    x-displayName: Volumes
paths:
  /cloud/v2/security_groups/{project_id}/{region_id}:
    post:
      tags:
        - Security Groups
      summary: Create security group
      description: >-
        Creates a new security group with the specified configuration.

        If no egress rules are provided, default set of egress rules will be
        applied

        If rules are explicitly set to empty, no rules will be created.
      operationId: SecurityGroupViewSetV2.post
      parameters:
        - in: path
          name: project_id
          required: true
          description: Project ID
          schema:
            description: Project ID
            example: 1
            examples:
              - 1
            title: Project Id
            type: integer
        - in: path
          name: region_id
          required: true
          description: Region ID
          schema:
            description: Region ID
            example: 1
            examples:
              - 1
            title: Region Id
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSecurityGroupSerializerV2'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskIDsSerializer'
      x-codeSamples:
        - lang: Python
          source: |-
            import os
            from gcore import Gcore

            client = Gcore(
                api_key=os.environ.get("GCORE_API_KEY"),  # This is the default and can be omitted
            )
            task_id_list = client.cloud.security_groups.create(
                project_id=1,
                region_id=1,
                name="my_security_group",
            )
            print(task_id_list.tasks)
        - lang: Go
          source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/G-Core/gcore-go\"\n\t\"github.com/G-Core/gcore-go/cloud\"\n\t\"github.com/G-Core/gcore-go/option\"\n)\n\nfunc main() {\n\tclient := gcore.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\ttaskIDList, err := client.Cloud.SecurityGroups.New(context.TODO(), cloud.SecurityGroupNewParams{\n\t\tProjectID: gcore.Int(1),\n\t\tRegionID:  gcore.Int(1),\n\t\tName:      \"my_security_group\",\n\t})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", taskIDList.Tasks)\n}\n"
components:
  schemas:
    CreateSecurityGroupSerializerV2:
      properties:
        description:
          description: Security group description
          example: My security group description
          examples:
            - My security group description
          title: Description
          type: string
        name:
          description: Security group name
          example: my_security_group
          examples:
            - my_security_group
          pattern: ^[a-zA-Z0-9][a-zA-Z 0-9._\-]{1,61}[a-zA-Z0-9._]$
          title: Name
          type: string
        rules:
          description: Security group rules
          items:
            $ref: '#/components/schemas/CreateSecurityGroupRuleSerializerV2'
          title: Rules
          type: array
        tags:
          $ref: '#/components/schemas/CreateTagsSerializer'
          description: >-
            Key-value tags to associate with the resource. A tag is a key-value
            pair that can be associated with a resource, enabling efficient
            filtering and grouping for better organization and management. Both
            tag keys and values have a maximum length of 255 characters. Some
            tags are read-only and cannot be modified by the user. Tags are also
            integrated with cost reports, allowing cost data to be filtered
            based on tag keys or values.
          examples:
            - my-tag: my-tag-value
          x-stainless-terraform-configurability: computed_optional
      required:
        - name
      title: CreateSecurityGroupSerializerV2
      type: object
    TaskIDsSerializer:
      properties:
        tasks:
          description: >-
            List of task IDs representing asynchronous operations. Use these IDs
            to monitor operation progress:

            - `GET /v1/tasks/{task_id}` - Check individual task status and
            details

            Poll task status until completion (`FINISHED`/`ERROR`) before
            proceeding with dependent operations.
          example:
            - d478ae29-dedc-4869-82f0-96104425f565
          examples:
            - - d478ae29-dedc-4869-82f0-96104425f565
          items:
            type: string
          title: Tasks
          type: array
      required:
        - tasks
      title: TaskIDsSerializer
      type: object
    CreateSecurityGroupRuleSerializerV2:
      properties:
        description:
          description: Rule description
          example: Some description
          examples:
            - Some description
          maxLength: 255
          title: Description
          type: string
        direction:
          description: >-
            Ingress or egress, which is the direction in which the security
            group is applied
          enum:
            - egress
            - ingress
          example: ingress
          examples:
            - ingress
          title: Direction
          type: string
        ethertype:
          description: Ether type
          enum:
            - IPv4
            - IPv6
          example: IPv4
          examples:
            - IPv4
          title: Ethertype
          type: string
        port_range_max:
          anyOf:
            - maximum: 65535
              minimum: 0
              type: integer
            - type: 'null'
          description: >-
            The maximum port number in the range that is matched by the security
            group rule
          examples:
            - 80
          title: Port Range Max
        port_range_min:
          anyOf:
            - maximum: 65535
              minimum: 0
              type: integer
            - type: 'null'
          description: >-
            The minimum port number in the range that is matched by the security
            group rule
          examples:
            - 80
          title: Port Range Min
        protocol:
          anyOf:
            - $ref: '#/components/schemas/SecurityGroupProtocolEnumV2'
            - type: 'null'
          description: Protocol. Use null for all protocols.
          examples:
            - tcp
        remote_group_id:
          description: The remote group UUID to associate with this security group
          example: 00000000-0000-4000-8000-000000000000
          examples:
            - 00000000-0000-4000-8000-000000000000
          format: uuid4
          title: Remote Group Id
          type: string
        remote_ip_prefix:
          anyOf:
            - format: ipvanynetwork
              type: string
            - type: 'null'
          description: The remote IP prefix that is matched by this security group rule
          examples:
            - 10.0.0.0/8
          title: Remote Ip Prefix
      required:
        - direction
      title: CreateSecurityGroupRuleSerializerV2
      type: object
    CreateTagsSerializer:
      description: >-
        A tag is a key-value pair that can be associated with a resource,

        enabling efficient filtering and grouping for better organization and
        management.

        Some tags are read-only and cannot be modified by the user.

        Tags are also integrated with cost reports, allowing cost data to be
        filtered based on tag keys or values.
      patternProperties:
        ^[^\s=]+$:
          description: >-
            Tag value. Maximum 255 characters. Cannot contain tabs, newlines,
            empty string or start/end with whitespace.
          example: my-tag-value
          examples:
            - my-tag-value
          maxLength: 255
          minLength: 1
          pattern: ^[^ \t\n\r\f\v]([^\t\n\r\f\v]*[^ \t\n\r\f\v])?$
          type: string
      propertyNames:
        description: >-
          Tag key. Maximum 255 characters. Cannot contain spaces, tabs,
          newlines, empty string or '=' character.
        examples:
          - my-tag
        maxLength: 255
        minLength: 1
      title: CreateTagsSerializer
      type: object
    SecurityGroupProtocolEnumV2:
      description: V2 protocol enum without 'any'. Use null for all protocols instead.
      enum:
        - ah
        - dccp
        - egp
        - esp
        - gre
        - icmp
        - igmp
        - ipencap
        - ipip
        - ipv6-encap
        - ipv6-frag
        - ipv6-icmp
        - ipv6-nonxt
        - ipv6-opts
        - ipv6-route
        - ospf
        - pgm
        - rsvp
        - sctp
        - tcp
        - udp
        - udplite
        - vrrp
      title: SecurityGroupProtocolEnumV2
      type: string
  securitySchemes:
    APIKey:
      description: >-
        API key for authentication. Make sure to include the word `apikey`,
        followed by a single space and then your token.

        Example: `apikey 1234$abcdef`
      type: apiKey
      in: header
      name: Authorization

````