ControlPlaneAccess class
Authorize the Runtime components to access directly with Apigee Control Plane.
To get more information about ControlPlaneAccess, see:
- API documentation
- How-to Guides
- Enable ControlPlane access
Example Usage
Apigee Control Plane Access Basic Test
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const project = new gcp.organizations.Project("project", {
projectId: "my-project",
name: "my-project",
orgId: "123456789",
billingAccount: "000000-0000000-0000000-000000",
deletionPolicy: "DELETE",
});
const apigee = new gcp.projects.Service("apigee", {
project: project.projectId,
service: "apigee.googleapis.com",
});
const apigeeOrg = new gcp.apigee.Organization("apigee_org", {
analyticsRegion: "us-central1",
projectId: project.projectId,
runtimeType: "HYBRID",
}, {
dependsOn: [apigee],
});
const serviceAccount = new gcp.serviceaccount.Account("service_account", {
accountId: "my-account",
displayName: "Service Account",
});
const synchronizer_iam = new gcp.projects.IAMMember("synchronizer-iam", {
project: project.projectId,
role: "roles/apigee.synchronizerManager",
member: pulumi.interpolate`serviceAccount:${serviceAccount.email}`,
});
const apigeeControlPlaneAccess = new gcp.apigee.ControlPlaneAccess("apigee_control_plane_access", {
name: apigeeOrg.name,
synchronizerIdentities: [pulumi.interpolate`serviceAccount:${serviceAccount.email}`],
analyticsPublisherIdentities: [pulumi.interpolate`serviceAccount:${serviceAccount.email}`],
});
import pulumi
import pulumi_gcp as gcp
project = gcp.organizations.Project("project",
project_id="my-project",
name="my-project",
org_id="123456789",
billing_account="000000-0000000-0000000-000000",
deletion_policy="DELETE")
apigee = gcp.projects.Service("apigee",
project=project.project_id,
service="apigee.googleapis.com")
apigee_org = gcp.apigee.Organization("apigee_org",
analytics_region="us-central1",
project_id=project.project_id,
runtime_type="HYBRID",
opts = pulumi.ResourceOptions(depends_on=[apigee]))
service_account = gcp.serviceaccount.Account("service_account",
account_id="my-account",
display_name="Service Account")
synchronizer_iam = gcp.projects.IAMMember("synchronizer-iam",
project=project.project_id,
role="roles/apigee.synchronizerManager",
member=service_account.email.apply(lambda email: f"serviceAccount:{email}"))
apigee_control_plane_access = gcp.apigee.ControlPlaneAccess("apigee_control_plane_access",
name=apigee_org.name,
synchronizer_identities=[service_account.email.apply(lambda email: f"serviceAccount:{email}")],
analytics_publisher_identities=[service_account.email.apply(lambda email: f"serviceAccount:{email}")])
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var project = new Gcp.Organizations.Project("project", new()
{
ProjectId = "my-project",
Name = "my-project",
OrgId = "123456789",
BillingAccount = "000000-0000000-0000000-000000",
DeletionPolicy = "DELETE",
});
var apigee = new Gcp.Projects.Service("apigee", new()
{
Project = project.ProjectId,
ServiceName = "apigee.googleapis.com",
});
var apigeeOrg = new Gcp.Apigee.Organization("apigee_org", new()
{
AnalyticsRegion = "us-central1",
ProjectId = project.ProjectId,
RuntimeType = "HYBRID",
}, new CustomResourceOptions
{
DependsOn =
{
apigee,
},
});
var serviceAccount = new Gcp.ServiceAccount.Account("service_account", new()
{
AccountId = "my-account",
DisplayName = "Service Account",
});
var synchronizer_iam = new Gcp.Projects.IAMMember("synchronizer-iam", new()
{
Project = project.ProjectId,
Role = "roles/apigee.synchronizerManager",
Member = serviceAccount.Email.Apply(email => $"serviceAccount:{email}"),
});
var apigeeControlPlaneAccess = new Gcp.Apigee.ControlPlaneAccess("apigee_control_plane_access", new()
{
Name = apigeeOrg.Name,
SynchronizerIdentities = new[]
{
serviceAccount.Email.Apply(email => $"serviceAccount:{email}"),
},
AnalyticsPublisherIdentities = new[]
{
serviceAccount.Email.Apply(email => $"serviceAccount:{email}"),
},
});
});
package main
import (
"fmt"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/apigee"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/organizations"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/projects"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/serviceaccount"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
project, err := organizations.NewProject(ctx, "project", &organizations.ProjectArgs{
ProjectId: pulumi.String("my-project"),
Name: pulumi.String("my-project"),
OrgId: pulumi.String("123456789"),
BillingAccount: pulumi.String("000000-0000000-0000000-000000"),
DeletionPolicy: pulumi.String("DELETE"),
})
if err != nil {
return err
}
apigee2, err := projects.NewService(ctx, "apigee", &projects.ServiceArgs{
Project: project.ProjectId,
Service: pulumi.String("apigee.googleapis.com"),
})
if err != nil {
return err
}
apigeeOrg, err := apigee.NewOrganization(ctx, "apigee_org", &apigee.OrganizationArgs{
AnalyticsRegion: pulumi.String("us-central1"),
ProjectId: project.ProjectId,
RuntimeType: pulumi.String("HYBRID"),
}, pulumi.DependsOn([]pulumi.Resource{
apigee2,
}))
if err != nil {
return err
}
serviceAccount, err := serviceaccount.NewAccount(ctx, "service_account", &serviceaccount.AccountArgs{
AccountId: pulumi.String("my-account"),
DisplayName: pulumi.String("Service Account"),
})
if err != nil {
return err
}
_, err = projects.NewIAMMember(ctx, "synchronizer-iam", &projects.IAMMemberArgs{
Project: project.ProjectId,
Role: pulumi.String("roles/apigee.synchronizerManager"),
Member: serviceAccount.Email.ApplyT(func(email string) (string, error) {
return fmt.Sprintf("serviceAccount:%v", email), nil
}).(pulumi.StringOutput),
})
if err != nil {
return err
}
_, err = apigee.NewControlPlaneAccess(ctx, "apigee_control_plane_access", &apigee.ControlPlaneAccessArgs{
Name: apigeeOrg.Name,
SynchronizerIdentities: pulumi.StringArray{
serviceAccount.Email.ApplyT(func(email string) (string, error) {
return fmt.Sprintf("serviceAccount:%v", email), nil
}).(pulumi.StringOutput),
},
AnalyticsPublisherIdentities: pulumi.StringArray{
serviceAccount.Email.ApplyT(func(email string) (string, error) {
return fmt.Sprintf("serviceAccount:%v", email), nil
}).(pulumi.StringOutput),
},
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_organizations_project" "project" {
project_id = "my-project"
name = "my-project"
org_id = "123456789"
billing_account = "000000-0000000-0000000-000000"
deletion_policy = "DELETE"
}
resource "gcp_projects_service" "apigee" {
project = gcp_organizations_project.project.project_id
service = "apigee.googleapis.com"
}
resource "gcp_apigee_organization" "apigee_org" {
depends_on = [gcp_projects_service.apigee]
analytics_region = "us-central1"
project_id = gcp_organizations_project.project.project_id
runtime_type = "HYBRID"
}
resource "gcp_serviceaccount_account" "service_account" {
account_id = "my-account"
display_name = "Service Account"
}
resource "gcp_projects_iammember" "synchronizer-iam" {
project = gcp_organizations_project.project.project_id
role = "roles/apigee.synchronizerManager"
member ="serviceAccount:${gcp_serviceaccount_account.service_account.email}"
}
resource "gcp_apigee_controlplaneaccess" "apigee_control_plane_access" {
name = gcp_apigee_organization.apigee_org.name
synchronizer_identities = ["serviceAccount:${gcp_serviceaccount_account.service_account.email}"]
analytics_publisher_identities = ["serviceAccount:${gcp_serviceaccount_account.service_account.email}"]
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.organizations.Project;
import com.pulumi.gcp.organizations.ProjectArgs;
import com.pulumi.gcp.projects.Service;
import com.pulumi.gcp.projects.ServiceArgs;
import com.pulumi.gcp.apigee.Organization;
import com.pulumi.gcp.apigee.OrganizationArgs;
import com.pulumi.gcp.serviceaccount.Account;
import com.pulumi.gcp.serviceaccount.AccountArgs;
import com.pulumi.gcp.projects.IAMMember;
import com.pulumi.gcp.projects.IAMMemberArgs;
import com.pulumi.gcp.apigee.ControlPlaneAccess;
import com.pulumi.gcp.apigee.ControlPlaneAccessArgs;
import com.pulumi.resources.CustomResourceOptions;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var project = new Project("project", ProjectArgs.builder()
.projectId("my-project")
.name("my-project")
.orgId("123456789")
.billingAccount("000000-0000000-0000000-000000")
.deletionPolicy("DELETE")
.build());
var apigee = new Service("apigee", ServiceArgs.builder()
.project(project.projectId())
.service("apigee.googleapis.com")
.build());
var apigeeOrg = new Organization("apigeeOrg", OrganizationArgs.builder()
.analyticsRegion("us-central1")
.projectId(project.projectId())
.runtimeType("HYBRID")
.build(), CustomResourceOptions.builder()
.dependsOn(apigee)
.build());
var serviceAccount = new Account("serviceAccount", AccountArgs.builder()
.accountId("my-account")
.displayName("Service Account")
.build());
var synchronizer_iam = new IAMMember("synchronizer-iam", IAMMemberArgs.builder()
.project(project.projectId())
.role("roles/apigee.synchronizerManager")
.member(serviceAccount.email().applyValue(_email -> String.format("serviceAccount:%s", _email)))
.build());
var apigeeControlPlaneAccess = new ControlPlaneAccess("apigeeControlPlaneAccess", ControlPlaneAccessArgs.builder()
.name(apigeeOrg.name())
.synchronizerIdentities(serviceAccount.email().applyValue(_email -> String.format("serviceAccount:%s", _email)))
.analyticsPublisherIdentities(serviceAccount.email().applyValue(_email -> String.format("serviceAccount:%s", _email)))
.build());
}
}
resources:
project:
type: gcp:organizations:Project
properties:
projectId: my-project
name: my-project
orgId: '123456789'
billingAccount: 000000-0000000-0000000-000000
deletionPolicy: DELETE
apigee:
type: gcp:projects:Service
properties:
project: ${project.projectId}
service: apigee.googleapis.com
apigeeOrg:
type: gcp:apigee:Organization
name: apigee_org
properties:
analyticsRegion: us-central1
projectId: ${project.projectId}
runtimeType: HYBRID
options:
dependsOn:
- ${apigee}
serviceAccount:
type: gcp:serviceaccount:Account
name: service_account
properties:
accountId: my-account
displayName: Service Account
synchronizer-iam:
type: gcp:projects:IAMMember
properties:
project: ${project.projectId}
role: roles/apigee.synchronizerManager
member: serviceAccount:${serviceAccount.email}
apigeeControlPlaneAccess:
type: gcp:apigee:ControlPlaneAccess
name: apigee_control_plane_access
properties:
name: ${apigeeOrg.name}
synchronizerIdentities:
- serviceAccount:${serviceAccount.email}
analyticsPublisherIdentities:
- serviceAccount:${serviceAccount.email}
Import
ControlPlaneAccess can be imported using any of these accepted formats:
organizations/{{name}}/controlPlaneAccess{{name}}
When using the pulumi import command, ControlPlaneAccess can be imported using one of the formats above. For example:
$ pulumi import gcp:apigee/controlPlaneAccess:ControlPlaneAccess default organizations/{{name}}/controlPlaneAccess
$ pulumi import gcp:apigee/controlPlaneAccess:ControlPlaneAccess default {{name}}
Constructors
- ControlPlaneAccess(String name, {ControlPlaneAccessArgs? args, CustomResourceOptions? options})
-
Creates a new ControlPlaneAccess.
nameThe Pulumi resource name.argsArguments used to configure this ControlPlaneAccess. The set of arguments for ControlPlaneAccess.optionsResource options controlling this resource's behavior. - ControlPlaneAccess.reference(String urn)
- Creates a typed reference to an existing ControlPlaneAccess resource.
Properties
-
analyticsPublisherIdentities
↔ Output<
List< String> ?> -
Array of service accounts authorized to publish analytics data to the control plane, each specified using the following format:
serviceAccount:service-account-name. Theservice-account-nameis formatted like an email address. For example: serviceAccount@my_project_id.iam.gserviceaccount.com You might specify multiple service accounts, for example, if you have multiple environments and wish to assign a unique service account to each one.latefinal -
childResources
→ Set<
Resource> -
finalinherited
-
completionSources
↔ Map<
String, IOutputCompletionSource> -
latefinalinherited
- hashCode → int
-
The hash code for this object.
no setterinherited
-
id
↔ Output<
String> -
getter/setter pairinherited
- isCustom → bool
-
Returns whether this resource is provider-managed.
no setterinherited
- isProtected → bool
-
Returns whether this resource is protected from deletion.
no setterinherited
- isRemote → bool
-
Whether this resource is registered as remote.
no setterinherited
- isResourceReference → bool
-
Whether this instance represents a resource value returned over RPC.
finalinherited
-
name
↔ Output<
String> -
Name of the Apigee organization.
latefinal
-
resourceTransforms
→ List<
ResourceTransform> -
Inherited/explicit async transforms.
no setterinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
-
synchronizerIdentities
↔ Output<
List< String> ?> -
Array of service accounts to grant access to control plane resources (for the Synchronizer component), each specified using the following format:
serviceAccount:service-account-name. Theservice-account-nameis formatted like an email address. For example: serviceAccount@my_project_id.iam.gserviceaccount.com You might specify multiple service accounts, for example, if you have multiple environments and wish to assign a unique service account to each one. The service accounts must have Apigee Synchronizer Manager role. See also Create service accounts.latefinal -
transformations
→ List<
ResourceTransformation> -
Inherited/explicit legacy transformations.
no setterinherited
-
urn
↔ Output<
String> -
latefinalinherited
Methods
-
failId(
Object error) → void -
Completes this resource ID with an error when registration fails.
inherited
-
failOutputs(
Object error) → void -
Completes all output properties with
error.inherited -
failUrn(
Object error) → void -
Completes this resource URN with an error when registration fails.
inherited
-
getProvider(
String moduleMember) → ProviderResource? -
Returns provider for
moduleMember's package, if configured.inherited -
getResourceName(
) → String -
Returns this resource's logical name.
inherited
-
getResourceType(
) → String -
Returns this resource's Pulumi type token.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
registerOutput<
T> (String propertyName, {Object? decoder(Object?)?, bool isSecret = false}) → Output< T> -
Registers a dynamic output property for this resource.
inherited
-
resolveId(
String? value, {required bool isKnown}) → void -
Resolves the provider-assigned ID for this resource.
inherited
-
resolveOutputs(
Struct outputs) → void -
Resolves all output properties from a monitor response payload.
inherited
-
resolveUrn(
String value) → void -
Resolves this resource's URN once assigned by the engine.
inherited
-
serializeProperties(
Map< String, dynamic> properties) → Future<Struct> -
Serializes resource properties for RPC transmission.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Static Methods
-
get(
String name, Input< String> id, {ControlPlaneAccessState? state, CustomResourceOptions? options}) → ControlPlaneAccess -
Gets an existing ControlPlaneAccess resource's state with the given
nameandid.