aws-sdk-accessanalyzer 1.50.0 → 1.52.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 898843ef5646fc7c4a75cccc804f4d7b79ca0d0b1179fc5b77e4c86cf8f970ab
4
- data.tar.gz: b398ef3391f7a4dfc8d54bf9f1c40c60a9198bffbb49fa1706842201a7b618f0
3
+ metadata.gz: a8b46b0ac5fd819979f698d09b75a136da0dafb206b5bb64abaa7d1dd530e218
4
+ data.tar.gz: 2498aa7fb11bc6e476aef57c12162a308a1edaee01d9a68d4dd9324bc08cb45a
5
5
  SHA512:
6
- metadata.gz: 1193ea94083e00ab1952f68b80f3ab4c889670e37a19d3f41163387b7e9c2a08ed4d589bc0c36150393c664ed9afde11481c02fe990ce60618a82719ddd5026e
7
- data.tar.gz: 9d3b71454119f9c34d22ab664fc408bcb59653f2ef67faae9764a47e7ec572d50252de3e4fe9a630db6fa989d201f52d140b96e22bf6e83fa7752be41fd845d6
6
+ metadata.gz: 74b9d388ccd49a530960e8cb1edfad04f1128abb1e8a081077c1d6fb3be86b4b9e072b62bd429b7abc4f3ba86c636d5eef2dc5da06f2f0544406087814a85b99
7
+ data.tar.gz: 3c97672480884e0df29e3c29a868421156753ebef7512aed800872e2bd9a2f87a07ae045e526c3a9d80215a4f0fc0c216017c28d86bd308c626785d08e5323c1
data/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
+ 1.52.0 (2024-06-24)
5
+ ------------------
6
+
7
+ * Feature - Code Generated Changes, see `./build_tools` or `aws-sdk-core`'s CHANGELOG.md for details.
8
+
9
+ 1.51.0 (2024-06-11)
10
+ ------------------
11
+
12
+ * Feature - IAM Access Analyzer now provides policy recommendations to help resolve unused permissions for IAM roles and users. Additionally, IAM Access Analyzer now extends its custom policy checks to detect when IAM policies grant public access or access to critical resources ahead of deployments.
13
+
4
14
  1.50.0 (2024-06-05)
5
15
  ------------------
6
16
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.50.0
1
+ 1.52.0
@@ -89,6 +89,11 @@ module Aws::AccessAnalyzer
89
89
 
90
90
  # @overload initialize(options)
91
91
  # @param [Hash] options
92
+ #
93
+ # @option options [Array<Seahorse::Client::Plugin>] :plugins ([]])
94
+ # A list of plugins to apply to the client. Each plugin is either a
95
+ # class name or an instance of a plugin class.
96
+ #
92
97
  # @option options [required, Aws::CredentialProvider] :credentials
93
98
  # Your AWS credentials. This can be an instance of any one of the
94
99
  # following classes:
@@ -209,7 +214,6 @@ module Aws::AccessAnalyzer
209
214
  # 'https://example.com'
210
215
  # 'http://example.com:123'
211
216
  #
212
- #
213
217
  # @option options [Integer] :endpoint_cache_max_entries (1000)
214
218
  # Used for the maximum size limit of the LRU cache storing endpoints data
215
219
  # for endpoint discovery enabled operations. Defaults to 1000.
@@ -298,7 +302,6 @@ module Aws::AccessAnalyzer
298
302
  # throttling. This is a provisional mode that may change behavior
299
303
  # in the future.
300
304
  #
301
- #
302
305
  # @option options [String] :sdk_ua_app_id
303
306
  # A unique and opaque application ID that is appended to the
304
307
  # User-Agent header as app/sdk_ua_app_id. It should have a
@@ -479,7 +482,12 @@ module Aws::AccessAnalyzer
479
482
  #
480
483
  # @option params [required, Array<Types::Access>] :access
481
484
  # An access object containing the permissions that shouldn't be granted
