<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="cloudasset_v1p4beta1.html">Cloud Asset API</a> . <a href="cloudasset_v1p4beta1.v1p4beta1.html">v1p4beta1</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#analyzeIamPolicy">analyzeIamPolicy(parent, options_executionTimeout=None, analysisQuery_identitySelector_identity=None, options_outputGroupEdges=None, options_expandResources=None, analysisQuery_accessSelector_permissions=None, analysisQuery_resourceSelector_fullResourceName=None, analysisQuery_accessSelector_roles=None, options_expandRoles=None, options_analyzeServiceAccountImpersonation=None, options_outputResourceEdges=None, options_expandGroups=None, x__xgafv=None)</a></code></p>
<p class="firstline">Analyzes IAM policies to answer which identities have what accesses on which resources.</p>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#exportIamPolicyAnalysis">exportIamPolicyAnalysis(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Exports the answers of which identities have what accesses on which resources to a Google Cloud Storage destination. The output format is the JSON format that represents a AnalyzeIamPolicyResponse in the JSON format. This method implements the google.longrunning.Operation, which allows you to keep track of the export. We recommend intervals of at least 2 seconds with exponential retry to poll the export operation result. The metadata contains the request to help callers to map responses to requests.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="analyzeIamPolicy">analyzeIamPolicy(parent, options_executionTimeout=None, analysisQuery_identitySelector_identity=None, options_outputGroupEdges=None, options_expandResources=None, analysisQuery_accessSelector_permissions=None, analysisQuery_resourceSelector_fullResourceName=None, analysisQuery_accessSelector_roles=None, options_expandRoles=None, options_analyzeServiceAccountImpersonation=None, options_outputResourceEdges=None, options_expandGroups=None, x__xgafv=None)</code>
  <pre>Analyzes IAM policies to answer which identities have what accesses on which resources.

