@friggframework/devtools 2.0.0--canary.398.7664c46.0 → 2.0.0--canary.400.bed3308.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/frigg-cli/.eslintrc.js +141 -0
- package/frigg-cli/__tests__/jest.config.js +102 -0
- package/frigg-cli/__tests__/unit/commands/build.test.js +483 -0
- package/frigg-cli/__tests__/unit/commands/install.test.js +418 -0
- package/frigg-cli/__tests__/unit/commands/ui.test.js +592 -0
- package/frigg-cli/__tests__/utils/command-tester.js +170 -0
- package/frigg-cli/__tests__/utils/mock-factory.js +270 -0
- package/frigg-cli/__tests__/utils/test-fixtures.js +463 -0
- package/frigg-cli/__tests__/utils/test-setup.js +286 -0
- package/frigg-cli/build-command/index.js +15 -2
- package/frigg-cli/deploy-command/index.js +15 -2
- package/frigg-cli/generate-command/__tests__/generate-command.test.js +312 -0
- package/frigg-cli/generate-command/azure-generator.js +43 -0
- package/frigg-cli/generate-command/gcp-generator.js +47 -0
- package/frigg-cli/generate-command/index.js +350 -0
- package/frigg-cli/generate-command/terraform-generator.js +555 -0
- package/frigg-cli/index.js +66 -4
- package/frigg-cli/install-command/index.js +15 -2
- package/frigg-cli/package.json +75 -0
- package/frigg-cli/start-command/index.js +17 -2
- package/frigg-cli/ui-command/index.js +167 -0
- package/frigg-cli/utils/app-resolver.js +319 -0
- package/frigg-cli/utils/backend-path.js +38 -0
- package/frigg-cli/utils/process-manager.js +199 -0
- package/frigg-cli/utils/repo-detection.js +405 -0
- package/infrastructure/AWS-IAM-CREDENTIAL-NEEDS.md +43 -19
- package/infrastructure/IAM-POLICY-TEMPLATES.md +1 -1
- package/infrastructure/frigg-deployment-iam-stack.yaml +16 -2
- package/infrastructure/iam-generator.js +129 -6
- package/infrastructure/iam-policy-basic.json +29 -5
- package/infrastructure/iam-policy-full.json +28 -5
- package/infrastructure/serverless-template.js +209 -3
- package/infrastructure/serverless-template.test.js +12 -0
- package/management-ui/.eslintrc.js +22 -0
- package/management-ui/README.md +203 -0
- package/management-ui/components.json +21 -0
- package/management-ui/{dist/index.html → index.html} +1 -2
- package/management-ui/merge-conflict-cleaner.py +371 -0
- package/management-ui/package-lock.json +10997 -0
- package/management-ui/package.json +76 -0
- package/management-ui/postcss.config.js +6 -0
- package/management-ui/server/api/backend.js +256 -0
- package/management-ui/server/api/cli.js +315 -0
- package/management-ui/server/api/codegen.js +663 -0
- package/management-ui/server/api/connections.js +857 -0
- package/management-ui/server/api/discovery.js +185 -0
- package/management-ui/server/api/environment/index.js +1 -0
- package/management-ui/server/api/environment/router.js +378 -0
- package/management-ui/server/api/environment.js +328 -0
- package/management-ui/server/api/integrations.js +479 -0
- package/management-ui/server/api/logs.js +248 -0
- package/management-ui/server/api/monitoring.js +282 -0
- package/management-ui/server/api/open-ide.js +31 -0
- package/management-ui/server/api/project.js +553 -0
- package/management-ui/server/api/users/sessions.js +371 -0
- package/management-ui/server/api/users/simulation.js +254 -0
- package/management-ui/server/api/users.js +362 -0
- package/management-ui/server/api-contract.md +275 -0
- package/management-ui/server/index.js +428 -0
- package/management-ui/server/middleware/errorHandler.js +70 -0
- package/management-ui/server/middleware/security.js +32 -0
- package/management-ui/server/processManager.js +296 -0
- package/management-ui/server/server.js +188 -0
- package/management-ui/server/services/aws-monitor.js +413 -0
- package/management-ui/server/services/npm-registry.js +347 -0
- package/management-ui/server/services/template-engine.js +538 -0
- package/management-ui/server/utils/cliIntegration.js +220 -0
- package/management-ui/server/utils/environment/auditLogger.js +471 -0
- package/management-ui/server/utils/environment/awsParameterStore.js +264 -0
- package/management-ui/server/utils/environment/encryption.js +278 -0
- package/management-ui/server/utils/environment/envFileManager.js +286 -0
- package/management-ui/server/utils/import-commonjs.js +28 -0
- package/management-ui/server/utils/response.js +83 -0
- package/management-ui/server/websocket/handler.js +325 -0
- package/management-ui/src/App.jsx +51 -0
- package/management-ui/src/components/AppRouter.jsx +65 -0
- package/management-ui/src/components/Button.jsx +2 -0
- package/management-ui/src/components/Card.jsx +9 -0
- package/management-ui/src/components/EnvironmentCompare.jsx +400 -0
- package/management-ui/src/components/EnvironmentEditor.jsx +372 -0
- package/management-ui/src/components/EnvironmentImportExport.jsx +469 -0
- package/management-ui/src/components/EnvironmentSchema.jsx +491 -0
- package/management-ui/src/components/EnvironmentSecurity.jsx +463 -0
- package/management-ui/src/components/ErrorBoundary.jsx +73 -0
- package/management-ui/src/components/IntegrationCard.jsx +199 -0
- package/management-ui/src/components/IntegrationCardEnhanced.jsx +490 -0
- package/management-ui/src/components/IntegrationExplorer.jsx +379 -0
- package/management-ui/src/components/IntegrationStatus.jsx +235 -0
- package/management-ui/src/components/Layout.jsx +250 -0
- package/management-ui/src/components/LoadingSpinner.jsx +45 -0
- package/management-ui/src/components/RepositoryPicker.jsx +248 -0
- package/management-ui/src/components/SessionMonitor.jsx +255 -0
- package/management-ui/src/components/StatusBadge.jsx +70 -0
- package/management-ui/src/components/UserContextSwitcher.jsx +154 -0
- package/management-ui/src/components/UserSimulation.jsx +299 -0
- package/management-ui/src/components/Welcome.jsx +434 -0
- package/management-ui/src/components/codegen/APIEndpointGenerator.jsx +637 -0
- package/management-ui/src/components/codegen/APIModuleSelector.jsx +227 -0
- package/management-ui/src/components/codegen/CodeGenerationWizard.jsx +247 -0
- package/management-ui/src/components/codegen/CodePreviewEditor.jsx +316 -0
- package/management-ui/src/components/codegen/DynamicModuleForm.jsx +271 -0
- package/management-ui/src/components/codegen/FormBuilder.jsx +737 -0
- package/management-ui/src/components/codegen/IntegrationGenerator.jsx +855 -0
- package/management-ui/src/components/codegen/ProjectScaffoldWizard.jsx +797 -0
- package/management-ui/src/components/codegen/SchemaBuilder.jsx +303 -0
- package/management-ui/src/components/codegen/TemplateSelector.jsx +586 -0
- package/management-ui/src/components/codegen/index.js +10 -0
- package/management-ui/src/components/connections/ConnectionConfigForm.jsx +362 -0
- package/management-ui/src/components/connections/ConnectionHealthMonitor.jsx +182 -0
- package/management-ui/src/components/connections/ConnectionTester.jsx +200 -0
- package/management-ui/src/components/connections/EntityRelationshipMapper.jsx +292 -0
- package/management-ui/src/components/connections/OAuthFlow.jsx +204 -0
- package/management-ui/src/components/connections/index.js +5 -0
- package/management-ui/src/components/index.js +21 -0
- package/management-ui/src/components/monitoring/APIGatewayMetrics.jsx +222 -0
- package/management-ui/src/components/monitoring/LambdaMetrics.jsx +169 -0
- package/management-ui/src/components/monitoring/MetricsChart.jsx +197 -0
- package/management-ui/src/components/monitoring/MonitoringDashboard.jsx +393 -0
- package/management-ui/src/components/monitoring/SQSMetrics.jsx +246 -0
- package/management-ui/src/components/monitoring/index.js +6 -0
- package/management-ui/src/components/monitoring/monitoring.css +218 -0
- package/management-ui/src/components/theme-provider.jsx +52 -0
- package/management-ui/src/components/theme-toggle.jsx +39 -0
- package/management-ui/src/components/ui/badge.tsx +36 -0
- package/management-ui/src/components/ui/button.test.jsx +56 -0
- package/management-ui/src/components/ui/button.tsx +57 -0
- package/management-ui/src/components/ui/card.tsx +76 -0
- package/management-ui/src/components/ui/dropdown-menu.tsx +199 -0
- package/management-ui/src/components/ui/select.tsx +157 -0
- package/management-ui/src/components/ui/skeleton.jsx +15 -0
- package/management-ui/src/hooks/useFrigg.jsx +387 -0
- package/management-ui/src/hooks/useSocket.jsx +58 -0
- package/management-ui/src/index.css +194 -0
- package/management-ui/src/lib/utils.ts +6 -0
- package/management-ui/src/main.jsx +10 -0
- package/management-ui/src/pages/CodeGeneration.jsx +14 -0
- package/management-ui/src/pages/Connections.jsx +252 -0
- package/management-ui/src/pages/ConnectionsEnhanced.jsx +427 -0
- package/management-ui/src/pages/Dashboard.jsx +311 -0
- package/management-ui/src/pages/Environment.jsx +314 -0
- package/management-ui/src/pages/IntegrationConfigure.jsx +544 -0
- package/management-ui/src/pages/IntegrationDiscovery.jsx +479 -0
- package/management-ui/src/pages/IntegrationTest.jsx +494 -0
- package/management-ui/src/pages/Integrations.jsx +254 -0
- package/management-ui/src/pages/Monitoring.jsx +17 -0
- package/management-ui/src/pages/Simulation.jsx +155 -0
- package/management-ui/src/pages/Users.jsx +492 -0
- package/management-ui/src/services/api.js +41 -0
- package/management-ui/src/services/apiModuleService.js +193 -0
- package/management-ui/src/services/websocket-handlers.js +120 -0
- package/management-ui/src/test/api/project.test.js +273 -0
- package/management-ui/src/test/components/Welcome.test.jsx +378 -0
- package/management-ui/src/test/mocks/server.js +178 -0
- package/management-ui/src/test/setup.js +61 -0
- package/management-ui/src/test/utils/test-utils.jsx +134 -0
- package/management-ui/src/utils/repository.js +98 -0
- package/management-ui/src/utils/repository.test.js +118 -0
- package/management-ui/src/workflows/phase2-integration-workflows.js +884 -0
- package/management-ui/tailwind.config.js +63 -0
- package/management-ui/tsconfig.json +37 -0
- package/management-ui/tsconfig.node.json +10 -0
- package/management-ui/vite.config.js +26 -0
- package/management-ui/vitest.config.js +38 -0
- package/package.json +5 -5
- package/management-ui/dist/assets/index-CbM64Oba.js +0 -1221
- package/management-ui/dist/assets/index-CkvseXTC.css +0 -1
- /package/management-ui/{dist/assets/FriggLogo-B7Xx8ZW1.svg → src/assets/FriggLogo.svg} +0 -0
|
@@ -4,10 +4,14 @@ This document outlines the minimum AWS IAM permissions required to build and dep
|
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
|
-
Frigg
|
|
7
|
+
Frigg provides two IAM policy templates:
|
|
8
8
|
|
|
9
|
-
1. **
|
|
10
|
-
2. **
|
|
9
|
+
1. **Basic Policy** (`iam-policy-basic.json`) - Core Lambda/API Gateway functionality only (no VPC/KMS/SSM)
|
|
10
|
+
2. **Full Policy** (`iam-policy-full.json`) - Includes VPC, KMS, and SSM support for advanced deployments
|
|
11
|
+
|
|
12
|
+
Choose the policy that matches your deployment needs:
|
|
13
|
+
- Use **Basic** for simple serverless functions with public internet access
|
|
14
|
+
- Use **Full** for VPC-enabled functions with encryption and parameter store support
|
|
11
15
|
|
|
12
16
|
The AWS discovery process runs during the `before:package:initialize` serverless hook to automatically find your default VPC, subnets, security groups, and KMS keys, eliminating the need for manual resource ID lookup.
|
|
13
17
|
|
|
@@ -86,16 +90,29 @@ Required for basic Frigg application deployment:
|
|
|
86
90
|
"Effect": "Allow",
|
|
87
91
|
"Action": [
|
|
88
92
|
"s3:CreateBucket",
|
|
93
|
+
"s3:DeleteBucket",
|
|
89
94
|
"s3:PutObject",
|
|
90
95
|
"s3:GetObject",
|
|
91
96
|
"s3:DeleteObject",
|
|
92
97
|
"s3:PutBucketPolicy",
|
|
98
|
+
"s3:GetBucketPolicy",
|
|
99
|
+
"s3:DeleteBucketPolicy",
|
|
93
100
|
"s3:PutBucketVersioning",
|
|
101
|
+
"s3:GetBucketVersioning",
|
|
94
102
|
"s3:PutBucketPublicAccessBlock",
|
|
103
|
+
"s3:GetBucketPublicAccessBlock",
|
|
104
|
+
"s3:PutBucketTagging",
|
|
105
|
+
"s3:GetBucketTagging",
|
|
106
|
+
"s3:DeleteBucketTagging",
|
|
107
|
+
"s3:PutBucketEncryption",
|
|
108
|
+
"s3:GetBucketEncryption",
|
|
109
|
+
"s3:PutEncryptionConfiguration",
|
|
110
|
+
"s3:PutBucketNotification",
|
|
111
|
+
"s3:GetBucketNotification",
|
|
95
112
|
"s3:GetBucketLocation",
|
|
96
113
|
"s3:ListBucket",
|
|
97
|
-
"s3:
|
|
98
|
-
"s3:
|
|
114
|
+
"s3:GetBucketAcl",
|
|
115
|
+
"s3:PutBucketAcl"
|
|
99
116
|
],
|
|
100
117
|
"Resource": [
|
|
101
118
|
"arn:aws:s3:::*serverless*",
|
|
@@ -264,6 +281,7 @@ Required for basic Frigg application deployment:
|
|
|
264
281
|
- Managing event-driven architectures
|
|
265
282
|
- Handling queue-based processing (e.g., HubSpot integration queues)
|
|
266
283
|
- Cleaning up event source mappings during stack deletion
|
|
284
|
+
- Tagging event source mappings for resource management and cost allocation
|
|
267
285
|
|
|
268
286
|
## Feature-Specific Permissions
|
|
269
287
|
|
|
@@ -276,7 +294,7 @@ Additional permissions needed when your app definition includes `vpc: { enable:
|
|
|
276
294
|
"Version": "2012-10-17",
|
|
277
295
|
"Statement": [
|
|
278
296
|
{
|
|
279
|
-
"Sid": "
|
|
297
|
+
"Sid": "FriggVPCDeploymentPermissions",
|
|
280
298
|
"Effect": "Allow",
|
|
281
299
|
"Action": [
|
|
282
300
|
"ec2:CreateVpcEndpoint",
|
|
@@ -289,6 +307,8 @@ Additional permissions needed when your app definition includes `vpc: { enable:
|
|
|
289
307
|
"ec2:AllocateAddress",
|
|
290
308
|
"ec2:ReleaseAddress",
|
|
291
309
|
"ec2:DescribeAddresses",
|
|
310
|
+
"ec2:AssociateAddress",
|
|
311
|
+
"ec2:DisassociateAddress",
|
|
292
312
|
"ec2:CreateRouteTable",
|
|
293
313
|
"ec2:DeleteRouteTable",
|
|
294
314
|
"ec2:DescribeRouteTables",
|
|
@@ -301,25 +321,23 @@ Additional permissions needed when your app definition includes `vpc: { enable:
|
|
|
301
321
|
"ec2:AuthorizeSecurityGroupEgress",
|
|
302
322
|
"ec2:AuthorizeSecurityGroupIngress",
|
|
303
323
|
"ec2:RevokeSecurityGroupEgress",
|
|
304
|
-
"ec2:RevokeSecurityGroupIngress"
|
|
324
|
+
"ec2:RevokeSecurityGroupIngress",
|
|
325
|
+
"ec2:CreateTags",
|
|
326
|
+
"ec2:DeleteTags",
|
|
327
|
+
"ec2:DescribeTags"
|
|
305
328
|
],
|
|
306
|
-
"Resource": "*"
|
|
307
|
-
"Condition": {
|
|
308
|
-
"StringLike": {
|
|
309
|
-
"ec2:CreateAction": [
|
|
310
|
-
"CreateVpcEndpoint",
|
|
311
|
-
"CreateNatGateway",
|
|
312
|
-
"CreateRouteTable",
|
|
313
|
-
"CreateRoute",
|
|
314
|
-
"CreateSecurityGroup"
|
|
315
|
-
]
|
|
316
|
-
}
|
|
317
|
-
}
|
|
329
|
+
"Resource": "*"
|
|
318
330
|
}
|
|
319
331
|
]
|
|
320
332
|
}
|
|
321
333
|
```
|
|
322
334
|
|
|
335
|
+
**⚠️ Critical Note:** The `ec2:CreateTags`, `ec2:DeleteTags`, and `ec2:DescribeTags` permissions are **REQUIRED** for VPC deployments. Without these permissions, CloudFormation will fail with errors like:
|
|
336
|
+
|
|
337
|
+
```
|
|
338
|
+
"User is not authorized to perform: ec2:CreateTags on resource: arn:aws:ec2:*:*:elastic-ip/*"
|
|
339
|
+
```
|
|
340
|
+
|
|
323
341
|
**What this enables:**
|
|
324
342
|
- Creates NAT Gateway for Lambda internet access to external APIs (Salesforce, HubSpot, etc.)
|
|
325
343
|
- Creates VPC endpoints for AWS services (S3, DynamoDB, KMS, SSM) to reduce NAT Gateway costs
|
|
@@ -553,6 +571,12 @@ The discovery process sets these environment variables during build:
|
|
|
553
571
|
7. **CloudFormation ListStackResources Error** - If you see "User is not authorized to perform: cloudformation:ListStackResources", update your IAM stack with the latest template that includes this permission
|
|
554
572
|
8. **Elastic IP Already Associated Error** - If you see "Elastic IP address is already associated", the discovery process will now find and reuse existing NAT Gateways and EIPs to prevent conflicts
|
|
555
573
|
9. **Lambda EventSourceMapping Error** - If you see "User is not authorized to perform: lambda:DeleteEventSourceMapping", update your IAM stack with the latest template that includes EventSourceMapping permissions
|
|
574
|
+
10. **EC2 CreateTags Error** - If you see "User is not authorized to perform: ec2:CreateTags on resource: arn:aws:ec2:*:*:elastic-ip/*", you need the VPC deployment permissions that include `ec2:CreateTags`, `ec2:DeleteTags`, and `ec2:DescribeTags`. Use the **full policy** template or add the VPC permissions section to your existing policy.
|
|
575
|
+
11. **CloudWatch Logs TagResource Error** - If you see "User is not authorized to perform CreateLogGroup with Tags. An additional permission 'logs:TagResource' is required", ensure your IAM policy includes `logs:TagResource` and `logs:UntagResource` permissions. This is now included in both basic and full policy templates.
|
|
576
|
+
12. **Lambda PutFunctionConcurrency Error** - If you see "User is not authorized to perform: lambda:PutFunctionConcurrency", ensure your IAM policy includes the `lambda:PutFunctionConcurrency` permission. This is required when Lambda functions specify concurrency settings.
|
|
577
|
+
13. **EC2 DeleteVpcEndpoints Error** - If you see "User is not authorized to perform: ec2:DeleteVpcEndpoints", ensure your VPC policy includes both `ec2:DeleteVpcEndpoint` (singular) and `ec2:DeleteVpcEndpoints` (plural) permissions. AWS uses different permissions for single vs bulk operations.
|
|
578
|
+
14. **Lambda CreateEventSourceMapping Error** - If you see "User is not authorized to perform: lambda:CreateEventSourceMapping", this permission should already be included in both basic and full policy templates under the "FriggLambdaEventSourceMapping" section with the correct resource ARN `arn:aws:lambda:*:*:event-source-mapping:*`.
|
|
579
|
+
15. **Lambda TagResource Error on EventSourceMapping** - If you see "User is not authorized to perform: lambda:TagResource on resource: arn:aws:lambda:*:*:event-source-mapping:*", ensure your IAM policy includes `lambda:TagResource`, `lambda:UntagResource`, and `lambda:ListTags` permissions in the FriggLambdaEventSourceMapping section. These permissions are required when CloudFormation tags event source mappings during creation.
|
|
556
580
|
|
|
557
581
|
### Fallback Behavior
|
|
558
582
|
|
|
@@ -137,7 +137,7 @@ Consider separate policies for different environments:
|
|
|
137
137
|
4. **Lambda VPC errors** → Ensure VPC permissions are enabled
|
|
138
138
|
5. **"lambda:DeleteEventSourceMapping" error** → Update to latest policy (includes EventSourceMapping permissions)
|
|
139
139
|
6. **"ec2:DeleteVpcEndpoints" error** → Update IAM policy to use `ec2:DeleteVpcEndpoints` (plural) instead of `ec2:DeleteVpcEndpoint`
|
|
140
|
-
7. **"s3:PutBucketTagging"
|
|
140
|
+
7. **S3 permission errors** (e.g., "s3:PutBucketTagging", "s3:DeleteBucket", "s3:GetBucketPolicy", "s3:PutBucketEncryption") → Update to latest policy (includes comprehensive S3 bucket management permissions)
|
|
141
141
|
|
|
142
142
|
### Validation
|
|
143
143
|
Test your policy by deploying a simple Frigg app:
|
|
@@ -111,16 +111,29 @@ Resources:
|
|
|
111
111
|
Effect: Allow
|
|
112
112
|
Action:
|
|
113
113
|
- 's3:CreateBucket'
|
|
114
|
+
- 's3:DeleteBucket'
|
|
114
115
|
- 's3:PutObject'
|
|
115
116
|
- 's3:GetObject'
|
|
116
117
|
- 's3:DeleteObject'
|
|
117
118
|
- 's3:PutBucketPolicy'
|
|
119
|
+
- 's3:GetBucketPolicy'
|
|
120
|
+
- 's3:DeleteBucketPolicy'
|
|
118
121
|
- 's3:PutBucketVersioning'
|
|
122
|
+
- 's3:GetBucketVersioning'
|
|
119
123
|
- 's3:PutBucketPublicAccessBlock'
|
|
120
|
-
- 's3:
|
|
121
|
-
- 's3:ListBucket'
|
|
124
|
+
- 's3:GetBucketPublicAccessBlock'
|
|
122
125
|
- 's3:PutBucketTagging'
|
|
123
126
|
- 's3:GetBucketTagging'
|
|
127
|
+
- 's3:DeleteBucketTagging'
|
|
128
|
+
- 's3:PutBucketEncryption'
|
|
129
|
+
- 's3:GetBucketEncryption'
|
|
130
|
+
- 's3:PutEncryptionConfiguration'
|
|
131
|
+
- 's3:PutBucketNotification'
|
|
132
|
+
- 's3:GetBucketNotification'
|
|
133
|
+
- 's3:GetBucketLocation'
|
|
134
|
+
- 's3:ListBucket'
|
|
135
|
+
- 's3:GetBucketAcl'
|
|
136
|
+
- 's3:PutBucketAcl'
|
|
124
137
|
Resource:
|
|
125
138
|
- 'arn:aws:s3:::*serverless*'
|
|
126
139
|
- 'arn:aws:s3:::*serverless*/*'
|
|
@@ -257,6 +270,7 @@ Resources:
|
|
|
257
270
|
- 'arn:aws:apigateway:*::/restapis/*'
|
|
258
271
|
- 'arn:aws:apigateway:*::/domainnames'
|
|
259
272
|
- 'arn:aws:apigateway:*::/domainnames/*'
|
|
273
|
+
- 'arn:aws:apigateway:*::/tags/*'
|
|
260
274
|
|
|
261
275
|
# VPC-specific permissions
|
|
262
276
|
FriggVPCPolicy:
|
|
@@ -46,7 +46,10 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
46
46
|
const template = {
|
|
47
47
|
AWSTemplateFormatVersion: '2010-09-09',
|
|
48
48
|
Description: `IAM roles and policies for ${appDefinition.name || 'Frigg'} application deployment pipeline`,
|
|
49
|
+
<<<<<<< HEAD
|
|
50
|
+
=======
|
|
49
51
|
|
|
52
|
+
>>>>>>> 37c4892ee8a686eb7acfcd17c333b0ed73e1f120
|
|
50
53
|
Parameters: {
|
|
51
54
|
DeploymentUserName: {
|
|
52
55
|
Type: 'String',
|
|
@@ -166,7 +169,10 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
166
169
|
'cloudformation:DeleteChangeSet',
|
|
167
170
|
'cloudformation:ExecuteChangeSet',
|
|
168
171
|
'cloudformation:ValidateTemplate',
|
|
172
|
+
<<<<<<< HEAD
|
|
173
|
+
=======
|
|
169
174
|
|
|
175
|
+
>>>>>>> 37c4892ee8a686eb7acfcd17c333b0ed73e1f120
|
|
170
176
|
// Lambda permissions
|
|
171
177
|
'lambda:CreateFunction',
|
|
172
178
|
'lambda:UpdateFunctionCode',
|
|
@@ -189,7 +195,10 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
189
195
|
'lambda:TagResource',
|
|
190
196
|
'lambda:UntagResource',
|
|
191
197
|
'lambda:ListVersionsByFunction',
|
|
198
|
+
<<<<<<< HEAD
|
|
199
|
+
=======
|
|
192
200
|
|
|
201
|
+
>>>>>>> 37c4892ee8a686eb7acfcd17c333b0ed73e1f120
|
|
193
202
|
// IAM permissions
|
|
194
203
|
'iam:CreateRole',
|
|
195
204
|
'iam:DeleteRole',
|
|
@@ -203,18 +212,41 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
203
212
|
'iam:TagRole',
|
|
204
213
|
'iam:UntagRole',
|
|
205
214
|
'iam:ListPolicyVersions',
|
|
215
|
+
<<<<<<< HEAD
|
|
216
|
+
|
|
217
|
+
=======
|
|
206
218
|
|
|
219
|
+
>>>>>>> 37c4892ee8a686eb7acfcd17c333b0ed73e1f120
|
|
207
220
|
// S3 permissions
|
|
208
221
|
's3:CreateBucket',
|
|
222
|
+
's3:DeleteBucket',
|
|
209
223
|
's3:PutObject',
|
|
210
224
|
's3:GetObject',
|
|
211
225
|
's3:DeleteObject',
|
|
212
226
|
's3:PutBucketPolicy',
|
|
227
|
+
's3:GetBucketPolicy',
|
|
228
|
+
's3:DeleteBucketPolicy',
|
|
213
229
|
's3:PutBucketVersioning',
|
|
230
|
+
's3:GetBucketVersioning',
|
|
214
231
|
's3:PutBucketPublicAccessBlock',
|
|
232
|
+
's3:GetBucketPublicAccessBlock',
|
|
233
|
+
's3:PutBucketTagging',
|
|
234
|
+
's3:GetBucketTagging',
|
|
235
|
+
's3:DeleteBucketTagging',
|
|
236
|
+
's3:PutBucketEncryption',
|
|
237
|
+
's3:GetBucketEncryption',
|
|
238
|
+
's3:PutEncryptionConfiguration',
|
|
239
|
+
's3:PutBucketNotification',
|
|
240
|
+
's3:GetBucketNotification',
|
|
215
241
|
's3:GetBucketLocation',
|
|
216
242
|
's3:ListBucket',
|
|
243
|
+
's3:GetBucketAcl',
|
|
244
|
+
's3:PutBucketAcl',
|
|
245
|
+
<<<<<<< HEAD
|
|
246
|
+
|
|
247
|
+
=======
|
|
217
248
|
|
|
249
|
+
>>>>>>> 37c4892ee8a686eb7acfcd17c333b0ed73e1f120
|
|
218
250
|
// SQS permissions
|
|
219
251
|
'sqs:CreateQueue',
|
|
220
252
|
'sqs:DeleteQueue',
|
|
@@ -223,7 +255,10 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
223
255
|
'sqs:GetQueueUrl',
|
|
224
256
|
'sqs:TagQueue',
|
|
225
257
|
'sqs:UntagQueue',
|
|
258
|
+
<<<<<<< HEAD
|
|
259
|
+
=======
|
|
226
260
|
|
|
261
|
+
>>>>>>> 37c4892ee8a686eb7acfcd17c333b0ed73e1f120
|
|
227
262
|
// SNS permissions
|
|
228
263
|
'sns:CreateTopic',
|
|
229
264
|
'sns:DeleteTopic',
|
|
@@ -234,7 +269,10 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
234
269
|
'sns:ListSubscriptionsByTopic',
|
|
235
270
|
'sns:TagResource',
|
|
236
271
|
'sns:UntagResource',
|
|
272
|
+
<<<<<<< HEAD
|
|
273
|
+
=======
|
|
237
274
|
|
|
275
|
+
>>>>>>> 37c4892ee8a686eb7acfcd17c333b0ed73e1f120
|
|
238
276
|
// CloudWatch and Logs permissions
|
|
239
277
|
'cloudwatch:PutMetricAlarm',
|
|
240
278
|
'cloudwatch:DeleteAlarms',
|
|
@@ -247,7 +285,10 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
247
285
|
'logs:FilterLogEvents',
|
|
248
286
|
'logs:PutLogEvents',
|
|
249
287
|
'logs:PutRetentionPolicy',
|
|
288
|
+
<<<<<<< HEAD
|
|
289
|
+
=======
|
|
250
290
|
|
|
291
|
+
>>>>>>> 37c4892ee8a686eb7acfcd17c333b0ed73e1f120
|
|
251
292
|
// API Gateway permissions
|
|
252
293
|
'apigateway:POST',
|
|
253
294
|
'apigateway:PUT',
|
|
@@ -273,7 +314,10 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
273
314
|
'cloudformation:DescribeChangeSet',
|
|
274
315
|
'cloudformation:CreateChangeSet',
|
|
275
316
|
'cloudformation:DeleteChangeSet',
|
|
276
|
-
'cloudformation:ExecuteChangeSet'
|
|
317
|
+
'cloudformation:ExecuteChangeSet',
|
|
318
|
+
'cloudformation:TagResource',
|
|
319
|
+
'cloudformation:UntagResource',
|
|
320
|
+
'cloudformation:ListStackResources'
|
|
277
321
|
],
|
|
278
322
|
Resource: [
|
|
279
323
|
{ 'Fn::Sub': 'arn:aws:cloudformation:*:${AWS::AccountId}:stack/*frigg*/*' }
|
|
@@ -290,14 +334,29 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
290
334
|
Effect: 'Allow',
|
|
291
335
|
Action: [
|
|
292
336
|
's3:CreateBucket',
|
|
337
|
+
's3:DeleteBucket',
|
|
293
338
|
's3:PutObject',
|
|
294
339
|
's3:GetObject',
|
|
295
340
|
's3:DeleteObject',
|
|
296
341
|
's3:PutBucketPolicy',
|
|
342
|
+
's3:GetBucketPolicy',
|
|
343
|
+
's3:DeleteBucketPolicy',
|
|
297
344
|
's3:PutBucketVersioning',
|
|
345
|
+
's3:GetBucketVersioning',
|
|
298
346
|
's3:PutBucketPublicAccessBlock',
|
|
347
|
+
's3:GetBucketPublicAccessBlock',
|
|
348
|
+
's3:PutBucketTagging',
|
|
349
|
+
's3:GetBucketTagging',
|
|
350
|
+
's3:DeleteBucketTagging',
|
|
351
|
+
's3:PutBucketEncryption',
|
|
352
|
+
's3:GetBucketEncryption',
|
|
353
|
+
's3:PutEncryptionConfiguration',
|
|
354
|
+
's3:PutBucketNotification',
|
|
355
|
+
's3:GetBucketNotification',
|
|
299
356
|
's3:GetBucketLocation',
|
|
300
|
-
's3:ListBucket'
|
|
357
|
+
's3:ListBucket',
|
|
358
|
+
's3:GetBucketAcl',
|
|
359
|
+
's3:PutBucketAcl'
|
|
301
360
|
],
|
|
302
361
|
Resource: [
|
|
303
362
|
'arn:aws:s3:::*serverless*',
|
|
@@ -325,6 +384,7 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
325
384
|
'lambda:PutProvisionedConcurrencyConfig',
|
|
326
385
|
'lambda:DeleteProvisionedConcurrencyConfig',
|
|
327
386
|
'lambda:PutConcurrency',
|
|
387
|
+
'lambda:PutFunctionConcurrency',
|
|
328
388
|
'lambda:DeleteConcurrency',
|
|
329
389
|
'lambda:TagResource',
|
|
330
390
|
'lambda:UntagResource',
|
|
@@ -334,6 +394,23 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
334
394
|
{ 'Fn::Sub': 'arn:aws:lambda:*:${AWS::AccountId}:function:*frigg*' }
|
|
335
395
|
]
|
|
336
396
|
},
|
|
397
|
+
{
|
|
398
|
+
Sid: 'FriggLambdaEventSourceMapping',
|
|
399
|
+
Effect: 'Allow',
|
|
400
|
+
Action: [
|
|
401
|
+
'lambda:CreateEventSourceMapping',
|
|
402
|
+
'lambda:DeleteEventSourceMapping',
|
|
403
|
+
'lambda:GetEventSourceMapping',
|
|
404
|
+
'lambda:UpdateEventSourceMapping',
|
|
405
|
+
'lambda:ListEventSourceMappings',
|
|
406
|
+
'lambda:TagResource',
|
|
407
|
+
'lambda:UntagResource',
|
|
408
|
+
'lambda:ListTags'
|
|
409
|
+
],
|
|
410
|
+
Resource: [
|
|
411
|
+
{ 'Fn::Sub': 'arn:aws:lambda:*:${AWS::AccountId}:event-source-mapping:*' }
|
|
412
|
+
]
|
|
413
|
+
},
|
|
337
414
|
{
|
|
338
415
|
Sid: 'IAMRolesForFriggLambda',
|
|
339
416
|
Effect: 'Allow',
|
|
@@ -410,7 +487,9 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
410
487
|
'logs:DescribeLogStreams',
|
|
411
488
|
'logs:FilterLogEvents',
|
|
412
489
|
'logs:PutLogEvents',
|
|
413
|
-
'logs:PutRetentionPolicy'
|
|
490
|
+
'logs:PutRetentionPolicy',
|
|
491
|
+
'logs:TagResource',
|
|
492
|
+
'logs:UntagResource'
|
|
414
493
|
],
|
|
415
494
|
Resource: [
|
|
416
495
|
{ 'Fn::Sub': 'arn:aws:logs:*:${AWS::AccountId}:log-group:/aws/lambda/*frigg*' },
|
|
@@ -432,7 +511,8 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
432
511
|
'arn:aws:apigateway:*::/restapis',
|
|
433
512
|
'arn:aws:apigateway:*::/restapis/*',
|
|
434
513
|
'arn:aws:apigateway:*::/domainnames',
|
|
435
|
-
'arn:aws:apigateway:*::/domainnames/*'
|
|
514
|
+
'arn:aws:apigateway:*::/domainnames/*',
|
|
515
|
+
'arn:aws:apigateway:*::/tags/*'
|
|
436
516
|
]
|
|
437
517
|
}
|
|
438
518
|
];
|
|
@@ -466,6 +546,7 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
466
546
|
Action: [
|
|
467
547
|
'ec2:CreateVpcEndpoint',
|
|
468
548
|
'ec2:DeleteVpcEndpoint',
|
|
549
|
+
'ec2:DeleteVpcEndpoints',
|
|
469
550
|
'ec2:DescribeVpcEndpoints',
|
|
470
551
|
'ec2:ModifyVpcEndpoint',
|
|
471
552
|
'ec2:CreateNatGateway',
|
|
@@ -474,6 +555,8 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
474
555
|
'ec2:AllocateAddress',
|
|
475
556
|
'ec2:ReleaseAddress',
|
|
476
557
|
'ec2:DescribeAddresses',
|
|
558
|
+
'ec2:AssociateAddress',
|
|
559
|
+
'ec2:DisassociateAddress',
|
|
477
560
|
'ec2:CreateRouteTable',
|
|
478
561
|
'ec2:DeleteRouteTable',
|
|
479
562
|
'ec2:DescribeRouteTables',
|
|
@@ -486,7 +569,10 @@ function generateIAMCloudFormation(appDefinition, options = {}) {
|
|
|
486
569
|
'ec2:AuthorizeSecurityGroupEgress',
|
|
487
570
|
'ec2:AuthorizeSecurityGroupIngress',
|
|
488
571
|
'ec2:RevokeSecurityGroupEgress',
|
|
489
|
-
'ec2:RevokeSecurityGroupIngress'
|
|
572
|
+
'ec2:RevokeSecurityGroupIngress',
|
|
573
|
+
'ec2:CreateTags',
|
|
574
|
+
'ec2:DeleteTags',
|
|
575
|
+
'ec2:DescribeTags'
|
|
490
576
|
],
|
|
491
577
|
Resource: '*'
|
|
492
578
|
}
|
|
@@ -678,10 +764,47 @@ function generateIAMPolicy(mode = 'basic') {
|
|
|
678
764
|
return generateBasicIAMPolicy();
|
|
679
765
|
}
|
|
680
766
|
|
|
767
|
+
/**
|
|
768
|
+
* Wrapper function for generate command compatibility
|
|
769
|
+
* @param {Object} options - Generation options
|
|
770
|
+
* @param {string} options.appName - Application name
|
|
771
|
+
* @param {Object} options.features - Feature flags
|
|
772
|
+
* @param {string} options.userPrefix - IAM user name prefix
|
|
773
|
+
* @param {string} options.stackName - CloudFormation stack name
|
|
774
|
+
* @returns {Promise<string>} CloudFormation YAML template
|
|
775
|
+
*/
|
|
776
|
+
async function generateCloudFormationTemplate(options) {
|
|
777
|
+
const { appName, features, userPrefix, stackName } = options;
|
|
778
|
+
<<<<<<< HEAD
|
|
779
|
+
|
|
780
|
+
=======
|
|
781
|
+
|
|
782
|
+
>>>>>>> 37c4892ee8a686eb7acfcd17c333b0ed73e1f120
|
|
783
|
+
// Create appDefinition from features
|
|
784
|
+
const appDefinition = {
|
|
785
|
+
name: appName,
|
|
786
|
+
vpc: { enable: features.vpc },
|
|
787
|
+
encryption: { useDefaultKMSForFieldLevelEncryption: features.kms },
|
|
788
|
+
ssm: { enable: features.ssm },
|
|
789
|
+
websockets: { enable: features.websockets }
|
|
790
|
+
};
|
|
791
|
+
<<<<<<< HEAD
|
|
792
|
+
|
|
793
|
+
=======
|
|
794
|
+
|
|
795
|
+
>>>>>>> 37c4892ee8a686eb7acfcd17c333b0ed73e1f120
|
|
796
|
+
return generateIAMCloudFormation(appDefinition, {
|
|
797
|
+
deploymentUserName: userPrefix,
|
|
798
|
+
stackName: stackName,
|
|
799
|
+
mode: 'auto'
|
|
800
|
+
});
|
|
801
|
+
}
|
|
802
|
+
|
|
681
803
|
module.exports = {
|
|
682
804
|
generateIAMCloudFormation,
|
|
683
805
|
getFeatureSummary,
|
|
684
806
|
generateBasicIAMPolicy,
|
|
685
807
|
generateFullIAMPolicy,
|
|
686
|
-
generateIAMPolicy
|
|
808
|
+
generateIAMPolicy,
|
|
809
|
+
generateCloudFormationTemplate
|
|
687
810
|
};
|
|
@@ -43,16 +43,29 @@
|
|
|
43
43
|
"Effect": "Allow",
|
|
44
44
|
"Action": [
|
|
45
45
|
"s3:CreateBucket",
|
|
46
|
+
"s3:DeleteBucket",
|
|
46
47
|
"s3:PutObject",
|
|
47
48
|
"s3:GetObject",
|
|
48
49
|
"s3:DeleteObject",
|
|
49
50
|
"s3:PutBucketPolicy",
|
|
51
|
+
"s3:GetBucketPolicy",
|
|
52
|
+
"s3:DeleteBucketPolicy",
|
|
50
53
|
"s3:PutBucketVersioning",
|
|
54
|
+
"s3:GetBucketVersioning",
|
|
51
55
|
"s3:PutBucketPublicAccessBlock",
|
|
56
|
+
"s3:GetBucketPublicAccessBlock",
|
|
57
|
+
"s3:PutBucketTagging",
|
|
58
|
+
"s3:GetBucketTagging",
|
|
59
|
+
"s3:DeleteBucketTagging",
|
|
60
|
+
"s3:PutBucketEncryption",
|
|
61
|
+
"s3:GetBucketEncryption",
|
|
62
|
+
"s3:PutEncryptionConfiguration",
|
|
63
|
+
"s3:PutBucketNotification",
|
|
64
|
+
"s3:GetBucketNotification",
|
|
52
65
|
"s3:GetBucketLocation",
|
|
53
66
|
"s3:ListBucket",
|
|
54
|
-
"s3:
|
|
55
|
-
"s3:
|
|
67
|
+
"s3:GetBucketAcl",
|
|
68
|
+
"s3:PutBucketAcl"
|
|
56
69
|
],
|
|
57
70
|
"Resource": [
|
|
58
71
|
"arn:aws:s3:::*serverless*",
|
|
@@ -80,6 +93,7 @@
|
|
|
80
93
|
"lambda:PutProvisionedConcurrencyConfig",
|
|
81
94
|
"lambda:DeleteProvisionedConcurrencyConfig",
|
|
82
95
|
"lambda:PutConcurrency",
|
|
96
|
+
"lambda:PutFunctionConcurrency",
|
|
83
97
|
"lambda:DeleteConcurrency",
|
|
84
98
|
"lambda:TagResource",
|
|
85
99
|
"lambda:UntagResource",
|
|
@@ -97,7 +111,10 @@
|
|
|
97
111
|
"lambda:DeleteEventSourceMapping",
|
|
98
112
|
"lambda:GetEventSourceMapping",
|
|
99
113
|
"lambda:UpdateEventSourceMapping",
|
|
100
|
-
"lambda:ListEventSourceMappings"
|
|
114
|
+
"lambda:ListEventSourceMappings",
|
|
115
|
+
"lambda:TagResource",
|
|
116
|
+
"lambda:UntagResource",
|
|
117
|
+
"lambda:ListTags"
|
|
101
118
|
],
|
|
102
119
|
"Resource": [
|
|
103
120
|
"arn:aws:lambda:*:*:event-source-mapping:*"
|
|
@@ -183,7 +200,9 @@
|
|
|
183
200
|
"logs:DescribeLogStreams",
|
|
184
201
|
"logs:FilterLogEvents",
|
|
185
202
|
"logs:PutLogEvents",
|
|
186
|
-
"logs:PutRetentionPolicy"
|
|
203
|
+
"logs:PutRetentionPolicy",
|
|
204
|
+
"logs:TagResource",
|
|
205
|
+
"logs:UntagResource"
|
|
187
206
|
],
|
|
188
207
|
"Resource": [
|
|
189
208
|
"arn:aws:logs:*:*:log-group:/aws/lambda/*frigg*",
|
|
@@ -205,7 +224,12 @@
|
|
|
205
224
|
"arn:aws:apigateway:*::/restapis",
|
|
206
225
|
"arn:aws:apigateway:*::/restapis/*",
|
|
207
226
|
"arn:aws:apigateway:*::/domainnames",
|
|
208
|
-
|
|
227
|
+
<<<<<<< HEAD
|
|
228
|
+
"arn:aws:apigateway:*::/domainnames/*",
|
|
229
|
+
=======
|
|
230
|
+
"arn:aws:apigateway:*::/domainnames/*",
|
|
231
|
+
>>>>>>> 37c4892ee8a686eb7acfcd17c333b0ed73e1f120
|
|
232
|
+
"arn:aws:apigateway:*::/tags/*"
|
|
209
233
|
]
|
|
210
234
|
}
|
|
211
235
|
]
|
|
@@ -43,16 +43,29 @@
|
|
|
43
43
|
"Effect": "Allow",
|
|
44
44
|
"Action": [
|
|
45
45
|
"s3:CreateBucket",
|
|
46
|
+
"s3:DeleteBucket",
|
|
46
47
|
"s3:PutObject",
|
|
47
48
|
"s3:GetObject",
|
|
48
49
|
"s3:DeleteObject",
|
|
49
50
|
"s3:PutBucketPolicy",
|
|
51
|
+
"s3:GetBucketPolicy",
|
|
52
|
+
"s3:DeleteBucketPolicy",
|
|
50
53
|
"s3:PutBucketVersioning",
|
|
54
|
+
"s3:GetBucketVersioning",
|
|
51
55
|
"s3:PutBucketPublicAccessBlock",
|
|
56
|
+
"s3:GetBucketPublicAccessBlock",
|
|
57
|
+
"s3:PutBucketTagging",
|
|
58
|
+
"s3:GetBucketTagging",
|
|
59
|
+
"s3:DeleteBucketTagging",
|
|
60
|
+
"s3:PutBucketEncryption",
|
|
61
|
+
"s3:GetBucketEncryption",
|
|
62
|
+
"s3:PutEncryptionConfiguration",
|
|
63
|
+
"s3:PutBucketNotification",
|
|
64
|
+
"s3:GetBucketNotification",
|
|
52
65
|
"s3:GetBucketLocation",
|
|
53
66
|
"s3:ListBucket",
|
|
54
|
-
"s3:
|
|
55
|
-
"s3:
|
|
67
|
+
"s3:GetBucketAcl",
|
|
68
|
+
"s3:PutBucketAcl"
|
|
56
69
|
],
|
|
57
70
|
"Resource": [
|
|
58
71
|
"arn:aws:s3:::*serverless*",
|
|
@@ -80,6 +93,7 @@
|
|
|
80
93
|
"lambda:PutProvisionedConcurrencyConfig",
|
|
81
94
|
"lambda:DeleteProvisionedConcurrencyConfig",
|
|
82
95
|
"lambda:PutConcurrency",
|
|
96
|
+
"lambda:PutFunctionConcurrency",
|
|
83
97
|
"lambda:DeleteConcurrency",
|
|
84
98
|
"lambda:TagResource",
|
|
85
99
|
"lambda:UntagResource",
|
|
@@ -97,7 +111,10 @@
|
|
|
97
111
|
"lambda:DeleteEventSourceMapping",
|
|
98
112
|
"lambda:GetEventSourceMapping",
|
|
99
113
|
"lambda:UpdateEventSourceMapping",
|
|
100
|
-
"lambda:ListEventSourceMappings"
|
|
114
|
+
"lambda:ListEventSourceMappings",
|
|
115
|
+
"lambda:TagResource",
|
|
116
|
+
"lambda:UntagResource",
|
|
117
|
+
"lambda:ListTags"
|
|
101
118
|
],
|
|
102
119
|
"Resource": [
|
|
103
120
|
"arn:aws:lambda:*:*:event-source-mapping:*"
|
|
@@ -183,7 +200,9 @@
|
|
|
183
200
|
"logs:DescribeLogStreams",
|
|
184
201
|
"logs:FilterLogEvents",
|
|
185
202
|
"logs:PutLogEvents",
|
|
186
|
-
"logs:PutRetentionPolicy"
|
|
203
|
+
"logs:PutRetentionPolicy",
|
|
204
|
+
"logs:TagResource",
|
|
205
|
+
"logs:UntagResource"
|
|
187
206
|
],
|
|
188
207
|
"Resource": [
|
|
189
208
|
"arn:aws:logs:*:*:log-group:/aws/lambda/*frigg*",
|
|
@@ -205,7 +224,8 @@
|
|
|
205
224
|
"arn:aws:apigateway:*::/restapis",
|
|
206
225
|
"arn:aws:apigateway:*::/restapis/*",
|
|
207
226
|
"arn:aws:apigateway:*::/domainnames",
|
|
208
|
-
"arn:aws:apigateway:*::/domainnames/*"
|
|
227
|
+
"arn:aws:apigateway:*::/domainnames/*",
|
|
228
|
+
"arn:aws:apigateway:*::/tags/*"
|
|
209
229
|
]
|
|
210
230
|
},
|
|
211
231
|
{
|
|
@@ -214,6 +234,7 @@
|
|
|
214
234
|
"Action": [
|
|
215
235
|
"ec2:CreateVpcEndpoint",
|
|
216
236
|
"ec2:DeleteVpcEndpoint",
|
|
237
|
+
"ec2:DeleteVpcEndpoints",
|
|
217
238
|
"ec2:DescribeVpcEndpoints",
|
|
218
239
|
"ec2:ModifyVpcEndpoint",
|
|
219
240
|
"ec2:CreateNatGateway",
|
|
@@ -222,6 +243,8 @@
|
|
|
222
243
|
"ec2:AllocateAddress",
|
|
223
244
|
"ec2:ReleaseAddress",
|
|
224
245
|
"ec2:DescribeAddresses",
|
|
246
|
+
"ec2:AssociateAddress",
|
|
247
|
+
"ec2:DisassociateAddress",
|
|
225
248
|
"ec2:CreateRouteTable",
|
|
226
249
|
"ec2:DeleteRouteTable",
|
|
227
250
|
"ec2:DescribeRouteTables",
|