482
- # by the specified policy.
485
+ # by the specified policy. If only actions are specified, IAM Access
486
+ # Analyzer checks for access of the actions on all resources in the
487
+ # policy. If only resources are specified, then IAM Access Analyzer
488
+ # checks which actions have access to the specified resources. If both
489
+ # actions and resources are specified, then IAM Access Analyzer checks
490
+ # which of the specified actions have access to the specified resources.
483
491
  #
484
492
  # @option params [required, String] :policy_type
485
493
  # The type of policy. Identity policies grant permissions to IAM
@@ -498,13 +506,82 @@ module Aws::AccessAnalyzer
498
506
  # * {Types::CheckAccessNotGrantedResponse#message #message} => String
499
507
  # * {Types::CheckAccessNotGrantedResponse#reasons #reasons} => Array&lt;Types::ReasonSummary&gt;
500
508
  #
509
+ #
510
+ # @example Example: Passing check. Restrictive identity policy.
511
+ #
512
+ # resp = client.check_access_not_granted({
513
+ # access: [
514
+ # {
515
+ # actions: [
516
+ # "s3:PutObject",
517
+ # ],
518
+ # },
519
+ # ],
520
+ # policy_document: "{\"Version\":\"2012-10-17\",\"Id\":\"123\",\"Statement\":[{\"Sid\":\"AllowJohnDoe\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::123456789012:user/JohnDoe\"},\"Action\":\"s3:GetObject\",\"Resource\":\"*\"}]}",
521
+ # policy_type: "RESOURCE_POLICY",
522
+ # })
523
+ #
524
+ # resp.to_h outputs the following:
525
+ # {
526
+ # message: "The policy document does not grant access to perform the listed actions or resources.",
527
+ # result: "PASS",
528
+ # }
529
+ #
530
+ # @example Example: Passing check. Restrictive S3 Bucket resource policy.
531
+ #
532
+ # resp = client.check_access_not_granted({
533
+ # access: [
534
+ # {
535
+ # resources: [
536
+ # "arn:aws:s3:::sensitive-bucket/*",
537
+ # ],
538
+ # },
539
+ # ],
540
+ # policy_document: "{\"Version\":\"2012-10-17\",\"Id\":\"123\",\"Statement\":[{\"Sid\":\"AllowJohnDoe\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::123456789012:user/JohnDoe\"},\"Action\":\"s3:PutObject\",\"Resource\":\"arn:aws:s3:::non-sensitive-bucket/*\"}]}",
541
+ # policy_type: "RESOURCE_POLICY",
542
+ # })
543
+ #
544
+ # resp.to_h outputs the following:
545
+ # {
546
+ # message: "The policy document does not grant access to perform the listed actions or resources.",
547
+ # result: "PASS",
548
+ # }
549
+ #
550
+ # @example Example: Failing check. Permissive S3 Bucket resource policy.
551
+ #
552
+ # resp = client.check_access_not_granted({
553
+ # access: [
554
+ # {
555
+ # resources: [
556
+ # "arn:aws:s3:::my-bucket/*",
557
+ # ],
558
+ # },
559
+ # ],
560
+ # policy_document: "{\"Version\":\"2012-10-17\",\"Id\":\"123\",\"Statement\":[{\"Sid\":\"AllowJohnDoe\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::123456789012:user/JohnDoe\"},\"Action\":\"s3:PutObject\",\"Resource\":\"arn:aws:s3:::my-bucket/*\"}]}",
561
+ # policy_type: "RESOURCE_POLICY",
562
+ # })
563
+ #
564
+ # resp.to_h outputs the following:
565
+ # {
566
+ # message: "The policy document grants access to perform one or more of the listed actions or resources.",
567
+ # reasons: [
568
+ # {
569
+ # description: "One or more of the listed actions or resources in the statement with sid: AllowJohnDoe.",
570
+ # statement_id: "AllowJohnDoe",
571
+ # statement_index: 0,
572
+ # },
573
+ # ],
574
+ # result: "FAIL",
575
+ # }
576
+ #
501
577
  # @example Request syntax with placeholder values