Args:
  parent: string, Required. The relative name of the root asset. Only resources and IAM policies within the parent will be analyzed. This can only be an organization number (such as &quot;organizations/123&quot;), a folder number (such as &quot;folders/123&quot;), a project ID (such as &quot;projects/my-project-id&quot;), or a project number (such as &quot;projects/12345&quot;). To know how to get organization id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). To know how to get folder or project id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects). (required)
  options_executionTimeout: string, Optional. Amount of time executable has to complete. See JSON representation of [Duration](https://developers.google.com/protocol-buffers/docs/proto3#json). If this field is set with a value less than the RPC deadline, and the execution of your query hasn&#x27;t finished in the specified execution timeout, you will get a response with partial result. Otherwise, your query&#x27;s execution will continue until the RPC deadline. If it&#x27;s not finished until then, you will get a DEADLINE_EXCEEDED error. Default is empty.
  analysisQuery_identitySelector_identity: string, Required. The identity appear in the form of members in [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding). The examples of supported forms are: &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot;. Notice that wildcard characters (such as * and ?) are not supported. You must give a specific identity.
  options_outputGroupEdges: boolean, Optional. If true, the result will output group identity edges, starting from the binding&#x27;s group members, to any expanded identities. Default is false.
  options_expandResources: boolean, Optional. If true, the resource section of the result will expand any resource attached to an IAM policy to include resources lower in the resource hierarchy. For example, if the request analyzes for which resources user A has permission P, and the results include an IAM policy with P on a GCP folder, the results will also include resources in that folder with permission P. If resource_selector is specified, the resource section of the result will be determined by the selector, and this flag will have no effect. Default is false.
  analysisQuery_accessSelector_permissions: string, Optional. The permissions to appear in result. (repeated)
  analysisQuery_resourceSelector_fullResourceName: string, Required. The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) of a resource of [supported resource types](https://cloud.google.com/asset-inventory/docs/supported-asset-types#analyzable_asset_types).
  analysisQuery_accessSelector_roles: string, Optional. The roles to appear in result. (repeated)
  options_expandRoles: boolean, Optional. If true, the access section of result will expand any roles appearing in IAM policy bindings to include their permissions. If access_selector is specified, the access section of the result will be determined by the selector, and this flag will have no effect. Default is false.
  options_analyzeServiceAccountImpersonation: boolean, Optional. If true, the response will include access analysis from identities to resources via service account impersonation. This is a very expensive operation, because many derived queries will be executed. We highly recommend you use AssetService.ExportIamPolicyAnalysis rpc instead. For example, if the request analyzes for which resources user A has permission P, and there&#x27;s an IAM policy states user A has iam.serviceAccounts.getAccessToken permission to a service account SA, and there&#x27;s another IAM policy states service account SA has permission P to a GCP folder F, then user A potentially has access to the GCP folder F. And those advanced analysis results will be included in AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Another example, if the request analyzes for who has permission P to a GCP folder F, and there&#x27;s an IAM policy states user A has iam.serviceAccounts.actAs permission to a service account SA, and there&#x27;s another IAM policy states service account SA has permission P to the GCP folder F, then user A potentially has access to the GCP folder F. And those advanced analysis results will be included in AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Default is false.
  options_outputResourceEdges: boolean, Optional. If true, the result will output resource edges, starting from the policy attached resource, to any expanded resources. Default is false.
  options_expandGroups: boolean, Optional. If true, the identities section of the result will expand any Google groups appearing in an IAM policy binding. If identity_selector is specified, the identity in the result will be determined by the selector, and this flag will have no effect. Default is false.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A response message for AssetService.AnalyzeIamPolicy.
    &quot;serviceAccountImpersonationAnalysis&quot;: [ # The service account impersonation analysis if AnalyzeIamPolicyRequest.analyze_service_account_impersonation is enabled.
      { # An analysis message to group the query and results.
        &quot;analysisQuery&quot;: { # IAM policy analysis query message. # The analysis query.
          &quot;resourceSelector&quot;: { # Specifies the resource to analyze for access policies, which may be set directly on the resource, or on ancestors such as organizations, folders or projects. # Optional. Specifies a resource for analysis.
            &quot;fullResourceName&quot;: &quot;A String&quot;, # Required. The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) of a resource of [supported resource types](https://cloud.google.com/asset-inventory/docs/supported-asset-types#analyzable_asset_types).
          },
          &quot;identitySelector&quot;: { # Specifies an identity for which to determine resource access, based on roles assigned either directly to them or to the groups they belong to, directly or indirectly. # Optional. Specifies an identity for analysis.
            &quot;identity&quot;: &quot;A String&quot;, # Required. The identity appear in the form of members in [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding). The examples of supported forms are: &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot;. Notice that wildcard characters (such as * and ?) are not supported. You must give a specific identity.
          },
          &quot;parent&quot;: &quot;A String&quot;, # Required. The relative name of the root asset. Only resources and IAM policies within the parent will be analyzed. This can only be an organization number (such as &quot;organizations/123&quot;), a folder number (such as &quot;folders/123&quot;), a project ID (such as &quot;projects/my-project-id&quot;), or a project number (such as &quot;projects/12345&quot;). To know how to get organization id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). To know how to get folder or project id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects).
          &quot;accessSelector&quot;: { # Specifies roles and/or permissions to analyze, to determine both the identities possessing them and the resources they control. If multiple values are specified, results will include identities and resources matching any of them. The total number of roles and permissions should be equal or less than 10. # Optional. Specifies roles or permissions for analysis. This is optional.
            &quot;permissions&quot;: [ # Optional. The permissions to appear in result.
              &quot;A String&quot;,
            ],
            &quot;roles&quot;: [ # Optional. The roles to appear in result.
              &quot;A String&quot;,
            ],
          },
        },
        &quot;analysisResults&quot;: [ # A list of IamPolicyAnalysisResult that matches the analysis query, or empty if no result is found.
          { # IAM Policy analysis result, consisting of one IAM policy binding and derived access control lists.
            &quot;identityList&quot;: { # The identity list derived from members of the iam_binding that match or potentially match identity selector specified in the request.
              &quot;identities&quot;: [ # Only the identities that match one of the following conditions will be presented: - The identity_selector, if it is specified in request; - Otherwise, identities reachable from the policy binding&#x27;s members.
                { # An identity under analysis.
                  &quot;name&quot;: &quot;A String&quot;, # The identity name in any form of members appear in [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding), such as: - user:foo@google.com - group:group1@google.com - serviceAccount:s1@prj1.iam.gserviceaccount.com - projectOwner:some_project_id - domain:google.com - allUsers - etc.
                  &quot;analysisState&quot;: { # Represents the detailed state of an entity under analysis, such as a resource, an identity or an access. # The analysis state of this identity.
                    &quot;code&quot;: &quot;A String&quot;, # The Google standard error code that best describes the state. For example: - OK means the analysis on this entity has been successfully finished; - PERMISSION_DENIED means an access denied error is encountered; - DEADLINE_EXCEEDED means the analysis on this entity hasn&#x27;t been started in time;
                    &quot;cause&quot;: &quot;A String&quot;, # The human-readable description of the cause of failure.
                  },
                },
              ],
              &quot;groupEdges&quot;: [ # Group identity edges of the graph starting from the binding&#x27;s group members to any node of the identities. The Edge.source_node contains a group, such as &quot;group:parent@google.com&quot;. The Edge.target_node contains a member of the group, such as &quot;group:child@google.com&quot; or &quot;user:foo@google.com&quot;. This field is present only if the output_group_edges option is enabled in request.
                { # A directional edge.
                  &quot;sourceNode&quot;: &quot;A String&quot;, # The source node of the edge.
                  &quot;targetNode&quot;: &quot;A String&quot;, # The target node of the edge.
                },
              ],
            },
            &quot;fullyExplored&quot;: True or False, # Represents whether all analyses on the iam_binding have successfully finished.
            &quot;iamBinding&quot;: { # Associates `members` with a `role`. # The Cloud IAM policy binding under analysis.
              &quot;members&quot;: [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
                &quot;A String&quot;,
              ],
              &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
              &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
                &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
                &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
                &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
                &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
              },
            },
            &quot;attachedResourceFullName&quot;: &quot;A String&quot;, # The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) of the resource to which the iam_binding policy attaches.
            &quot;accessControlLists&quot;: [ # The access control lists derived from the iam_binding that match or potentially match resource and access selectors specified in the request.
              { # An access control list, derived from the above IAM policy binding, which contains a set of resources and accesses. May include one item from each set to compose an access control entry. NOTICE that there could be multiple access control lists for one IAM policy binding. The access control lists are created based on resource and access combinations. For example, assume we have the following cases in one IAM policy binding: - Permission P1 and P2 apply to resource R1 and R2; - Permission P3 applies to resource R2 and R3; This will result in the following access control lists: - AccessControlList 1: [R1, R2], [P1, P2] - AccessControlList 2: [R2, R3], [P3]
                &quot;resourceEdges&quot;: [ # Resource edges of the graph starting from the policy attached resource to any descendant resources. The Edge.source_node contains the full resource name of a parent resource and Edge.target_node contains the full resource name of a child resource. This field is present only if the output_resource_edges option is enabled in request.
                  { # A directional edge.
                    &quot;sourceNode&quot;: &quot;A String&quot;, # The source node of the edge.
                    &quot;targetNode&quot;: &quot;A String&quot;, # The target node of the edge.
                  },
                ],
                &quot;resources&quot;: [ # The resources that match one of the following conditions: - The resource_selector, if it is specified in request; - Otherwise, resources reachable from the policy attached resource.
                  { # A Google Cloud resource under analysis.
                    &quot;fullResourceName&quot;: &quot;A String&quot;, # The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format)
                    &quot;analysisState&quot;: { # Represents the detailed state of an entity under analysis, such as a resource, an identity or an access. # The analysis state of this resource.
                      &quot;code&quot;: &quot;A String&quot;, # The Google standard error code that best describes the state. For example: - OK means the analysis on this entity has been successfully finished; - PERMISSION_DENIED means an access denied error is encountered; - DEADLINE_EXCEEDED means the analysis on this entity hasn&#x27;t been started in time;
                      &quot;cause&quot;: &quot;A String&quot;, # The human-readable description of the cause of failure.
                    },
                  },
                ],
                &quot;accesses&quot;: [ # The accesses that match one of the following conditions: - The access_selector, if it is specified in request; - Otherwise, access specifiers reachable from the policy binding&#x27;s role.
                  { # An IAM role or permission under analysis.
                    &quot;analysisState&quot;: { # Represents the detailed state of an entity under analysis, such as a resource, an identity or an access. # The analysis state of this access.
                      &quot;code&quot;: &quot;A String&quot;, # The Google standard error code that best describes the state. For example: - OK means the analysis on this entity has been successfully finished; - PERMISSION_DENIED means an access denied error is encountered; - DEADLINE_EXCEEDED means the analysis on this entity hasn&#x27;t been started in time;
                      &quot;cause&quot;: &quot;A String&quot;, # The human-readable description of the cause of failure.
                    },
                    &quot;permission&quot;: &quot;A String&quot;, # The permission.
                    &quot;role&quot;: &quot;A String&quot;, # The role.
                  },
                ],
              },
            ],
          },
        ],
        &quot;fullyExplored&quot;: True or False, # Represents whether all entries in the analysis_results have been fully explored to answer the query.
      },
    ],
    &quot;fullyExplored&quot;: True or False, # Represents whether all entries in the main_analysis and service_account_impersonation_analysis have been fully explored to answer the query in the request.
    &quot;nonCriticalErrors&quot;: [ # A list of non-critical errors happened during the request handling to explain why `fully_explored` is false, or empty if no error happened.
      { # Represents the detailed state of an entity under analysis, such as a resource, an identity or an access.
        &quot;code&quot;: &quot;A String&quot;, # The Google standard error code that best describes the state. For example: - OK means the analysis on this entity has been successfully finished; - PERMISSION_DENIED means an access denied error is encountered; - DEADLINE_EXCEEDED means the analysis on this entity hasn&#x27;t been started in time;
        &quot;cause&quot;: &quot;A String&quot;, # The human-readable description of the cause of failure.
      },
    ],
    &quot;mainAnalysis&quot;: { # An analysis message to group the query and results. # The main analysis that matches the original request.
      &quot;analysisQuery&quot;: { # IAM policy analysis query message. # The analysis query.
        &quot;resourceSelector&quot;: { # Specifies the resource to analyze for access policies, which may be set directly on the resource, or on ancestors such as organizations, folders or projects. # Optional. Specifies a resource for analysis.
          &quot;fullResourceName&quot;: &quot;A String&quot;, # Required. The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) of a resource of [supported resource types](https://cloud.google.com/asset-inventory/docs/supported-asset-types#analyzable_asset_types).
        },
        &quot;identitySelector&quot;: { # Specifies an identity for which to determine resource access, based on roles assigned either directly to them or to the groups they belong to, directly or indirectly. # Optional. Specifies an identity for analysis.
          &quot;identity&quot;: &quot;A String&quot;, # Required. The identity appear in the form of members in [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding). The examples of supported forms are: &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot;. Notice that wildcard characters (such as * and ?) are not supported. You must give a specific identity.
        },
        &quot;parent&quot;: &quot;A String&quot;, # Required. The relative name of the root asset. Only resources and IAM policies within the parent will be analyzed. This can only be an organization number (such as &quot;organizations/123&quot;), a folder number (such as &quot;folders/123&quot;), a project ID (such as &quot;projects/my-project-id&quot;), or a project number (such as &quot;projects/12345&quot;). To know how to get organization id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). To know how to get folder or project id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects).
        &quot;accessSelector&quot;: { # Specifies roles and/or permissions to analyze, to determine both the identities possessing them and the resources they control. If multiple values are specified, results will include identities and resources matching any of them. The total number of roles and permissions should be equal or less than 10. # Optional. Specifies roles or permissions for analysis. This is optional.
          &quot;permissions&quot;: [ # Optional. The permissions to appear in result.
            &quot;A String&quot;,
          ],
          &quot;roles&quot;: [ # Optional. The roles to appear in result.
            &quot;A String&quot;,
          ],
        },
      },
      &quot;analysisResults&quot;: [ # A list of IamPolicyAnalysisResult that matches the analysis query, or empty if no result is found.
        { # IAM Policy analysis result, consisting of one IAM policy binding and derived access control lists.
          &quot;identityList&quot;: { # The identity list derived from members of the iam_binding that match or potentially match identity selector specified in the request.
            &quot;identities&quot;: [ # Only the identities that match one of the following conditions will be presented: - The identity_selector, if it is specified in request; - Otherwise, identities reachable from the policy binding&#x27;s members.
              { # An identity under analysis.
                &quot;name&quot;: &quot;A String&quot;, # The identity name in any form of members appear in [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding), such as: - user:foo@google.com - group:group1@google.com - serviceAccount:s1@prj1.iam.gserviceaccount.com - projectOwner:some_project_id - domain:google.com - allUsers - etc.
                &quot;analysisState&quot;: { # Represents the detailed state of an entity under analysis, such as a resource, an identity or an access. # The analysis state of this identity.
                  &quot;code&quot;: &quot;A String&quot;, # The Google standard error code that best describes the state. For example: - OK means the analysis on this entity has been successfully finished; - PERMISSION_DENIED means an access denied error is encountered; - DEADLINE_EXCEEDED means the analysis on this entity hasn&#x27;t been started in time;
                  &quot;cause&quot;: &quot;A String&quot;, # The human-readable description of the cause of failure.
                },
              },
            ],
            &quot;groupEdges&quot;: [ # Group identity edges of the graph starting from the binding&#x27;s group members to any node of the identities. The Edge.source_node contains a group, such as &quot;group:parent@google.com&quot;. The Edge.target_node contains a member of the group, such as &quot;group:child@google.com&quot; or &quot;user:foo@google.com&quot;. This field is present only if the output_group_edges option is enabled in request.
              { # A directional edge.
                &quot;sourceNode&quot;: &quot;A String&quot;, # The source node of the edge.
                &quot;targetNode&quot;: &quot;A String&quot;, # The target node of the edge.
              },
            ],
          },
          &quot;fullyExplored&quot;: True or False, # Represents whether all analyses on the iam_binding have successfully finished.
          &quot;iamBinding&quot;: { # Associates `members` with a `role`. # The Cloud IAM policy binding under analysis.
            &quot;members&quot;: [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
              &quot;A String&quot;,
            ],
            &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
            &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
              &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
              &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
              &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
              &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
            },
          },
          &quot;attachedResourceFullName&quot;: &quot;A String&quot;, # The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) of the resource to which the iam_binding policy attaches.
          &quot;accessControlLists&quot;: [ # The access control lists derived from the iam_binding that match or potentially match resource and access selectors specified in the request.
            { # An access control list, derived from the above IAM policy binding, which contains a set of resources and accesses. May include one item from each set to compose an access control entry. NOTICE that there could be multiple access control lists for one IAM policy binding. The access control lists are created based on resource and access combinations. For example, assume we have the following cases in one IAM policy binding: - Permission P1 and P2 apply to resource R1 and R2; - Permission P3 applies to resource R2 and R3; This will result in the following access control lists: - AccessControlList 1: [R1, R2], [P1, P2] - AccessControlList 2: [R2, R3], [P3]
              &quot;resourceEdges&quot;: [ # Resource edges of the graph starting from the policy attached resource to any descendant resources. The Edge.source_node contains the full resource name of a parent resource and Edge.target_node contains the full resource name of a child resource. This field is present only if the output_resource_edges option is enabled in request.
                { # A directional edge.
                  &quot;sourceNode&quot;: &quot;A String&quot;, # The source node of the edge.
                  &quot;targetNode&quot;: &quot;A String&quot;, # The target node of the edge.
                },
              ],
              &quot;resources&quot;: [ # The resources that match one of the following conditions: - The resource_selector, if it is specified in request; - Otherwise, resources reachable from the policy attached resource.
                { # A Google Cloud resource under analysis.
                  &quot;fullResourceName&quot;: &quot;A String&quot;, # The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format)
                  &quot;analysisState&quot;: { # Represents the detailed state of an entity under analysis, such as a resource, an identity or an access. # The analysis state of this resource.
                    &quot;code&quot;: &quot;A String&quot;, # The Google standard error code that best describes the state. For example: - OK means the analysis on this entity has been successfully finished; - PERMISSION_DENIED means an access denied error is encountered; - DEADLINE_EXCEEDED means the analysis on this entity hasn&#x27;t been started in time;
                    &quot;cause&quot;: &quot;A String&quot;, # The human-readable description of the cause of failure.
                  },
                },
              ],
              &quot;accesses&quot;: [ # The accesses that match one of the following conditions: - The access_selector, if it is specified in request; - Otherwise, access specifiers reachable from the policy binding&#x27;s role.
                { # An IAM role or permission under analysis.
                  &quot;analysisState&quot;: { # Represents the detailed state of an entity under analysis, such as a resource, an identity or an access. # The analysis state of this access.
                    &quot;code&quot;: &quot;A String&quot;, # The Google standard error code that best describes the state. For example: - OK means the analysis on this entity has been successfully finished; - PERMISSION_DENIED means an access denied error is encountered; - DEADLINE_EXCEEDED means the analysis on this entity hasn&#x27;t been started in time;
                    &quot;cause&quot;: &quot;A String&quot;, # The human-readable description of the cause of failure.
                  },
                  &quot;permission&quot;: &quot;A String&quot;, # The permission.
                  &quot;role&quot;: &quot;A String&quot;, # The role.
                },
              ],
            },
          ],
        },
      ],
      &quot;fullyExplored&quot;: True or False, # Represents whether all entries in the analysis_results have been fully explored to answer the query.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="exportIamPolicyAnalysis">exportIamPolicyAnalysis(parent, body=None, x__xgafv=None)</code>
  <pre>Exports the answers of which identities have what accesses on which resources to a Google Cloud Storage destination. The output format is the JSON format that represents a AnalyzeIamPolicyResponse in the JSON format. This method implements the google.longrunning.Operation, which allows you to keep track of the export. We recommend intervals of at least 2 seconds with exponential retry to poll the export operation result. The metadata contains the request to help callers to map responses to requests.

