public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonIoTConfig config = new AmazonIoTConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonIoTClient client = new AmazonIoTClient(creds, config);

            ListPoliciesResponse resp = new ListPoliciesResponse();

            do
            {
                ListPoliciesRequest req = new ListPoliciesRequest
                {
                    Marker = resp.NextMarker
                    ,
                    PageSize = maxItems
                };

                resp = client.ListPolicies(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.Policies)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.NextMarker));
        }
Beispiel #2
0
        public static string ExpandManagedPolicyName(IAmazonIdentityManagementService iamClient, string managedPolicy)
        {
            if (managedPolicy.StartsWith("arn:aws"))
            {
                return(managedPolicy);
            }

            // Wrapping this in a task to avoid dealing with aggregate exception.
            var task = Task.Run <string>(async() =>
            {
                var listResponse = new ListPoliciesResponse();
                do
                {
                    var listRequest = new ListPoliciesRequest {
                        Marker = listResponse.Marker, Scope = PolicyScopeType.All
                    };
                    listResponse = await iamClient.ListPoliciesAsync(listRequest).ConfigureAwait(false);
                    var policy   = listResponse.Policies.FirstOrDefault(x => string.Equals(managedPolicy, x.PolicyName));
                    if (policy != null)
                    {
                        return(policy.Arn);
                    }
                } while (listResponse.IsTruncated);

                return(null);
            });

            if (task.Result == null)
            {
                throw new ToolsException($"Policy \"{managedPolicy}\" can not be found.", ToolsException.CommonErrorCode.PolicyNotFound);
            }

            return(task.Result);
        }
Beispiel #3
0
        public static ListPoliciesResponse Unmarshall(UnmarshallerContext context)
        {
            ListPoliciesResponse listPoliciesResponse = new ListPoliciesResponse();

            listPoliciesResponse.HttpResponse = context.HttpResponse;
            listPoliciesResponse.RequestId    = context.StringValue("ListPolicies.RequestId");
            listPoliciesResponse.IsTruncated  = context.BooleanValue("ListPolicies.IsTruncated");
            listPoliciesResponse.Marker       = context.StringValue("ListPolicies.Marker");

            List <ListPoliciesResponse.ListPolicies_Policy> listPoliciesResponse_policies = new List <ListPoliciesResponse.ListPolicies_Policy>();

            for (int i = 0; i < context.Length("ListPolicies.Policies.Length"); i++)
            {
                ListPoliciesResponse.ListPolicies_Policy policy = new ListPoliciesResponse.ListPolicies_Policy();
                policy.PolicyName      = context.StringValue("ListPolicies.Policies[" + i + "].PolicyName");
                policy.PolicyType      = context.StringValue("ListPolicies.Policies[" + i + "].PolicyType");
                policy.Description     = context.StringValue("ListPolicies.Policies[" + i + "].Description");
                policy.DefaultVersion  = context.StringValue("ListPolicies.Policies[" + i + "].DefaultVersion");
                policy.CreateDate      = context.StringValue("ListPolicies.Policies[" + i + "].CreateDate");
                policy.UpdateDate      = context.StringValue("ListPolicies.Policies[" + i + "].UpdateDate");
                policy.AttachmentCount = context.IntegerValue("ListPolicies.Policies[" + i + "].AttachmentCount");

                listPoliciesResponse_policies.Add(policy);
            }
            listPoliciesResponse.Policies = listPoliciesResponse_policies;

            return(listPoliciesResponse);
        }
Beispiel #4
0
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            ListPoliciesResponse response = new ListPoliciesResponse();

            context.Read();
            int targetDepth = context.CurrentDepth;

            while (context.ReadAtDepth(targetDepth))
            {
                if (context.TestExpression("NextToken", targetDepth))
                {
                    var unmarshaller = StringUnmarshaller.Instance;
                    response.NextToken = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("PolicyList", targetDepth))
                {
                    var unmarshaller = new ListUnmarshaller <PolicySummary, PolicySummaryUnmarshaller>(PolicySummaryUnmarshaller.Instance);
                    response.PolicyList = unmarshaller.Unmarshall(context);
                    continue;
                }
            }

            return(response);
        }
Beispiel #5
0
        public static async Task <IList <ManagedPolicy> > FindManagedPoliciesAsync(IAmazonIdentityManagementService iamClient, PromptRoleInfo promptInfo, int maxPolicies)
        {
            ListPoliciesRequest request = new ListPoliciesRequest
            {
                Scope = PolicyScopeType.AWS,
            };
            ListPoliciesResponse response = null;

            IList <ManagedPolicy> policies = new List <ManagedPolicy>();

            do
            {
                request.Marker = response?.Marker;
                response       = await iamClient.ListPoliciesAsync(request).ConfigureAwait(false);

                foreach (var policy in response.Policies)
                {
                    if (policy.IsAttachable &&
                        (promptInfo.KnownManagedPolicyDescription.ContainsKey(policy.PolicyName) ||
                         (promptInfo.AWSManagedPolicyNamePrefix != null && policy.PolicyName.StartsWith(promptInfo.AWSManagedPolicyNamePrefix)))
                        )
                    {
                        policies.Add(policy);
                    }

                    if (policies.Count == maxPolicies)
                    {
                        return(policies);
                    }
                }
            } while (response.IsTruncated);

            response = await iamClient.ListPoliciesAsync(new ListPoliciesRequest
            {
                Scope = PolicyScopeType.Local
            });

            foreach (var policy in response.Policies)
            {
                if (policy.IsAttachable)
                {
                    policies.Add(policy);
                }

                if (policies.Count == maxPolicies)
                {
                    return(policies);
                }
            }


            return(policies);
        }