502
578
  #
503
579
  # resp = client.check_access_not_granted({
504
580
  # policy_document: "AccessCheckPolicyDocument", # required
505
581
  # access: [ # required
506
582
  # {
507
- # actions: ["Action"], # required
583
+ # actions: ["Action"],
584
+ # resources: ["Resource"],
508
585
  # },
509
586
  # ],
510
587
  # policy_type: "IDENTITY_POLICY", # required, accepts IDENTITY_POLICY, RESOURCE_POLICY
@@ -591,6 +668,85 @@ module Aws::AccessAnalyzer
591
668
  req.send_request(options)
592
669
  end
593
670
 
671
+ # Checks whether a resource policy can grant public access to the
672
+ # specified resource type.
673
+ #
674
+ # @option params [required, String] :policy_document
675
+ # The JSON policy document to evaluate for public access.
676
+ #
677
+ # @option params [required, String] :resource_type
678
+ # The type of resource to evaluate for public access. For example, to
679
+ # check for public access to Amazon S3 buckets, you can choose
680
+ # `AWS::S3::Bucket` for the resource type.
681
+ #
682
+ # For resource types not supported as valid values, IAM Access Analyzer
683
+ # will return an error.
684
+ #
685
+ # @return [Types::CheckNoPublicAccessResponse] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
686
+ #
687
+ # * {Types::CheckNoPublicAccessResponse#result #result} => String
688
+ # * {Types::CheckNoPublicAccessResponse#message #message} => String
689
+ # * {Types::CheckNoPublicAccessResponse#reasons #reasons} => Array&lt;Types::ReasonSummary&gt;
690
+ #
691
+ #
692
+ # @example Example: Passing check. S3 Bucket policy without public access.
693
+ #
694
+ # resp = client.check_no_public_access({
695
+ # policy_document: "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Bob\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::111122223333:user/JohnDoe\"},\"Action\":[\"s3:GetObject\"]}]}",
696
+ # resource_type: "AWS::S3::Bucket",
697
+ # })
698
+ #
699
+ # resp.to_h outputs the following:
700
+ # {
701
+ # message: "The resource policy does not grant public access for the given resource type.",
702
+ # result: "PASS",
703
+ # }
704
+ #
705
+ # @example Example: Failing check. S3 Bucket policy with public access.
706
+ #
707
+ # resp = client.check_no_public_access({
708
+ # policy_document: "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Bob\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":[\"s3:GetObject\"]}]}",
709
+ # resource_type: "AWS::S3::Bucket",
710
+ # })
711
+ #
712
+ # resp.to_h outputs the following:
713
+ # {
714
+ # message: "The resource policy grants public access for the given resource type.",
715
+ # reasons: [
716
+ # {
717
+ # description: "Public access granted in the following statement with sid: Bob.",
718
+ # statement_id: "Bob",
719
+ # statement_index: 0,
720
+ # },
721
+ # ],
722
+ # result: "FAIL",
723
+ # }
724
+ #
725
+ # @example Request syntax with placeholder values
726
+ #
727
+ # resp = client.check_no_public_access({
728
+ # policy_document: "AccessCheckPolicyDocument", # required
729
+ # resource_type: "AWS::DynamoDB::Table", # required, accepts AWS::DynamoDB::Table, AWS::DynamoDB::Stream, AWS::EFS::FileSystem, AWS::OpenSearchService::Domain, AWS::Kinesis::Stream, AWS::Kinesis::StreamConsumer, AWS::KMS::Key, AWS::Lambda::Function, AWS::S3::Bucket, AWS::S3::AccessPoint, AWS::S3Express::DirectoryBucket, AWS::S3::Glacier, AWS::S3Outposts::Bucket, AWS::S3Outposts::AccessPoint, AWS::SecretsManager::Secret, AWS::SNS::Topic, AWS::SQS::Queue, AWS::IAM::AssumeRolePolicyDocument
730
+ # })
731
+ #
732
+ # @example Response structure
733
+ #
734
+ # resp.result #=> String, one of "PASS", "FAIL"
735
+ # resp.message #=> String
736
+ # resp.reasons #=> Array
737
+ # resp.reasons[0].description #=> String
738
+ # resp.reasons[0].statement_index #=> Integer
739
+ # resp.reasons[0].statement_id #=> String
740
+ #
741
+ # @see http://docs.aws.amazon.com/goto/WebAPI/accessanalyzer-2019-11-01/CheckNoPublicAccess AWS API Documentation
742
+ #
743
+ # @overload check_no_public_access(params = {})
744
+ # @param [Hash] params ({})
745
+ def check_no_public_access(params = {}, options = {})
746
+ req = build_request(:check_no_public_access, params)
747
+ req.send_request(options)
748
+ end
749
+
594
750
  # Creates an access preview that allows you to preview IAM Access
