UNPKG

@pulumi/gcp

Version:

A Pulumi package for creating and managing Google Cloud Platform resources.

708 lines (707 loc) • 33.9 kB
import * as pulumi from "@pulumi/pulumi"; import * as inputs from "../types/input"; import * as outputs from "../types/output"; /** * A configuration for an external identity provider. * * To get more information about WorkloadIdentityPoolProvider, see: * * * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v1/projects.locations.workloadIdentityPools.providers) * * How-to Guides * * [Managing workload identity providers](https://cloud.google.com/iam/docs/manage-workload-identity-pools-providers#managing_workload_identity_providers) * * ## Example Usage * * ### Iam Workload Identity Pool Provider Aws Basic * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * * const pool = new gcp.iam.WorkloadIdentityPool("pool", {workloadIdentityPoolId: "example-pool"}); * const example = new gcp.iam.WorkloadIdentityPoolProvider("example", { * workloadIdentityPoolId: pool.workloadIdentityPoolId, * workloadIdentityPoolProviderId: "example-prvdr", * aws: { * accountId: "999999999999", * }, * }); * ``` * ### Iam Workload Identity Pool Provider Aws Full * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * * const pool = new gcp.iam.WorkloadIdentityPool("pool", {workloadIdentityPoolId: "example-pool"}); * const example = new gcp.iam.WorkloadIdentityPoolProvider("example", { * workloadIdentityPoolId: pool.workloadIdentityPoolId, * workloadIdentityPoolProviderId: "example-prvdr", * displayName: "Name of provider", * description: "AWS identity pool provider for automated test", * disabled: true, * attributeCondition: "attribute.aws_role==\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\"", * attributeMapping: { * "google.subject": "assertion.arn", * "attribute.aws_account": "assertion.account", * "attribute.environment": "assertion.arn.contains(\":instance-profile/Production\") ? \"prod\" : \"test\"", * }, * aws: { * accountId: "999999999999", * }, * }); * ``` * ### Iam Workload Identity Pool Provider Github Actions * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * * const pool = new gcp.iam.WorkloadIdentityPool("pool", {workloadIdentityPoolId: "example-pool"}); * const example = new gcp.iam.WorkloadIdentityPoolProvider("example", { * workloadIdentityPoolId: pool.workloadIdentityPoolId, * workloadIdentityPoolProviderId: "example-prvdr", * displayName: "Name of provider", * description: "GitHub Actions identity pool provider for automated test", * disabled: true, * attributeCondition: ` assertion.repository_owner_id == "123456789" && * attribute.repository == "gh-org/gh-repo" && * assertion.ref == "refs/heads/main" && * assertion.ref_type == "branch" * `, * attributeMapping: { * "google.subject": "assertion.sub", * "attribute.actor": "assertion.actor", * "attribute.aud": "assertion.aud", * "attribute.repository": "assertion.repository", * }, * oidc: { * issuerUri: "https://token.actions.githubusercontent.com", * }, * }); * ``` * ### Iam Workload Identity Pool Provider Oidc Basic * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * * const pool = new gcp.iam.WorkloadIdentityPool("pool", {workloadIdentityPoolId: "example-pool"}); * const example = new gcp.iam.WorkloadIdentityPoolProvider("example", { * workloadIdentityPoolId: pool.workloadIdentityPoolId, * workloadIdentityPoolProviderId: "example-prvdr", * attributeMapping: { * "google.subject": "assertion.sub", * }, * oidc: { * issuerUri: "https://sts.windows.net/azure-tenant-id", * }, * }); * ``` * ### Iam Workload Identity Pool Provider Oidc Full * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * * const pool = new gcp.iam.WorkloadIdentityPool("pool", {workloadIdentityPoolId: "example-pool"}); * const example = new gcp.iam.WorkloadIdentityPoolProvider("example", { * workloadIdentityPoolId: pool.workloadIdentityPoolId, * workloadIdentityPoolProviderId: "example-prvdr", * displayName: "Name of provider", * description: "OIDC identity pool provider for automated test", * disabled: true, * attributeCondition: "\"e968c2ef-047c-498d-8d79-16ca1b61e77e\" in assertion.groups", * attributeMapping: { * "google.subject": "\"azure::\" + assertion.tid + \"::\" + assertion.sub", * "attribute.tid": "assertion.tid", * "attribute.managed_identity_name": ` { * "8bb39bdb-1cc5-4447-b7db-a19e920eb111":"workload1", * "55d36609-9bcf-48e0-a366-a3cf19027d2a":"workload2" * }[assertion.oid] * `, * }, * oidc: { * allowedAudiences: [ * "https://example.com/gcp-oidc-federation", * "example.com/gcp-oidc-federation", * ], * issuerUri: "https://sts.windows.net/azure-tenant-id", * }, * }); * ``` * ### Iam Workload Identity Pool Provider Saml Basic * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * import * as std from "@pulumi/std"; * * const pool = new gcp.iam.WorkloadIdentityPool("pool", {workloadIdentityPoolId: "example-pool"}); * const example = new gcp.iam.WorkloadIdentityPoolProvider("example", { * workloadIdentityPoolId: pool.workloadIdentityPoolId, * workloadIdentityPoolProviderId: "example-prvdr", * attributeMapping: { * "google.subject": "assertion.arn", * "attribute.aws_account": "assertion.account", * "attribute.environment": "assertion.arn.contains(\":instance-profile/Production\") ? \"prod\" : \"test\"", * }, * saml: { * idpMetadataXml: std.file({ * input: "test-fixtures/metadata.xml", * }).then(invoke => invoke.result), * }, * }); * ``` * ### Iam Workload Identity Pool Provider Saml Full * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * import * as std from "@pulumi/std"; * * const pool = new gcp.iam.WorkloadIdentityPool("pool", {workloadIdentityPoolId: "example-pool"}); * const example = new gcp.iam.WorkloadIdentityPoolProvider("example", { * workloadIdentityPoolId: pool.workloadIdentityPoolId, * workloadIdentityPoolProviderId: "example-prvdr", * displayName: "Name of provider", * description: "SAML 2.0 identity pool provider for automated test", * disabled: true, * attributeMapping: { * "google.subject": "assertion.arn", * "attribute.aws_account": "assertion.account", * "attribute.environment": "assertion.arn.contains(\":instance-profile/Production\") ? \"prod\" : \"test\"", * }, * saml: { * idpMetadataXml: std.file({ * input: "test-fixtures/metadata.xml", * }).then(invoke => invoke.result), * }, * }); * ``` * ### Iam Workload Identity Pool Provider Oidc Upload Key * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * * const pool = new gcp.iam.WorkloadIdentityPool("pool", {workloadIdentityPoolId: "example-pool"}); * const example = new gcp.iam.WorkloadIdentityPoolProvider("example", { * workloadIdentityPoolId: pool.workloadIdentityPoolId, * workloadIdentityPoolProviderId: "example-prvdr", * displayName: "Name of provider", * description: "OIDC identity pool provider for automated test", * disabled: true, * attributeCondition: "\"e968c2ef-047c-498d-8d79-16ca1b61e77e\" in assertion.groups", * attributeMapping: { * "google.subject": "\"azure::\" + assertion.tid + \"::\" + assertion.sub", * "attribute.tid": "assertion.tid", * "attribute.managed_identity_name": ` { * "8bb39bdb-1cc5-4447-b7db-a19e920eb111":"workload1", * "55d36609-9bcf-48e0-a366-a3cf19027d2a":"workload2" * }[assertion.oid] * `, * }, * oidc: { * allowedAudiences: [ * "https://example.com/gcp-oidc-federation", * "example.com/gcp-oidc-federation", * ], * issuerUri: "https://sts.windows.net/azure-tenant-id", * jwksJson: "{\"keys\":[{\"kty\":\"RSA\",\"alg\":\"RS256\",\"kid\":\"sif0AR-F6MuvksAyAOv-Pds08Bcf2eUMlxE30NofddA\",\"use\":\"sig\",\"e\":\"AQAB\",\"n\":\"ylH1Chl1tpfti3lh51E1g5dPogzXDaQseqjsefGLknaNl5W6Wd4frBhHyE2t41Q5zgz_Ll0-NvWm0FlaG6brhrN9QZu6sJP1bM8WPfJVPgXOanxi7d7TXCkeNubGeiLTf5R3UXtS9Lm_guemU7MxDjDTelxnlgGCihOVTcL526suNJUdfXtpwUsvdU6_ZnAp9IpsuYjCtwPm9hPumlcZGMbxstdh07O4y4O90cVQClJOKSGQjAUCKJWXIQ0cqffGS_HuS_725CPzQ85SzYZzaNpgfhAER7kx_9P16ARM3BJz0PI5fe2hECE61J4GYU_BY43sxDfs7HyJpEXKLU9eWw\"}]}", * }, * }); * ``` * ### Iam Workload Identity Pool Provider X509 Basic * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * import * as std from "@pulumi/std"; * * const pool = new gcp.iam.WorkloadIdentityPool("pool", {workloadIdentityPoolId: "example-pool"}); * const example = new gcp.iam.WorkloadIdentityPoolProvider("example", { * workloadIdentityPoolId: pool.workloadIdentityPoolId, * workloadIdentityPoolProviderId: "example-prvdr", * attributeMapping: { * "google.subject": "assertion.subject.dn.cn", * }, * x509: { * trustStore: { * trustAnchors: [{ * pemCertificate: std.file({ * input: "test-fixtures/trust_anchor.pem", * }).then(invoke => invoke.result), * }], * }, * }, * }); * ``` * ### Iam Workload Identity Pool Provider X509 Full * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * import * as std from "@pulumi/std"; * * const pool = new gcp.iam.WorkloadIdentityPool("pool", {workloadIdentityPoolId: "example-pool"}); * const example = new gcp.iam.WorkloadIdentityPoolProvider("example", { * workloadIdentityPoolId: pool.workloadIdentityPoolId, * workloadIdentityPoolProviderId: "example-prvdr", * displayName: "Name of provider", * description: "X.509 identity pool provider for automated test", * disabled: true, * attributeMapping: { * "google.subject": "assertion.subject.dn.cn", * }, * x509: { * trustStore: { * trustAnchors: [{ * pemCertificate: std.file({ * input: "test-fixtures/trust_anchor.pem", * }).then(invoke => invoke.result), * }], * intermediateCas: [{ * pemCertificate: std.file({ * input: "test-fixtures/intermediate_ca.pem", * }).then(invoke => invoke.result), * }], * }, * }, * }); * ``` * * ## Import * * WorkloadIdentityPoolProvider can be imported using any of these accepted formats: * * * `projects/{{project}}/locations/global/workloadIdentityPools/{{workload_identity_pool_id}}/providers/{{workload_identity_pool_provider_id}}` * * * `{{project}}/{{workload_identity_pool_id}}/{{workload_identity_pool_provider_id}}` * * * `{{workload_identity_pool_id}}/{{workload_identity_pool_provider_id}}` * * When using the `pulumi import` command, WorkloadIdentityPoolProvider can be imported using one of the formats above. For example: * * ```sh * $ pulumi import gcp:iam/workloadIdentityPoolProvider:WorkloadIdentityPoolProvider default projects/{{project}}/locations/global/workloadIdentityPools/{{workload_identity_pool_id}}/providers/{{workload_identity_pool_provider_id}} * ``` * * ```sh * $ pulumi import gcp:iam/workloadIdentityPoolProvider:WorkloadIdentityPoolProvider default {{project}}/{{workload_identity_pool_id}}/{{workload_identity_pool_provider_id}} * ``` * * ```sh * $ pulumi import gcp:iam/workloadIdentityPoolProvider:WorkloadIdentityPoolProvider default {{workload_identity_pool_id}}/{{workload_identity_pool_provider_id}} * ``` */ export declare class WorkloadIdentityPoolProvider extends pulumi.CustomResource { /** * Get an existing WorkloadIdentityPoolProvider resource's state with the given name, ID, and optional extra * properties used to qualify the lookup. * * @param name The _unique_ name of the resulting resource. * @param id The _unique_ provider ID of the resource to lookup. * @param state Any extra arguments used during the lookup. * @param opts Optional settings to control the behavior of the CustomResource. */ static get(name: string, id: pulumi.Input<pulumi.ID>, state?: WorkloadIdentityPoolProviderState, opts?: pulumi.CustomResourceOptions): WorkloadIdentityPoolProvider; /** * Returns true if the given object is an instance of WorkloadIdentityPoolProvider. This is designed to work even * when multiple copies of the Pulumi SDK have been loaded into the same process. */ static isInstance(obj: any): obj is WorkloadIdentityPoolProvider; /** * [A Common Expression Language](https://opensource.google/projects/cel) expression, in * plain text, to restrict what otherwise valid authentication credentials issued by the * provider should not be accepted. * The expression must output a boolean representing whether to allow the federation. * The following keywords may be referenced in the expressions: */ readonly attributeCondition: pulumi.Output<string | undefined>; /** * Maps attributes from authentication credentials issued by an external identity provider * to Google Cloud attributes, such as `subject` and `segment`. * Each key must be a string specifying the Google Cloud IAM attribute to map to. * The following keys are supported: * * `google.subject`: The principal IAM is authenticating. You can reference this value * in IAM bindings. This is also the subject that appears in Cloud Logging logs. * Cannot exceed 127 characters. * * `google.groups`: Groups the external identity belongs to. You can grant groups * access to resources using an IAM `principalSet` binding; access applies to all * members of the group. * You can also provide custom attributes by specifying `attribute.{custom_attribute}`, * where `{custom_attribute}` is the name of the custom attribute to be mapped. You can * define a maximum of 50 custom attributes. The maximum length of a mapped attribute key * is 100 characters, and the key may only contain the characters [a-z0-9_]. * You can reference these attributes in IAM policies to define fine-grained access for a * workload to Google Cloud resources. For example: * * `google.subject`: * `principal://iam.googleapis.com/projects/{project}/locations/{location}/workloadIdentityPools/{pool}/subject/{value}` * * `google.groups`: * `principalSet://iam.googleapis.com/projects/{project}/locations/{location}/workloadIdentityPools/{pool}/group/{value}` * * `attribute.{custom_attribute}`: * `principalSet://iam.googleapis.com/projects/{project}/locations/{location}/workloadIdentityPools/{pool}/attribute.{custom_attribute}/{value}` * Each value must be a [Common Expression Language](https://opensource.google/projects/cel) * function that maps an identity provider credential to the normalized attribute specified * by the corresponding map key. * You can use the `assertion` keyword in the expression to access a JSON representation of * the authentication credential issued by the provider. * The maximum length of an attribute mapping expression is 2048 characters. When evaluated, * the total size of all mapped attributes must not exceed 8KB. * For AWS providers, the following rules apply: * - If no attribute mapping is defined, the following default mapping applies: * ``` * { * "google.subject":"assertion.arn", * "attribute.aws_role": * "assertion.arn.contains('assumed-role')" * " ? assertion.arn.extract('{account_arn}assumed-role/')" * " + 'assumed-role/'" * " + assertion.arn.extract('assumed-role/{role_name}/')" * " : assertion.arn", * } * ``` * - If any custom attribute mappings are defined, they must include a mapping to the * `google.subject` attribute. * For OIDC providers, the following rules apply: * - Custom attribute mappings must be defined, and must include a mapping to the * `google.subject` attribute. For example, the following maps the `sub` claim of the * incoming credential to the `subject` attribute on a Google token. * ``` * {"google.subject": "assertion.sub"} * ``` */ readonly attributeMapping: pulumi.Output<{ [key: string]: string; } | undefined>; /** * An Amazon Web Services identity provider. Not compatible with the property oidc or saml. * Structure is documented below. */ readonly aws: pulumi.Output<outputs.iam.WorkloadIdentityPoolProviderAws | undefined>; /** * A description for the provider. Cannot exceed 256 characters. */ readonly description: pulumi.Output<string | undefined>; /** * Whether the provider is disabled. You cannot use a disabled provider to exchange tokens. * However, existing tokens still grant access. */ readonly disabled: pulumi.Output<boolean | undefined>; /** * A display name for the provider. Cannot exceed 32 characters. */ readonly displayName: pulumi.Output<string | undefined>; /** * The resource name of the provider as * `projects/{project_number}/locations/global/workloadIdentityPools/{workload_identity_pool_id}/providers/{workload_identity_pool_provider_id}`. */ readonly name: pulumi.Output<string>; /** * An OpenId Connect 1.0 identity provider. Not compatible with the property aws or saml. * Structure is documented below. */ readonly oidc: pulumi.Output<outputs.iam.WorkloadIdentityPoolProviderOidc | undefined>; /** * The ID of the project in which the resource belongs. * If it is not provided, the provider project is used. */ readonly project: pulumi.Output<string>; /** * An SAML 2.0 identity provider. Not compatible with the property oidc or aws. * Structure is documented below. */ readonly saml: pulumi.Output<outputs.iam.WorkloadIdentityPoolProviderSaml | undefined>; /** * The state of the provider. * * STATE_UNSPECIFIED: State unspecified. * * ACTIVE: The provider is active, and may be used to validate authentication credentials. * * DELETED: The provider is soft-deleted. Soft-deleted providers are permanently deleted * after approximately 30 days. You can restore a soft-deleted provider using * UndeleteWorkloadIdentityPoolProvider. You cannot reuse the ID of a soft-deleted provider * until it is permanently deleted. */ readonly state: pulumi.Output<string>; /** * The ID used for the pool, which is the final component of the pool resource name. This * value should be 4-32 characters, and may contain the characters [a-z0-9-]. The prefix * `gcp-` is reserved for use by Google, and may not be specified. */ readonly workloadIdentityPoolId: pulumi.Output<string>; /** * The ID for the provider, which becomes the final component of the resource name. This * value must be 4-32 characters, and may contain the characters [a-z0-9-]. The prefix * `gcp-` is reserved for use by Google, and may not be specified. */ readonly workloadIdentityPoolProviderId: pulumi.Output<string>; /** * An X.509-type identity provider represents a CA. It is trusted to assert a * client identity if the client has a certificate that chains up to this CA. * Structure is documented below. */ readonly x509: pulumi.Output<outputs.iam.WorkloadIdentityPoolProviderX509 | undefined>; /** * Create a WorkloadIdentityPoolProvider resource with the given unique name, arguments, and options. * * @param name The _unique_ name of the resource. * @param args The arguments to use to populate this resource's properties. * @param opts A bag of options that control this resource's behavior. */ constructor(name: string, args: WorkloadIdentityPoolProviderArgs, opts?: pulumi.CustomResourceOptions); } /** * Input properties used for looking up and filtering WorkloadIdentityPoolProvider resources. */ export interface WorkloadIdentityPoolProviderState { /** * [A Common Expression Language](https://opensource.google/projects/cel) expression, in * plain text, to restrict what otherwise valid authentication credentials issued by the * provider should not be accepted. * The expression must output a boolean representing whether to allow the federation. * The following keywords may be referenced in the expressions: */ attributeCondition?: pulumi.Input<string>; /** * Maps attributes from authentication credentials issued by an external identity provider * to Google Cloud attributes, such as `subject` and `segment`. * Each key must be a string specifying the Google Cloud IAM attribute to map to. * The following keys are supported: * * `google.subject`: The principal IAM is authenticating. You can reference this value * in IAM bindings. This is also the subject that appears in Cloud Logging logs. * Cannot exceed 127 characters. * * `google.groups`: Groups the external identity belongs to. You can grant groups * access to resources using an IAM `principalSet` binding; access applies to all * members of the group. * You can also provide custom attributes by specifying `attribute.{custom_attribute}`, * where `{custom_attribute}` is the name of the custom attribute to be mapped. You can * define a maximum of 50 custom attributes. The maximum length of a mapped attribute key * is 100 characters, and the key may only contain the characters [a-z0-9_]. * You can reference these attributes in IAM policies to define fine-grained access for a * workload to Google Cloud resources. For example: * * `google.subject`: * `principal://iam.googleapis.com/projects/{project}/locations/{location}/workloadIdentityPools/{pool}/subject/{value}` * * `google.groups`: * `principalSet://iam.googleapis.com/projects/{project}/locations/{location}/workloadIdentityPools/{pool}/group/{value}` * * `attribute.{custom_attribute}`: * `principalSet://iam.googleapis.com/projects/{project}/locations/{location}/workloadIdentityPools/{pool}/attribute.{custom_attribute}/{value}` * Each value must be a [Common Expression Language](https://opensource.google/projects/cel) * function that maps an identity provider credential to the normalized attribute specified * by the corresponding map key. * You can use the `assertion` keyword in the expression to access a JSON representation of * the authentication credential issued by the provider. * The maximum length of an attribute mapping expression is 2048 characters. When evaluated, * the total size of all mapped attributes must not exceed 8KB. * For AWS providers, the following rules apply: * - If no attribute mapping is defined, the following default mapping applies: * ``` * { * "google.subject":"assertion.arn", * "attribute.aws_role": * "assertion.arn.contains('assumed-role')" * " ? assertion.arn.extract('{account_arn}assumed-role/')" * " + 'assumed-role/'" * " + assertion.arn.extract('assumed-role/{role_name}/')" * " : assertion.arn", * } * ``` * - If any custom attribute mappings are defined, they must include a mapping to the * `google.subject` attribute. * For OIDC providers, the following rules apply: * - Custom attribute mappings must be defined, and must include a mapping to the * `google.subject` attribute. For example, the following maps the `sub` claim of the * incoming credential to the `subject` attribute on a Google token. * ``` * {"google.subject": "assertion.sub"} * ``` */ attributeMapping?: pulumi.Input<{ [key: string]: pulumi.Input<string>; }>; /** * An Amazon Web Services identity provider. Not compatible with the property oidc or saml. * Structure is documented below. */ aws?: pulumi.Input<inputs.iam.WorkloadIdentityPoolProviderAws>; /** * A description for the provider. Cannot exceed 256 characters. */ description?: pulumi.Input<string>; /** * Whether the provider is disabled. You cannot use a disabled provider to exchange tokens. * However, existing tokens still grant access. */ disabled?: pulumi.Input<boolean>; /** * A display name for the provider. Cannot exceed 32 characters. */ displayName?: pulumi.Input<string>; /** * The resource name of the provider as * `projects/{project_number}/locations/global/workloadIdentityPools/{workload_identity_pool_id}/providers/{workload_identity_pool_provider_id}`. */ name?: pulumi.Input<string>; /** * An OpenId Connect 1.0 identity provider. Not compatible with the property aws or saml. * Structure is documented below. */ oidc?: pulumi.Input<inputs.iam.WorkloadIdentityPoolProviderOidc>; /** * The ID of the project in which the resource belongs. * If it is not provided, the provider project is used. */ project?: pulumi.Input<string>; /** * An SAML 2.0 identity provider. Not compatible with the property oidc or aws. * Structure is documented below. */ saml?: pulumi.Input<inputs.iam.WorkloadIdentityPoolProviderSaml>; /** * The state of the provider. * * STATE_UNSPECIFIED: State unspecified. * * ACTIVE: The provider is active, and may be used to validate authentication credentials. * * DELETED: The provider is soft-deleted. Soft-deleted providers are permanently deleted * after approximately 30 days. You can restore a soft-deleted provider using * UndeleteWorkloadIdentityPoolProvider. You cannot reuse the ID of a soft-deleted provider * until it is permanently deleted. */ state?: pulumi.Input<string>; /** * The ID used for the pool, which is the final component of the pool resource name. This * value should be 4-32 characters, and may contain the characters [a-z0-9-]. The prefix * `gcp-` is reserved for use by Google, and may not be specified. */ workloadIdentityPoolId?: pulumi.Input<string>; /** * The ID for the provider, which becomes the final component of the resource name. This * value must be 4-32 characters, and may contain the characters [a-z0-9-]. The prefix * `gcp-` is reserved for use by Google, and may not be specified. */ workloadIdentityPoolProviderId?: pulumi.Input<string>; /** * An X.509-type identity provider represents a CA. It is trusted to assert a * client identity if the client has a certificate that chains up to this CA. * Structure is documented below. */ x509?: pulumi.Input<inputs.iam.WorkloadIdentityPoolProviderX509>; } /** * The set of arguments for constructing a WorkloadIdentityPoolProvider resource. */ export interface WorkloadIdentityPoolProviderArgs { /** * [A Common Expression Language](https://opensource.google/projects/cel) expression, in * plain text, to restrict what otherwise valid authentication credentials issued by the * provider should not be accepted. * The expression must output a boolean representing whether to allow the federation. * The following keywords may be referenced in the expressions: */ attributeCondition?: pulumi.Input<string>; /** * Maps attributes from authentication credentials issued by an external identity provider * to Google Cloud attributes, such as `subject` and `segment`. * Each key must be a string specifying the Google Cloud IAM attribute to map to. * The following keys are supported: * * `google.subject`: The principal IAM is authenticating. You can reference this value * in IAM bindings. This is also the subject that appears in Cloud Logging logs. * Cannot exceed 127 characters. * * `google.groups`: Groups the external identity belongs to. You can grant groups * access to resources using an IAM `principalSet` binding; access applies to all * members of the group. * You can also provide custom attributes by specifying `attribute.{custom_attribute}`, * where `{custom_attribute}` is the name of the custom attribute to be mapped. You can * define a maximum of 50 custom attributes. The maximum length of a mapped attribute key * is 100 characters, and the key may only contain the characters [a-z0-9_]. * You can reference these attributes in IAM policies to define fine-grained access for a * workload to Google Cloud resources. For example: * * `google.subject`: * `principal://iam.googleapis.com/projects/{project}/locations/{location}/workloadIdentityPools/{pool}/subject/{value}` * * `google.groups`: * `principalSet://iam.googleapis.com/projects/{project}/locations/{location}/workloadIdentityPools/{pool}/group/{value}` * * `attribute.{custom_attribute}`: * `principalSet://iam.googleapis.com/projects/{project}/locations/{location}/workloadIdentityPools/{pool}/attribute.{custom_attribute}/{value}` * Each value must be a [Common Expression Language](https://opensource.google/projects/cel) * function that maps an identity provider credential to the normalized attribute specified * by the corresponding map key. * You can use the `assertion` keyword in the expression to access a JSON representation of * the authentication credential issued by the provider. * The maximum length of an attribute mapping expression is 2048 characters. When evaluated, * the total size of all mapped attributes must not exceed 8KB. * For AWS providers, the following rules apply: * - If no attribute mapping is defined, the following default mapping applies: * ``` * { * "google.subject":"assertion.arn", * "attribute.aws_role": * "assertion.arn.contains('assumed-role')" * " ? assertion.arn.extract('{account_arn}assumed-role/')" * " + 'assumed-role/'" * " + assertion.arn.extract('assumed-role/{role_name}/')" * " : assertion.arn", * } * ``` * - If any custom attribute mappings are defined, they must include a mapping to the * `google.subject` attribute. * For OIDC providers, the following rules apply: * - Custom attribute mappings must be defined, and must include a mapping to the * `google.subject` attribute. For example, the following maps the `sub` claim of the * incoming credential to the `subject` attribute on a Google token. * ``` * {"google.subject": "assertion.sub"} * ``` */ attributeMapping?: pulumi.Input<{ [key: string]: pulumi.Input<string>; }>; /** * An Amazon Web Services identity provider. Not compatible with the property oidc or saml. * Structure is documented below. */ aws?: pulumi.Input<inputs.iam.WorkloadIdentityPoolProviderAws>; /** * A description for the provider. Cannot exceed 256 characters. */ description?: pulumi.Input<string>; /** * Whether the provider is disabled. You cannot use a disabled provider to exchange tokens. * However, existing tokens still grant access. */ disabled?: pulumi.Input<boolean>; /** * A display name for the provider. Cannot exceed 32 characters. */ displayName?: pulumi.Input<string>; /** * An OpenId Connect 1.0 identity provider. Not compatible with the property aws or saml. * Structure is documented below. */ oidc?: pulumi.Input<inputs.iam.WorkloadIdentityPoolProviderOidc>; /** * The ID of the project in which the resource belongs. * If it is not provided, the provider project is used. */ project?: pulumi.Input<string>; /** * An SAML 2.0 identity provider. Not compatible with the property oidc or aws. * Structure is documented below. */ saml?: pulumi.Input<inputs.iam.WorkloadIdentityPoolProviderSaml>; /** * The ID used for the pool, which is the final component of the pool resource name. This * value should be 4-32 characters, and may contain the characters [a-z0-9-]. The prefix * `gcp-` is reserved for use by Google, and may not be specified. */ workloadIdentityPoolId: pulumi.Input<string>; /** * The ID for the provider, which becomes the final component of the resource name. This * value must be 4-32 characters, and may contain the characters [a-z0-9-]. The prefix * `gcp-` is reserved for use by Google, and may not be specified. */ workloadIdentityPoolProviderId: pulumi.Input<string>; /** * An X.509-type identity provider represents a CA. It is trusted to assert a * client identity if the client has a certificate that chains up to this CA. * Structure is documented below. */ x509?: pulumi.Input<inputs.iam.WorkloadIdentityPoolProviderX509>; }