subiam 1.2.1

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.
@@ -0,0 +1,911 @@
1
+ describe 'update' do
2
+ let(:dsl) do
3
+ <<-RUBY
4
+ target /^iam-test-/
5
+
6
+ user "iam-test-bob", :path=>"/devloper/" do
7
+ login_profile :password_reset_required=>true
8
+
9
+ groups(
10
+ "iam-test-Admin",
11
+ "iam-test-SES"
12
+ )
13
+
14
+ policy "S3" do
15
+ {"Statement"=>
16
+ [{"Action"=>
17
+ ["s3:Get*",
18
+ "s3:List*"],
19
+ "Effect"=>"Allow",
20
+ "Resource"=>"*"}]}
21
+ end
22
+ end
23
+
24
+ user "iam-test-mary", :path=>"/staff/" do
25
+ policy "S3" do
26
+ {"Statement"=>
27
+ [{"Action"=>
28
+ ["s3:Get*",
29
+ "s3:List*"],
30
+ "Effect"=>"Allow",
31
+ "Resource"=>"*"}]}
32
+ end
33
+ end
34
+
35
+ group "iam-test-Admin", :path=>"/admin/" do
36
+ policy "Admin" do
37
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
38
+ end
39
+ end
40
+
41
+ group "iam-test-SES", :path=>"/ses/" do
42
+ policy "ses-policy" do
43
+ {"Statement"=>
44
+ [{"Effect"=>"Allow", "Action"=>"ses:SendRawEmail", "Resource"=>"*"}]}
45
+ end
46
+ end
47
+
48
+ role "iam-test-my-role", :path=>"/any/" do
49
+ instance_profiles(
50
+ "iam-test-my-instance-profile"
51
+ )
52
+
53
+ assume_role_policy_document do
54
+ {"Version"=>"2012-10-17",
55
+ "Statement"=>
56
+ [{"Sid"=>"",
57
+ "Effect"=>"Allow",
58
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
59
+ "Action"=>"sts:AssumeRole"}]}
60
+ end
61
+
62
+ policy "role-policy" do
63
+ {"Statement"=>
64
+ [{"Action"=>
65
+ ["s3:Get*",
66
+ "s3:List*"],
67
+ "Effect"=>"Allow",
68
+ "Resource"=>"*"}]}
69
+ end
70
+ end
71
+
72
+ instance_profile "iam-test-my-instance-profile", :path=>"/profile/"
73
+ RUBY
74
+ end
75
+
76
+ let(:expected) do
77
+ {:users=>
78
+ {"iam-test-bob"=>
79
+ {:path=>"/devloper/",
80
+ :groups=>["iam-test-Admin", "iam-test-SES"],
81
+ :attached_managed_policies=>[],
82
+ :policies=>
83
+ {"S3"=>
84
+ {"Statement"=>
85
+ [{"Action"=>["s3:Get*", "s3:List*"],
86
+ "Effect"=>"Allow",
87
+ "Resource"=>"*"}]}},
88
+ :login_profile=>{:password_reset_required=>true}},
89
+ "iam-test-mary"=>
90
+ {:path=>"/staff/",
91
+ :groups=>[],
92
+ :attached_managed_policies=>[],
93
+ :policies=>
94
+ {"S3"=>
95
+ {"Statement"=>
96
+ [{"Action"=>["s3:Get*", "s3:List*"],
97
+ "Effect"=>"Allow",
98
+ "Resource"=>"*"}]}}}},
99
+ :groups=>
100
+ {"iam-test-Admin"=>
101
+ {:path=>"/admin/",
102
+ :attached_managed_policies=>[],
103
+ :policies=>
104
+ {"Admin"=>
105
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}}},
106
+ "iam-test-SES"=>
107
+ {:path=>"/ses/",
108
+ :attached_managed_policies=>[],
109
+ :policies=>
110
+ {"ses-policy"=>
111
+ {"Statement"=>
112
+ [{"Effect"=>"Allow",
113
+ "Action"=>"ses:SendRawEmail",
114
+ "Resource"=>"*"}]}}}},
115
+ :policies=>{},
116
+ :roles=>
117
+ {"iam-test-my-role"=>
118
+ {:path=>"/any/",
119
+ :assume_role_policy_document=>
120
+ {"Version"=>"2012-10-17",
121
+ "Statement"=>
122
+ [{"Sid"=>"",
123
+ "Effect"=>"Allow",
124
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
125
+ "Action"=>"sts:AssumeRole"}]},
126
+ :instance_profiles=>["iam-test-my-instance-profile"],
127
+ :attached_managed_policies=>[],
128
+ :policies=>
129
+ {"role-policy"=>
130
+ {"Statement"=>
131
+ [{"Action"=>["s3:Get*", "s3:List*"],
132
+ "Effect"=>"Allow",
133
+ "Resource"=>"*"}]}}}},
134
+ :instance_profiles=>{"iam-test-my-instance-profile"=>{:path=>"/profile/"}}}
135
+ end
136
+
137
+ before(:each) do
138
+ apply { dsl }
139
+ end
140
+
141
+ context 'when no change' do
142
+ subject { client }
143
+
144
+ it do
145
+ updated = apply(subject) { dsl }
146
+ expect(updated).to be_falsey
147
+ expect(export).to eq expected
148
+ end
149
+ end
150
+
151
+ context 'when update policy' do
152
+ let(:update_policy_dsl) do
153
+ <<-RUBY
154
+ target /^iam-test-/
155
+
156
+ user "iam-test-bob", :path=>"/devloper/" do
157
+ login_profile :password_reset_required=>true
158
+
159
+ groups(
160
+ "iam-test-Admin",
161
+ "iam-test-SES"
162
+ )
163
+
164
+ policy "S3" do
165
+ {"Statement"=>
166
+ [{"Action"=>
167
+ ["s3:Get*",
168
+ "s3:List*"],
169
+ "Effect"=>"Allow",
170
+ "Resource"=>"*"}]}
171
+ end
172
+ end
173
+
174
+ user "iam-test-mary", :path=>"/staff/" do
175
+ policy "S3" do
176
+ {"Statement"=>
177
+ [{"Action"=>
178
+ ["s3:Get*",
179
+ "s3:Put*",
180
+ "s3:List*"],
181
+ "Effect"=>"Allow",
182
+ "Resource"=>"*"}]}
183
+ end
184
+ end
185
+
186
+ group "iam-test-Admin", :path=>"/admin/" do
187
+ policy "Admin" do
188
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
189
+ end
190
+ end
191
+
192
+ group "iam-test-SES", :path=>"/ses/" do
193
+ policy "ses-policy" do
194
+ {"Statement"=>
195
+ [{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
196
+ end
197
+ end
198
+
199
+ role "iam-test-my-role", :path=>"/any/" do
200
+ instance_profiles(
201
+ "iam-test-my-instance-profile"
202
+ )
203
+
204
+ assume_role_policy_document do
205
+ {"Version"=>"2012-10-17",
206
+ "Statement"=>
207
+ [{"Sid"=>"",
208
+ "Effect"=>"Allow",
209
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
210
+ "Action"=>"sts:AssumeRole"}]}
211
+ end
212
+
213
+ policy "role-policy" do
214
+ {"Statement"=>
215
+ [{"Action"=>
216
+ ["s3:Get*",
217
+ "s3:Put*",
218
+ "s3:List*"],
219
+ "Effect"=>"Allow",
220
+ "Resource"=>"*"}]}
221
+ end
222
+ end
223
+
224
+ instance_profile "iam-test-my-instance-profile", :path=>"/profile/"
225
+ RUBY
226
+ end
227
+
228
+ subject { client }
229
+
230
+ it do
231
+ updated = apply(subject) { update_policy_dsl }
232
+ expect(updated).to be_truthy
233
+ expected[:users]["iam-test-mary"][:policies]["S3"]["Statement"][0]["Action"] = ["s3:Get*", "s3:List*", "s3:Put*"]
234
+ expected[:groups]["iam-test-SES"][:policies]["ses-policy"]["Statement"][0]["Action"] = "*"
235
+ expected[:roles]["iam-test-my-role"][:policies]["role-policy"]["Statement"][0]["Action"] = ["s3:Get*", "s3:List*", "s3:Put*"]
236
+ expect(export).to eq expected
237
+ end
238
+ end
239
+
240
+ context 'when update path' do
241
+ let(:update_path_dsl) do
242
+ <<-RUBY
243
+ target /^iam-test-/
244
+
245
+ user "iam-test-bob", :path=>"/devloper/" do
246
+ login_profile :password_reset_required=>true
247
+
248
+ groups(
249
+ "iam-test-Admin",
250
+ "iam-test-SES"
251
+ )
252
+
253
+ policy "S3" do
254
+ {"Statement"=>
255
+ [{"Action"=>
256
+ ["s3:Get*",
257
+ "s3:List*"],
258
+ "Effect"=>"Allow",
259
+ "Resource"=>"*"}]}
260
+ end
261
+ end
262
+
263
+ user "iam-test-mary", :path=>"/xstaff/" do
264
+ policy "S3" do
265
+ {"Statement"=>
266
+ [{"Action"=>
267
+ ["s3:Get*",
268
+ "s3:List*"],
269
+ "Effect"=>"Allow",
270
+ "Resource"=>"*"}]}
271
+ end
272
+ end
273
+
274
+ group "iam-test-Admin", :path=>"/admin/" do
275
+ policy "Admin" do
276
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
277
+ end
278
+ end
279
+
280
+ group "iam-test-SES", :path=>"/ses/ses/" do
281
+ policy "ses-policy" do
282
+ {"Statement"=>
283
+ [{"Effect"=>"Allow", "Action"=>"ses:SendRawEmail", "Resource"=>"*"}]}
284
+ end
285
+ end
286
+
287
+ role "iam-test-my-role", :path=>"/any/" do
288
+ instance_profiles(
289
+ "iam-test-my-instance-profile"
290
+ )
291
+
292
+ assume_role_policy_document do
293
+ {"Version"=>"2012-10-17",
294
+ "Statement"=>
295
+ [{"Sid"=>"",
296
+ "Effect"=>"Allow",
297
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
298
+ "Action"=>"sts:AssumeRole"}]}
299
+ end
300
+
301
+ policy "role-policy" do
302
+ {"Statement"=>
303
+ [{"Action"=>
304
+ ["s3:Get*",
305
+ "s3:List*"],
306
+ "Effect"=>"Allow",
307
+ "Resource"=>"*"}]}
308
+ end
309
+ end
310
+
311
+ instance_profile "iam-test-my-instance-profile", :path=>"/profile/"
312
+ RUBY
313
+ end
314
+
315
+ subject { client }
316
+
317
+ it do
318
+ updated = apply(subject) { update_path_dsl }
319
+ expect(updated).to be_truthy
320
+ expected[:users]["iam-test-mary"][:path] = "/xstaff/"
321
+ expected[:groups]["iam-test-SES"][:path] = "/ses/ses/"
322
+ expect(export).to eq expected
323
+ end
324
+ end
325
+
326
+ context 'when update path (role, instance_profile)' do
327
+ let(:cannot_update_path_dsl) do
328
+ <<-RUBY
329
+ target /^iam-test-/
330
+
331
+ user "iam-test-bob", :path=>"/devloper/" do
332
+ login_profile :password_reset_required=>true
333
+
334
+ groups(
335
+ "iam-test-Admin",
336
+ "iam-test-SES"
337
+ )
338
+
339
+ policy "S3" do
340
+ {"Statement"=>
341
+ [{"Action"=>
342
+ ["s3:Get*",
343
+ "s3:List*"],
344
+ "Effect"=>"Allow",
345
+ "Resource"=>"*"}]}
346
+ end
347
+ end
348
+
349
+ user "iam-test-mary", :path=>"/staff/" do
350
+ policy "S3" do
351
+ {"Statement"=>
352
+ [{"Action"=>
353
+ ["s3:Get*",
354
+ "s3:List*"],
355
+ "Effect"=>"Allow",
356
+ "Resource"=>"*"}]}
357
+ end
358
+ end
359
+
360
+ group "iam-test-Admin", :path=>"/admin/" do
361
+ policy "Admin" do
362
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
363
+ end
364
+ end
365
+
366
+ group "iam-test-SES", :path=>"/ses/" do
367
+ policy "ses-policy" do
368
+ {"Statement"=>
369
+ [{"Effect"=>"Allow", "Action"=>"ses:SendRawEmail", "Resource"=>"*"}]}
370
+ end
371
+ end
372
+
373
+ role "iam-test-my-role", :path=>"/any/xxx/" do
374
+ instance_profiles(
375
+ "iam-test-my-instance-profile"
376
+ )
377
+
378
+ assume_role_policy_document do
379
+ {"Version"=>"2012-10-17",
380
+ "Statement"=>
381
+ [{"Sid"=>"",
382
+ "Effect"=>"Allow",
383
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
384
+ "Action"=>"sts:AssumeRole"}]}
385
+ end
386
+
387
+ policy "role-policy" do
388
+ {"Statement"=>
389
+ [{"Action"=>
390
+ ["s3:Get*",
391
+ "s3:List*"],
392
+ "Effect"=>"Allow",
393
+ "Resource"=>"*"}]}
394
+ end
395
+ end
396
+
397
+ instance_profile "iam-test-my-instance-profile", :path=>"/profile/xxx/"
398
+ RUBY
399
+ end
400
+
401
+ let(:logger) do
402
+ logger = Logger.new('/dev/null')
403
+ expect(logger).to receive(:warn).with("[WARN] Role `iam-test-my-role`: 'path' cannot be updated")
404
+ expect(logger).to receive(:warn).with("[WARN] InstanceProfile `iam-test-my-instance-profile`: 'path' cannot be updated")
405
+ logger
406
+ end
407
+
408
+ subject { client(logger: logger) }
409
+
410
+ it do
411
+ updated = apply(subject) { cannot_update_path_dsl }
412
+ expect(updated).to be_falsey
413
+ expect(export).to eq expected
414
+ end
415
+ end
416
+
417
+ context 'when update assume_role_policy' do
418
+ let(:update_assume_role_policy_dsl) do
419
+ <<-RUBY
420
+ target /^iam-test-/
421
+
422
+ user "iam-test-bob", :path=>"/devloper/" do
423
+ login_profile :password_reset_required=>true
424
+
425
+ groups(
426
+ "iam-test-Admin",
427
+ "iam-test-SES"
428
+ )
429
+
430
+ policy "S3" do
431
+ {"Statement"=>
432
+ [{"Action"=>
433
+ ["s3:Get*",
434
+ "s3:List*"],
435
+ "Effect"=>"Allow",
436
+ "Resource"=>"*"}]}
437
+ end
438
+ end
439
+
440
+ user "iam-test-mary", :path=>"/staff/" do
441
+ policy "S3" do
442
+ {"Statement"=>
443
+ [{"Action"=>
444
+ ["s3:Get*",
445
+ "s3:List*"],
446
+ "Effect"=>"Allow",
447
+ "Resource"=>"*"}]}
448
+ end
449
+ end
450
+
451
+ group "iam-test-Admin", :path=>"/admin/" do
452
+ policy "Admin" do
453
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
454
+ end
455
+ end
456
+
457
+ group "iam-test-SES", :path=>"/ses/" do
458
+ policy "ses-policy" do
459
+ {"Statement"=>
460
+ [{"Effect"=>"Allow", "Action"=>"ses:SendRawEmail", "Resource"=>"*"}]}
461
+ end
462
+ end
463
+
464
+ role "iam-test-my-role", :path=>"/any/" do
465
+ instance_profiles(
466
+ "iam-test-my-instance-profile"
467
+ )
468
+
469
+ assume_role_policy_document do
470
+ {"Version"=>"2012-10-17",
471
+ "Statement"=>
472
+ [{"Sid"=>"SID",
473
+ "Effect"=>"Allow",
474
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
475
+ "Action"=>"sts:AssumeRole"}]}
476
+ end
477
+
478
+ policy "role-policy" do
479
+ {"Statement"=>
480
+ [{"Action"=>
481
+ ["s3:Get*",
482
+ "s3:List*"],
483
+ "Effect"=>"Allow",
484
+ "Resource"=>"*"}]}
485
+ end
486
+ end
487
+
488
+ instance_profile "iam-test-my-instance-profile", :path=>"/profile/"
489
+ RUBY
490
+ end
491
+
492
+ subject { client }
493
+
494
+ it do
495
+ updated = apply(subject) { update_assume_role_policy_dsl }
496
+ expect(updated).to be_truthy
497
+ expected[:roles]["iam-test-my-role"][:assume_role_policy_document]["Statement"][0]["Sid"] = "SID"
498
+ expect(export).to eq expected
499
+ end
500
+ end
501
+
502
+ context 'when update groups' do
503
+ let(:update_groups_dsl) do
504
+ <<-RUBY
505
+ target /^iam-test-/
506
+
507
+ user "iam-test-bob", :path=>"/devloper/" do
508
+ login_profile :password_reset_required=>true
509
+
510
+ groups(
511
+ "iam-test-Admin"
512
+ )
513
+
514
+ policy "S3" do
515
+ {"Statement"=>
516
+ [{"Action"=>
517
+ ["s3:Get*",
518
+ "s3:List*"],
519
+ "Effect"=>"Allow",
520
+ "Resource"=>"*"}]}
521
+ end
522
+ end
523
+
524
+ user "iam-test-mary", :path=>"/staff/" do
525
+ groups(
526
+ "iam-test-Admin",
527
+ "iam-test-SES"
528
+ )
529
+
530
+ policy "S3" do
531
+ {"Statement"=>
532
+ [{"Action"=>
533
+ ["s3:Get*",
534
+ "s3:List*"],
535
+ "Effect"=>"Allow",
536
+ "Resource"=>"*"}]}
537
+ end
538
+ end
539
+
540
+ group "iam-test-Admin", :path=>"/admin/" do
541
+ policy "Admin" do
542
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
543
+ end
544
+ end
545
+
546
+ group "iam-test-SES", :path=>"/ses/" do
547
+ policy "ses-policy" do
548
+ {"Statement"=>
549
+ [{"Effect"=>"Allow", "Action"=>"ses:SendRawEmail", "Resource"=>"*"}]}
550
+ end
551
+ end
552
+
553
+ role "iam-test-my-role", :path=>"/any/" do
554
+ instance_profiles(
555
+ "iam-test-my-instance-profile"
556
+ )
557
+
558
+ assume_role_policy_document do
559
+ {"Version"=>"2012-10-17",
560
+ "Statement"=>
561
+ [{"Sid"=>"",
562
+ "Effect"=>"Allow",
563
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
564
+ "Action"=>"sts:AssumeRole"}]}
565
+ end
566
+
567
+ policy "role-policy" do
568
+ {"Statement"=>
569
+ [{"Action"=>
570
+ ["s3:Get*",
571
+ "s3:List*"],
572
+ "Effect"=>"Allow",
573
+ "Resource"=>"*"}]}
574
+ end
575
+ end
576
+
577
+ instance_profile "iam-test-my-instance-profile", :path=>"/profile/"
578
+ RUBY
579
+ end
580
+
581
+ subject { client }
582
+
583
+ it do
584
+ updated = apply(subject) { update_groups_dsl }
585
+ expect(updated).to be_truthy
586
+ expected[:users]["iam-test-bob"][:groups] = ["iam-test-Admin"]
587
+ expected[:users]["iam-test-mary"][:groups] = ["iam-test-Admin", "iam-test-SES"]
588
+ expect(export).to eq expected
589
+ end
590
+ end
591
+
592
+ context 'when update login_profile' do
593
+ let(:update_login_profile_dsl) do
594
+ <<-RUBY
595
+ target /^iam-test-/
596
+
597
+ user "iam-test-bob", :path=>"/devloper/" do
598
+ login_profile :password_reset_required=>false
599
+
600
+ groups(
601
+ "iam-test-Admin",
602
+ "iam-test-SES"
603
+ )
604
+
605
+ policy "S3" do
606
+ {"Statement"=>
607
+ [{"Action"=>
608
+ ["s3:Get*",
609
+ "s3:List*"],
610
+ "Effect"=>"Allow",
611
+ "Resource"=>"*"}]}
612
+ end
613
+ end
614
+
615
+ user "iam-test-mary", :path=>"/staff/" do
616
+ policy "S3" do
617
+ {"Statement"=>
618
+ [{"Action"=>
619
+ ["s3:Get*",
620
+ "s3:List*"],
621
+ "Effect"=>"Allow",
622
+ "Resource"=>"*"}]}
623
+ end
624
+ end
625
+
626
+ group "iam-test-Admin", :path=>"/admin/" do
627
+ policy "Admin" do
628
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
629
+ end
630
+ end
631
+
632
+ group "iam-test-SES", :path=>"/ses/" do
633
+ policy "ses-policy" do
634
+ {"Statement"=>
635
+ [{"Effect"=>"Allow", "Action"=>"ses:SendRawEmail", "Resource"=>"*"}]}
636
+ end
637
+ end
638
+
639
+ role "iam-test-my-role", :path=>"/any/" do
640
+ instance_profiles(
641
+ "iam-test-my-instance-profile"
642
+ )
643
+
644
+ assume_role_policy_document do
645
+ {"Version"=>"2012-10-17",
646
+ "Statement"=>
647
+ [{"Sid"=>"",
648
+ "Effect"=>"Allow",
649
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
650
+ "Action"=>"sts:AssumeRole"}]}
651
+ end
652
+
653
+ policy "role-policy" do
654
+ {"Statement"=>
655
+ [{"Action"=>
656
+ ["s3:Get*",
657
+ "s3:List*"],
658
+ "Effect"=>"Allow",
659
+ "Resource"=>"*"}]}
660
+ end
661
+ end
662
+
663
+ instance_profile "iam-test-my-instance-profile", :path=>"/profile/"
664
+ RUBY
665
+ end
666
+
667
+ subject { client }
668
+
669
+ it do
670
+ updated = apply(subject) { update_login_profile_dsl }
671
+ expect(updated).to be_truthy
672
+ expected[:users]["iam-test-bob"][:login_profile][:password_reset_required] = false
673
+ expect(export).to eq expected
674
+ end
675
+ end
676
+
677
+ context 'when delete login_profile' do
678
+ let(:delete_login_profile_dsl) do
679
+ <<-RUBY
680
+ target /^iam-test-/
681
+
682
+ user "iam-test-bob", :path=>"/devloper/" do
683
+ groups(
684
+ "iam-test-Admin",
685
+ "iam-test-SES"
686
+ )
687
+
688
+ policy "S3" do
689
+ {"Statement"=>
690
+ [{"Action"=>
691
+ ["s3:Get*",
692
+ "s3:List*"],
693
+ "Effect"=>"Allow",
694
+ "Resource"=>"*"}]}
695
+ end
696
+ end
697
+
698
+ user "iam-test-mary", :path=>"/staff/" do
699
+ policy "S3" do
700
+ {"Statement"=>
701
+ [{"Action"=>
702
+ ["s3:Get*",
703
+ "s3:List*"],
704
+ "Effect"=>"Allow",
705
+ "Resource"=>"*"}]}
706
+ end
707
+ end
708
+
709
+ group "iam-test-Admin", :path=>"/admin/" do
710
+ policy "Admin" do
711
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
712
+ end
713
+ end
714
+
715
+ group "iam-test-SES", :path=>"/ses/" do
716
+ policy "ses-policy" do
717
+ {"Statement"=>
718
+ [{"Effect"=>"Allow", "Action"=>"ses:SendRawEmail", "Resource"=>"*"}]}
719
+ end
720
+ end
721
+
722
+ role "iam-test-my-role", :path=>"/any/" do
723
+ instance_profiles(
724
+ "iam-test-my-instance-profile"
725
+ )
726
+
727
+ assume_role_policy_document do
728
+ {"Version"=>"2012-10-17",
729
+ "Statement"=>
730
+ [{"Sid"=>"",
731
+ "Effect"=>"Allow",
732
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
733
+ "Action"=>"sts:AssumeRole"}]}
734
+ end
735
+
736
+ policy "role-policy" do
737
+ {"Statement"=>
738
+ [{"Action"=>
739
+ ["s3:Get*",
740
+ "s3:List*"],
741
+ "Effect"=>"Allow",
742
+ "Resource"=>"*"}]}
743
+ end
744
+ end
745
+
746
+ instance_profile "iam-test-my-instance-profile", :path=>"/profile/"
747
+ RUBY
748
+ end
749
+
750
+ subject { client }
751
+
752
+ it do
753
+ updated = apply(subject) { delete_login_profile_dsl }
754
+ expect(updated).to be_truthy
755
+ expected[:users]["iam-test-bob"].delete(:login_profile)
756
+ expect(export).to eq expected
757
+ end
758
+ end
759
+
760
+ context 'when delete policy' do
761
+ let(:delete_policy_dsl) do
762
+ <<-RUBY
763
+ target /^iam-test-/
764
+
765
+ user "iam-test-bob", :path=>"/devloper/" do
766
+ login_profile :password_reset_required=>true
767
+
768
+ groups(
769
+ "iam-test-Admin",
770
+ "iam-test-SES"
771
+ )
772
+ end
773
+
774
+ user "iam-test-mary", :path=>"/staff/" do
775
+ policy "S3" do
776
+ {"Statement"=>
777
+ [{"Action"=>
778
+ ["s3:Get*",
779
+ "s3:List*"],
780
+ "Effect"=>"Allow",
781
+ "Resource"=>"*"}]}
782
+ end
783
+ end
784
+
785
+ group "iam-test-Admin", :path=>"/admin/" do
786
+ policy "Admin" do
787
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
788
+ end
789
+ end
790
+
791
+ group "iam-test-SES", :path=>"/ses/" do
792
+ end
793
+
794
+ role "iam-test-my-role", :path=>"/any/" do
795
+ instance_profiles(
796
+ "iam-test-my-instance-profile"
797
+ )
798
+
799
+ assume_role_policy_document do
800
+ {"Version"=>"2012-10-17",
801
+ "Statement"=>
802
+ [{"Sid"=>"",
803
+ "Effect"=>"Allow",
804
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
805
+ "Action"=>"sts:AssumeRole"}]}
806
+ end
807
+ end
808
+
809
+ instance_profile "iam-test-my-instance-profile", :path=>"/profile/"
810
+ RUBY
811
+ end
812
+
813
+ subject { client }
814
+
815
+ it do
816
+ updated = apply(subject) { delete_policy_dsl }
817
+ expect(updated).to be_truthy
818
+ expected[:users]["iam-test-bob"][:policies].delete("S3")
819
+ expected[:groups]["iam-test-SES"][:policies].delete("ses-policy")
820
+ expected[:roles]["iam-test-my-role"][:policies].delete("role-policy")
821
+ expect(export).to eq expected
822
+ end
823
+ end
824
+
825
+ context 'when update instance_profiles' do
826
+ let(:update_instance_profiles_dsl) do
827
+ <<-RUBY
828
+ target /^iam-test-/
829
+
830
+ user "iam-test-bob", :path=>"/devloper/" do
831
+ login_profile :password_reset_required=>true
832
+
833
+ groups(
834
+ "iam-test-Admin",
835
+ "iam-test-SES"
836
+ )
837
+
838
+ policy "S3" do
839
+ {"Statement"=>
840
+ [{"Action"=>
841
+ ["s3:Get*",
842
+ "s3:List*"],
843
+ "Effect"=>"Allow",
844
+ "Resource"=>"*"}]}
845
+ end
846
+ end
847
+
848
+ user "iam-test-mary", :path=>"/staff/" do
849
+ policy "S3" do
850
+ {"Statement"=>
851
+ [{"Action"=>
852
+ ["s3:Get*",
853
+ "s3:List*"],
854
+ "Effect"=>"Allow",
855
+ "Resource"=>"*"}]}
856
+ end
857
+ end
858
+
859
+ group "iam-test-Admin", :path=>"/admin/" do
860
+ policy "Admin" do
861
+ {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
862
+ end
863
+ end
864
+
865
+ group "iam-test-SES", :path=>"/ses/" do
866
+ policy "ses-policy" do
867
+ {"Statement"=>
868
+ [{"Effect"=>"Allow", "Action"=>"ses:SendRawEmail", "Resource"=>"*"}]}
869
+ end
870
+ end
871
+
872
+ role "iam-test-my-role", :path=>"/any/" do
873
+ instance_profiles(
874
+ "iam-test-my-instance-profile2"
875
+ )
876
+
877
+ assume_role_policy_document do
878
+ {"Version"=>"2012-10-17",
879
+ "Statement"=>
880
+ [{"Sid"=>"",
881
+ "Effect"=>"Allow",
882
+ "Principal"=>{"Service"=>"ec2.amazonaws.com"},
883
+ "Action"=>"sts:AssumeRole"}]}
884
+ end
885
+
886
+ policy "role-policy" do
887
+ {"Statement"=>
888
+ [{"Action"=>
889
+ ["s3:Get*",
890
+ "s3:List*"],
891
+ "Effect"=>"Allow",
892
+ "Resource"=>"*"}]}
893
+ end
894
+ end
895
+
896
+ instance_profile "iam-test-my-instance-profile", :path=>"/profile/"
897
+ instance_profile "iam-test-my-instance-profile2", :path=>"/profile2/"
898
+ RUBY
899
+ end
900
+
901
+ subject { client }
902
+
903
+ it do
904
+ updated = apply(subject) { update_instance_profiles_dsl }
905
+ expect(updated).to be_truthy
906
+ expected[:roles]["iam-test-my-role"][:instance_profiles] = ["iam-test-my-instance-profile2"]
907
+ expected[:instance_profiles]["iam-test-my-instance-profile2"] = {:path=>"/profile2/"}
908
+ expect(export).to eq expected
909
+ end
910
+ end
911
+ end