id: aws
name: AWS
version: 1.0.0
description: "Amazon Web Services (EC2, IAM, STS) — cloud containment: describe instances and security groups, authorize/revoke security-group ingress rules, change an instance's security groups (isolate), stop instances, and deactivate a compromised IAM access key. AWS Signature V4 authentication; stdlib-only, no extra Python dependencies."
changelog: "1.0.0 — Initial release: EC2 describe instances/security-groups, authorize/revoke ingress, modify instance security groups, stop instances; IAM list/update access keys; STS caller identity."
category: cloud

# Per-instance configuration. Requests are signed with AWS Signature V4.
# Use an IAM user/role access key with EC2 + IAM permissions. session_token is
# only needed for temporary (STS) credentials.
config_schema:
  properties:
    access_key_id:
      type: string
      description: "AWS access key ID"
    secret_access_key:
      type: string
      description: "AWS secret access key"
      x-soar-sensitive: true
    region:
      type: string
      description: "Default AWS region (e.g. eu-west-1)"
      default: "us-east-1"
    session_token:
      type: string
      description: "Optional STS session token (for temporary credentials)"
      x-soar-sensitive: true
  required:
    - access_key_id
    - secret_access_key

commands:
  - id: describe_instances
    name: aws-describe-instances
    description: "Describe EC2 instances (optionally a single instance by ID)."
    risk: read
    inputs_schema:
      properties:
        instance_id: { type: string, description: "Optional instance ID to fetch a single instance" }
        region: { type: string, description: "Region override" }
      required: []
    outputs_schema: { properties: {} }
  - id: describe_security_groups
    name: aws-describe-security-groups
    description: "Describe EC2 security groups (optionally a single group by ID)."
    risk: read
    inputs_schema:
      properties:
        group_id: { type: string, description: "Optional security group ID" }
        region: { type: string, description: "Region override" }
      required: []
    outputs_schema: { properties: {} }
  - id: authorize_security_group_ingress
    name: aws-authorize-security-group-ingress
    description: "Add an inbound rule to a security group."
    inputs_schema:
      properties:
        group_id: { type: string, description: "Security group ID" }
        protocol: { type: string, description: "IP protocol (tcp, udp, icmp, or -1 for all)" }
        from_port: { type: number, description: "Start port" }
        to_port: { type: number, description: "End port" }
        cidr: { type: string, description: "Source CIDR (e.g. 203.0.113.0/24)" }
        region: { type: string, description: "Region override" }
      required: [group_id, protocol, cidr]
    outputs_schema: { properties: {} }
  - id: revoke_security_group_ingress
    name: aws-revoke-security-group-ingress
    description: "Remove an inbound rule from a security group (containment)."
    inputs_schema:
      properties:
        group_id: { type: string, description: "Security group ID" }
        protocol: { type: string, description: "IP protocol (tcp, udp, icmp, or -1 for all)" }
        from_port: { type: number, description: "Start port" }
        to_port: { type: number, description: "End port" }
        cidr: { type: string, description: "Source CIDR to revoke" }
        region: { type: string, description: "Region override" }
      required: [group_id, protocol, cidr]
    outputs_schema: { properties: {} }
  - id: modify_instance_security_groups
    name: aws-modify-instance-security-groups
    description: "Replace the security groups attached to an instance (e.g. move it to an isolation group)."
    inputs_schema:
      properties:
        instance_id: { type: string, description: "Instance ID" }
        group_ids: { type: string, description: "Comma-separated security group IDs to set" }
        region: { type: string, description: "Region override" }
      required: [instance_id, group_ids]
    outputs_schema: { properties: {} }
  - id: stop_instances
    name: aws-stop-instances
    description: "Stop one or more EC2 instances."
    inputs_schema:
      properties:
        instance_ids: { type: string, description: "Comma-separated instance IDs" }
        force: { type: boolean, description: "Force stop (default false)" }
        region: { type: string, description: "Region override" }
      required: [instance_ids]
    outputs_schema: { properties: {} }
  - id: list_access_keys
    name: aws-list-access-keys
    description: "List a user's IAM access keys."
    risk: read
    inputs_schema:
      properties:
        user_name: { type: string, description: "IAM user name (omit to use the calling user)" }
      required: []
    outputs_schema: { properties: {} }
  - id: update_access_key
    name: aws-update-access-key
    description: "Activate or deactivate an IAM access key (deactivate to contain a compromised key)."
    inputs_schema:
      properties:
        access_key_id: { type: string, description: "The access key ID to update" }
        status: { type: string, description: "Active or Inactive" }
        user_name: { type: string, description: "IAM user name (omit to use the calling user)" }
      required: [access_key_id, status]
    outputs_schema: { properties: {} }

  - id: test_connection
    name: aws-test-connection
    description: "Verify credentials via STS GetCallerIdentity (used by the Test button)."
    risk: read
    inputs_schema:
      properties: {}
      required: []
    outputs_schema: { properties: {} }