Args:
  parent: string, Required. The relative name of the root asset. Only resources and IAM policies within the parent will be analyzed. This can only be an organization number (such as &quot;organizations/123&quot;), a folder number (such as &quot;folders/123&quot;), a project ID (such as &quot;projects/my-project-id&quot;), or a project number (such as &quot;projects/12345&quot;). To know how to get organization id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). To know how to get folder or project id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects). (required)
  body: object, The request body.
    The object takes the form of:

{ # A request message for AssetService.ExportIamPolicyAnalysis.
    &quot;analysisQuery&quot;: { # IAM policy analysis query message. # Required. The request query.
      &quot;resourceSelector&quot;: { # Specifies the resource to analyze for access policies, which may be set directly on the resource, or on ancestors such as organizations, folders or projects. # Optional. Specifies a resource for analysis.
        &quot;fullResourceName&quot;: &quot;A String&quot;, # Required. The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) of a resource of [supported resource types](https://cloud.google.com/asset-inventory/docs/supported-asset-types#analyzable_asset_types).
      },
      &quot;identitySelector&quot;: { # Specifies an identity for which to determine resource access, based on roles assigned either directly to them or to the groups they belong to, directly or indirectly. # Optional. Specifies an identity for analysis.
        &quot;identity&quot;: &quot;A String&quot;, # Required. The identity appear in the form of members in [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding). The examples of supported forms are: &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot;. Notice that wildcard characters (such as * and ?) are not supported. You must give a specific identity.
      },
      &quot;parent&quot;: &quot;A String&quot;, # Required. The relative name of the root asset. Only resources and IAM policies within the parent will be analyzed. This can only be an organization number (such as &quot;organizations/123&quot;), a folder number (such as &quot;folders/123&quot;), a project ID (such as &quot;projects/my-project-id&quot;), or a project number (such as &quot;projects/12345&quot;). To know how to get organization id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). To know how to get folder or project id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects).
      &quot;accessSelector&quot;: { # Specifies roles and/or permissions to analyze, to determine both the identities possessing them and the resources they control. If multiple values are specified, results will include identities and resources matching any of them. The total number of roles and permissions should be equal or less than 10. # Optional. Specifies roles or permissions for analysis. This is optional.
        &quot;permissions&quot;: [ # Optional. The permissions to appear in result.
          &quot;A String&quot;,
        ],
        &quot;roles&quot;: [ # Optional. The roles to appear in result.
          &quot;A String&quot;,
        ],
      },
    },
    &quot;outputConfig&quot;: { # Output configuration for export IAM policy analysis destination. # Required. Output configuration indicating where the results will be output to.
      &quot;gcsDestination&quot;: { # A Cloud Storage location. # Destination on Cloud Storage.
        &quot;uri&quot;: &quot;A String&quot;, # Required. The uri of the Cloud Storage object. It&#x27;s the same uri that is used by gsutil. For example: &quot;gs://bucket_name/object_name&quot;. See [Quickstart: Using the gsutil tool] (https://cloud.google.com/storage/docs/quickstart-gsutil) for examples.
      },
    },
    &quot;options&quot;: { # Contains request options. # Optional. The request options.
      &quot;expandGroups&quot;: True or False, # Optional. If true, the identities section of the result will expand any Google groups appearing in an IAM policy binding. If identity_selector is specified, the identity in the result will be determined by the selector, and this flag will have no effect. Default is false.
      &quot;analyzeServiceAccountImpersonation&quot;: True or False, # Optional. If true, the response will include access analysis from identities to resources via service account impersonation. This is a very expensive operation, because many derived queries will be executed. For example, if the request analyzes for which resources user A has permission P, and there&#x27;s an IAM policy states user A has iam.serviceAccounts.getAccessToken permission to a service account SA, and there&#x27;s another IAM policy states service account SA has permission P to a GCP folder F, then user A potentially has access to the GCP folder F. And those advanced analysis results will be included in AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Another example, if the request analyzes for who has permission P to a GCP folder F, and there&#x27;s an IAM policy states user A has iam.serviceAccounts.actAs permission to a service account SA, and there&#x27;s another IAM policy states service account SA has permission P to the GCP folder F, then user A potentially has access to the GCP folder F. And those advanced analysis results will be included in AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Default is false.
      &quot;outputResourceEdges&quot;: True or False, # Optional. If true, the result will output resource edges, starting from the policy attached resource, to any expanded resources. Default is false.
      &quot;expandRoles&quot;: True or False, # Optional. If true, the access section of result will expand any roles appearing in IAM policy bindings to include their permissions. If access_selector is specified, the access section of the result will be determined by the selector, and this flag will have no effect. Default is false.
      &quot;outputGroupEdges&quot;: True or False, # Optional. If true, the result will output group identity edges, starting from the binding&#x27;s group members, to any expanded identities. Default is false.
      &quot;expandResources&quot;: True or False, # Optional. If true, the resource section of the result will expand any resource attached to an IAM policy to include resources lower in the resource hierarchy. For example, if the request analyzes for which resources user A has permission P, and the results include an IAM policy with P on a GCP folder, the results will also include resources in that folder with permission P. If resource_selector is specified, the resource section of the result will be determined by the selector, and this flag will have no effect. Default is false.
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
      &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    },
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
    &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
  }</pre>
</div>

</body></html>