595
751
  # Analyzer findings for your resource before deploying resource
596
752
  # permissions.
@@ -943,6 +1099,56 @@ module Aws::AccessAnalyzer
943
1099
  req.send_request(options)
944
1100
  end
945
1101
 
1102
+ # Creates a recommendation for an unused permissions finding.
1103
+ #
1104
+ # @option params [required, String] :analyzer_arn
1105
+ # The [ARN of the analyzer][1] used to generate the finding
1106
+ # recommendation.
1107
+ #
1108
+ #
1109
+ #
1110
+ # [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#permission-resources
1111
+ #
1112
+ # @option params [required, String] :id
1113
+ # The unique ID for the finding recommendation.
1114
+ #
1115
+ # @return [Struct] Returns an empty {Seahorse::Client::Response response}.
1116
+ #
1117
+ #
1118
+ # @example Example: Successfully started generating finding recommendation
1119
+ #
1120
+ # resp = client.generate_finding_recommendation({
1121
+ # analyzer_arn: "arn:aws:access-analyzer:us-east-1:111122223333:analyzer/a",
1122
+ # id: "finding-id",
1123
+ # })
1124
+ #
1125
+ # resp.to_h outputs the following:
1126
+ # {
1127
+ # }
1128
+ #
1129
+ # @example Example: Failed field validation for id value
1130
+ #
1131
+ # resp = client.generate_finding_recommendation({
1132
+ # analyzer_arn: "arn:aws:access-analyzer:us-east-1:111122223333:analyzer/a",
1133
+ # id: "!",
1134
+ # })
1135
+ #
1136
+ # @example Request syntax with placeholder values
1137
+ #
1138
+ # resp = client.generate_finding_recommendation({
1139
+ # analyzer_arn: "AnalyzerArn", # required
1140
+ # id: "GenerateFindingRecommendationRequestIdString", # required
1141
+ # })
1142
+ #
1143
+ # @see http://docs.aws.amazon.com/goto/WebAPI/accessanalyzer-2019-11-01/GenerateFindingRecommendation AWS API Documentation
1144
+ #
1145
+ # @overload generate_finding_recommendation(params = {})
1146
+ # @param [Hash] params ({})
1147
+ def generate_finding_recommendation(params = {}, options = {})
1148
+ req = build_request(:generate_finding_recommendation, params)
1149
+ req.send_request(options)
1150
+ end
1151
+
946
1152
  # Retrieves information about an access preview for the specified
947
1153
  # analyzer.
948
1154
  #
@@ -1225,6 +1431,151 @@ module Aws::AccessAnalyzer
1225
1431
  req.send_request(options)
1226
1432
  end
1227
1433
 
