{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "#/components/schemas/AddPermissionRequest",
  "title": "AddPermissionRequest",
  "type": "object",
  "required": [
    "StatementId",
    "Action",
    "Principal"
  ],
  "properties": {
    "StatementId": {
      "allOf": [
        {
          "$ref": "#/components/schemas/StatementId"
        },
        {
          "description": "A statement identifier that differentiates the statement from others in the same policy."
        }
      ]
    },
    "Action": {
      "allOf": [
        {
          "$ref": "#/components/schemas/Action"
        },
        {
          "description": "The action that the principal can use on the function. For example, <code>lambda:InvokeFunction</code> or <code>lambda:GetFunction</code>."
        }
      ]
    },
    "Principal": {
      "allOf": [
        {
          "$ref": "#/components/schemas/Principal"
        },
        {
          "description": "The Amazon Web Service or Amazon Web Services account that invokes the function. If you specify a service, use <code>SourceArn</code> or <code>SourceAccount</code> to limit who can invoke the function through that service."
        }
      ]
    },
    "SourceArn": {
      "allOf": [
        {
          "$ref": "#/components/schemas/Arn"
        },
        {
          "description": "<p>For Amazon Web Services, the ARN of the Amazon Web Services resource that invokes the function. For example, an Amazon S3 bucket or Amazon SNS topic.</p> <p>Note that Lambda configures the comparison using the <code>StringLike</code> operator.</p>"
        }
      ]
    },
    "SourceAccount": {
      "allOf": [
        {
          "$ref": "#/components/schemas/SourceOwner"
        },
        {
          "description": "For Amazon Web Service, the ID of the Amazon Web Services account that owns the resource. Use this together with <code>SourceArn</code> to ensure that the specified account owns the resource. It is possible for an Amazon S3 bucket to be deleted by its owner and recreated by another account."
        }
      ]
    },
    "EventSourceToken": {
      "allOf": [
        {
          "$ref": "#/components/schemas/EventSourceToken"
        },
        {
          "description": "For Alexa Smart Home functions, a token that the invoker must supply."
        }
      ]
    },
    "RevisionId": {
      "allOf": [
        {
          "$ref": "#/components/schemas/String"
        },
        {
          "description": "Update the policy only if the revision ID matches the ID that's specified. Use this option to avoid modifying a policy that has changed since you last read it."
        }
      ]
    },
    "PrincipalOrgID": {
      "allOf": [
        {
          "$ref": "#/components/schemas/PrincipalOrgID"
        },
        {
          "description": "The identifier for your organization in Organizations. Use this to grant permissions to all the Amazon Web Services accounts under this organization."
        }
      ]
    },
    "FunctionUrlAuthType": {
      "allOf": [
        {
          "$ref": "#/components/schemas/FunctionUrlAuthType"
        },
        {
          "description": "The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Security and auth model for Lambda function URLs</a>."
        }
      ]
    }
  }
}