Beispiel #6
0
        public static async Task <IList <ManagedPolicy> > FindManagedPoliciesAsync(IAmazonIdentityManagementService iamClient, int maxPolicies)
        {
            ListPoliciesRequest request = new ListPoliciesRequest
            {
                Scope = PolicyScopeType.AWS,
            };
            ListPoliciesResponse response = null;

            IList <ManagedPolicy> policies = new List <ManagedPolicy>();

            do
            {
                request.Marker = response?.Marker;
                response       = await iamClient.ListPoliciesAsync(request).ConfigureAwait(false);

                foreach (var policy in response.Policies)
                {
                    if (policy.IsAttachable && KNOWN_MANAGED_POLICY_DESCRIPTIONS.ContainsKey(policy.PolicyName))
                    {
                        policies.Add(policy);
                    }

                    if (policies.Count == maxPolicies)
                    {
                        return(policies);
                    }
                }
            } while (response.IsTruncated);

            response = await iamClient.ListPoliciesAsync(new ListPoliciesRequest
            {
                Scope = PolicyScopeType.Local
            });

            foreach (var policy in response.Policies)
            {
                if (policy.IsAttachable)
                {
                    policies.Add(policy);
                }

                if (policies.Count == maxPolicies)
                {
                    return(policies);
                }
            }


            return(policies);
        }
Beispiel #7
0
        public static async Task <IList <ManagedPolicy> > FindLambdaManagedPoliciesAsync(IAmazonIdentityManagementService iamClient, int maxPolicies)
        {
            ListPoliciesRequest request = new ListPoliciesRequest
            {
                Scope = PolicyScopeType.AWS,
            };
            ListPoliciesResponse response = null;

            IList <ManagedPolicy> lambdaPolicies = new List <ManagedPolicy>();

            do
            {
                request.Marker = response?.Marker;
                response       = await iamClient.ListPoliciesAsync(request).ConfigureAwait(false);

                foreach (var policy in response.Policies)
                {
                    if (policy.IsAttachable && (policy.PolicyName.StartsWith("AWSLambda") || string.Equals(policy.PolicyName, "PowerUserAccess", StringComparison.Ordinal)))
                    {
                        lambdaPolicies.Add(policy);
                    }

                    if (lambdaPolicies.Count == maxPolicies)
                    {
                        return(lambdaPolicies);
                    }
                }
            } while (response.IsTruncated);

            response = await iamClient.ListPoliciesAsync(new ListPoliciesRequest
            {
                Scope = PolicyScopeType.Local
            });

            foreach (var policy in response.Policies)
            {
                if (policy.IsAttachable)
                {
                    lambdaPolicies.Add(policy);
                }

                if (lambdaPolicies.Count == maxPolicies)
                {
                    return(lambdaPolicies);
                }
            }


            return(lambdaPolicies);
        }
        private static void UnmarshallResult(XmlUnmarshallerContext context, ListPoliciesResponse response)
        {
            int originalDepth = context.CurrentDepth;
            int targetDepth   = originalDepth + 1;

            if (context.IsStartOfDocument)
            {
                targetDepth += 2;
            }

            while (context.ReadAtDepth(originalDepth))
            {
                if (context.IsStartElement || context.IsAttribute)
                {
                    if (context.TestExpression("IsTruncated", targetDepth))
                    {
                        var unmarshaller = BoolUnmarshaller.Instance;
                        response.IsTruncated = unmarshaller.Unmarshall(context);
                        continue;
                    }
                    if (context.TestExpression("Marker", targetDepth))
                    {
                        var unmarshaller = StringUnmarshaller.Instance;
                        response.Marker = unmarshaller.Unmarshall(context);
                        continue;
                    }
                    if (context.TestExpression("Policies/member", targetDepth))
                    {
                        var unmarshaller = ManagedPolicyUnmarshaller.Instance;
                        var item         = unmarshaller.Unmarshall(context);
                        response.Policies.Add(item);
                        continue;
                    }
                }
            }

            return;
        }
Beispiel #9
0
        /// <summary>
        /// Initializes an Organizations client object, and then calls its
        /// ListPolliciesAsync method.
        /// </summary>
        public static async Task Main()
        {
            // Create the client object using the default account.
            IAmazonOrganizations client = new AmazonOrganizationsClient();

            // The value for the Filter parameter is required and must must be
            // one of the following:
            //     AISERVICES_OPT_OUT_POLICY
            //     BACKUP_POLICY
            //     SERVICE_CONTROL_POLICY
            //     TAG_POLICY
            var request = new ListPoliciesRequest
            {
                Filter     = "SERVICE_CONTROL_POLICY",
                MaxResults = 5,
            };

            var response = new ListPoliciesResponse();

            try
            {
                do
                {
                    response = await client.ListPoliciesAsync(request);

                    response.Policies.ForEach(p => DisplayPolicies(p));
                    if (response.NextToken is not null)
                    {
                        request.NextToken = response.NextToken;
                    }
                } while (response.NextToken is not null);
            }
            catch (AWSOrganizationsNotInUseException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }