Skip to main content
Glama
localstack
by localstack
iam-policy.logic.test.ts1.75 kB
import { generateIamPolicy, deduplicatePermissions } from "./iam-policy.logic"; import type { LogEntry } from "../logs/log-retriever"; describe("iam-policy.logic", () => { describe("generateIamPolicy", () => { it("should generate a valid identity-based policy without a Principal key", () => { const denials: LogEntry[] = [ { iamPrincipal: "lambda.amazonaws.com", iamAction: "s3:GetObject", iamResource: "arn:aws:s3:::my-bucket/*", message: "", fullLine: "", isApiCall: false, isError: false, isWarning: false, }, { iamPrincipal: "lambda.amazonaws.com", iamAction: "s3:PutObject", iamResource: "arn:aws:s3:::my-bucket/*", message: "", fullLine: "", isApiCall: false, isError: false, isWarning: false, }, { iamPrincipal: "ecs-tasks.amazonaws.com", iamAction: "sqs:SendMessage", iamResource: "arn:aws:sqs:us-east-1:000:my-queue", message: "", fullLine: "", isApiCall: false, isError: false, isWarning: false, }, ] as any; const permissions = deduplicatePermissions(denials); const policy = generateIamPolicy(permissions); expect(policy.Version).toBe("2012-10-17"); expect(policy.Statement.length).toBe(2); for (const s of policy.Statement) { expect((s as any).Principal).toBeUndefined(); } const s3Statement = policy.Statement.find((s: any) => String(s.Resource).includes("s3") ) as any; expect(s3Statement.Action).toEqual(["s3:GetObject", "s3:PutObject"]); }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/localstack/localstack-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server