1434
+ # Retrieves information about a finding recommendation for the specified
1435
+ # analyzer.
1436
+ #
1437
+ # @option params [required, String] :analyzer_arn
1438
+ # The [ARN of the analyzer][1] used to generate the finding
1439
+ # recommendation.
1440
+ #
1441
+ #
1442
+ #
1443
+ # [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#permission-resources
1444
+ #
1445
+ # @option params [required, String] :id
1446
+ # The unique ID for the finding recommendation.
1447
+ #
1448
+ # @option params [Integer] :max_results
1449
+ # The maximum number of results to return in the response.
1450
+ #
1451
+ # @option params [String] :next_token
1452
+ # A token used for pagination of results returned.
1453
+ #
1454
+ # @return [Types::GetFindingRecommendationResponse] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
1455
+ #
1456
+ # * {Types::GetFindingRecommendationResponse#started_at #started_at} => Time
1457
+ # * {Types::GetFindingRecommendationResponse#completed_at #completed_at} => Time
1458
+ # * {Types::GetFindingRecommendationResponse#next_token #next_token} => String
1459
+ # * {Types::GetFindingRecommendationResponse#error #error} => Types::RecommendationError
1460
+ # * {Types::GetFindingRecommendationResponse#resource_arn #resource_arn} => String
1461
+ # * {Types::GetFindingRecommendationResponse#recommended_steps #recommended_steps} => Array&lt;Types::RecommendedStep&gt;
1462
+ # * {Types::GetFindingRecommendationResponse#recommendation_type #recommendation_type} => String
1463
+ # * {Types::GetFindingRecommendationResponse#status #status} => String
1464
+ #
1465
+ # The returned {Seahorse::Client::Response response} is a pageable response and is Enumerable. For details on usage see {Aws::PageableResponse PageableResponse}.
1466
+ #
1467
+ #
1468
+ # @example Example: Successfully fetched finding recommendation
1469
+ #
1470
+ # resp = client.get_finding_recommendation({
1471
+ # analyzer_arn: "arn:aws:access-analyzer:us-east-1:111122223333:analyzer/a",
1472
+ # id: "finding-id",
1473
+ # max_results: 3,
1474
+ # next_token: "token",
1475
+ # })
1476
+ #
1477
+ # resp.to_h outputs the following:
1478
+ # {
1479
+ # completed_at: Time.parse("2000-01-01T00:00:01Z"),
1480
+ # recommendation_type: "UnusedPermissionRecommendation",
1481
+ # recommended_steps: [
1482
+ # {
1483
+ # unused_permissions_recommended_step: {
1484
+ # existing_policy_id: "policy-id",
1485
+ # recommended_action: "DETACH_POLICY",
1486
+ # },
1487
+ # },
1488
+ # {
1489
+ # unused_permissions_recommended_step: {
1490
+ # existing_policy_id: "policy-id",
1491
+ # recommended_action: "CREATE_POLICY",
1492
+ # recommended_policy: "policy-content",
1493
+ # },
1494
+ # },
1495
+ # ],
1496
+ # resource_arn: "arn:aws:iam::111122223333:role/test",
1497
+ # started_at: Time.parse("2000-01-01T00:00:00Z"),
1498
+ # status: "SUCCEEDED",
1499
+ # }
1500
+ #
1501
+ # @example Example: In progress finding recommendation
1502
+ #
1503
+ # resp = client.get_finding_recommendation({
1504
+ # analyzer_arn: "arn:aws:access-analyzer:us-east-1:111122223333:analyzer/a",
1505
+ # id: "finding-id",
1506
+ # max_results: 3,
1507
+ # })
1508
+ #
1509
+ # resp.to_h outputs the following:
1510
+ # {
1511
+ # recommendation_type: "UnusedPermissionRecommendation",
1512
+ # resource_arn: "arn:aws:iam::111122223333:role/test",
1513
+ # started_at: Time.parse("2000-01-01T00:00:00Z"),
1514
+ # status: "IN_PROGRESS",
1515
+ # }
1516
+ #
1517
+ # @example Example: Failed finding recommendation
1518
+ #
1519
+ # resp = client.get_finding_recommendation({
1520
+ # analyzer_arn: "arn:aws:access-analyzer:us-east-1:111122223333:analyzer/a",
1521
+ # id: "finding-id",
1522
+ # max_results: 3,
1523
+ # })
1524
+ #
1525
+ # resp.to_h outputs the following:
1526
+ # {
1527
+ # completed_at: Time.parse("2000-01-01T00:00:01Z"),
1528
+ # error: {
1529
+ # code: "SERVICE_ERROR",
1530
+ # message: "Service error. Please try again.",
1531
+ # },
1532
+ # recommendation_type: "UnusedPermissionRecommendation",
1533
+ # resource_arn: "arn:aws:iam::111122223333:role/test",
1534
+ # started_at: Time.parse("2000-01-01T00:00:00Z"),
1535
+ # status: "FAILED",
1536
+ # }
1537
+ #
1538
+ # @example Example: Failed field validation for id value
1539
+ #
1540
+ # resp = client.get_finding_recommendation({
1541
+ # analyzer_arn: "arn:aws:access-analyzer:us-east-1:111122223333:analyzer/a",
1542
+ # id: "!",
1543
+ # })
1544
+ #
1545
+ # @example Request syntax with placeholder values
1546
+ #
1547
+ # resp = client.get_finding_recommendation({
1548
+ # analyzer_arn: "AnalyzerArn", # required
1549
+ # id: "GetFindingRecommendationRequestIdString", # required
1550
+ # max_results: 1,
1551
+ # next_token: "Token",
1552
+ # })
1553
+ #
1554
+ # @example Response structure
1555
+ #
1556
+ # resp.started_at #=> Time
1557
+ # resp.completed_at #=> Time
1558
+ # resp.next_token #=> String
1559
+ # resp.error.code #=> String
1560
+ # resp.error.message #=> String
1561
+ # resp.resource_arn #=> String
1562
+ # resp.recommended_steps #=> Array
1563
+ # resp.recommended_steps[0].unused_permissions_recommended_step.policy_updated_at #=> Time
1564
+ # resp.recommended_steps[0].unused_permissions_recommended_step.recommended_action #=> String, one of "CREATE_POLICY", "DETACH_POLICY"
1565
+ # resp.recommended_steps[0].unused_permissions_recommended_step.recommended_policy #=> String
1566
+ # resp.recommended_steps[0].unused_permissions_recommended_step.existing_policy_id #=> String
1567
+ # resp.recommendation_type #=> String, one of "UnusedPermissionRecommendation"
1568
+ # resp.status #=> String, one of "SUCCEEDED", "FAILED", "IN_PROGRESS"
1569
+ #
1570
+ # @see http://docs.aws.amazon.com/goto/WebAPI/accessanalyzer-2019-11-01/GetFindingRecommendation AWS API Documentation
1571
+ #
1572
+ # @overload get_finding_recommendation(params = {})
1573
+ # @param [Hash] params ({})
1574
+ def get_finding_recommendation(params = {}, options = {})
1575
+ req = build_request(:get_finding_recommendation, params)
1576
+ req.send_request(options)
1577
+ end
1578
+
1228
1579
  # Retrieves information about the specified finding. GetFinding and
1229
1580
  # GetFindingV2 both use `access-analyzer:GetFinding` in the `Action`
1230
1581
  # element of an IAM policy statement. You must have permission to
@@ -2276,7 +2627,7 @@ module Aws::AccessAnalyzer
2276
2627
  params: params,
2277
2628
  config: config)
2278
2629
  context[:gem_name] = 'aws-sdk-accessanalyzer'
2279
- context[:gem_version] = '1.50.0'
2630
+ context[:gem_version] = '1.52.0'
2280
2631
  Seahorse::Client::Request.new(handlers, context)
2281
2632
  end
2282
2633