Skip to content

Commit cb7b350

Browse files
authored
fix(provider): [122074743] provider OIDC auth support set provider_id (#3152)
* add * add * add
1 parent 585019e commit cb7b350

File tree

3 files changed

+26
-8
lines changed

3 files changed

+26
-8
lines changed

.changelog/3152.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
provider: OIDC auth support set `provider_id`
3+
```

tencentcloud/provider.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ const (
137137
PROVIDER_ASSUME_ROLE_SAML_ASSERTION = "TENCENTCLOUD_ASSUME_ROLE_SAML_ASSERTION"
138138
PROVIDER_ASSUME_ROLE_PRINCIPAL_ARN = "TENCENTCLOUD_ASSUME_ROLE_PRINCIPAL_ARN"
139139
PROVIDER_ASSUME_ROLE_WEB_IDENTITY_TOKEN = "TENCENTCLOUD_ASSUME_ROLE_WEB_IDENTITY_TOKEN"
140+
PROVIDER_ASSUME_ROLE_PROVIDER_ID = "TENCENTCLOUD_ASSUME_ROLE_PROVIDER_ID"
140141
PROVIDER_SHARED_CREDENTIALS_DIR = "TENCENTCLOUD_SHARED_CREDENTIALS_DIR"
141142
PROVIDER_PROFILE = "TENCENTCLOUD_PROFILE"
142143
PROVIDER_CAM_ROLE_NAME = "TENCENTCLOUD_CAM_ROLE_NAME"
@@ -321,6 +322,12 @@ func Provider() *schema.Provider {
321322
Description: "The `assume_role_with_web_identity` block. If provided, terraform will attempt to assume this role using the supplied credentials.",
322323
Elem: &schema.Resource{
323324
Schema: map[string]*schema.Schema{
325+
"provider_id": {
326+
Type: schema.TypeString,
327+
Optional: true,
328+
DefaultFunc: schema.EnvDefaultFunc(PROVIDER_ASSUME_ROLE_PROVIDER_ID, nil),
329+
Description: "Identity provider name. It can be sourced from the `TENCENTCLOUD_ASSUME_ROLE_PROVIDER_ID`, Default is OIDC.",
330+
},
324331
"web_identity_token": {
325332
Type: schema.TypeString,
326333
Required: true,
@@ -2400,6 +2407,7 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) {
24002407
envPrincipalArn := os.Getenv(PROVIDER_ASSUME_ROLE_PRINCIPAL_ARN)
24012408
// get assume role with web identity from env
24022409
envWebIdentityToken := os.Getenv(PROVIDER_ASSUME_ROLE_WEB_IDENTITY_TOKEN)
2410+
envProviderId := os.Getenv(PROVIDER_ASSUME_ROLE_PROVIDER_ID)
24032411

24042412
if envSamlAssertion == "" && envPrincipalArn == "" && envWebIdentityToken == "" {
24052413
// use assume role
@@ -2419,7 +2427,7 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) {
24192427
needSecret = false
24202428
} else if envWebIdentityToken != "" {
24212429
// use assume role with oidc
2422-
err = genClientWithOidcSTS(&tcClient, envRoleArn, envSessionName, assumeRoleSessionDuration, envWebIdentityToken)
2430+
err = genClientWithOidcSTS(&tcClient, envRoleArn, envSessionName, assumeRoleSessionDuration, envWebIdentityToken, envProviderId)
24232431
if err != nil {
24242432
return nil, fmt.Errorf("Get auth from assume role with OIDC by env failed. Reason: %s", err.Error())
24252433
}
@@ -2458,6 +2466,7 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) {
24582466
assumeRoleSamlAssertion string
24592467
assumeRolePrincipalArn string
24602468
assumeRoleWebIdentityToken string
2469+
assumeRoleProviderId string
24612470
)
24622471

24632472
// get assume role with saml from tf
@@ -2489,8 +2498,8 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) {
24892498
assumeRoleArn = assumeRoleWithWebIdentity["role_arn"].(string)
24902499
assumeRoleSessionName = assumeRoleWithWebIdentity["session_name"].(string)
24912500
assumeRoleSessionDuration = assumeRoleWithWebIdentity["session_duration"].(int)
2492-
2493-
err = genClientWithOidcSTS(&tcClient, assumeRoleArn, assumeRoleSessionName, assumeRoleSessionDuration, assumeRoleWebIdentityToken)
2501+
assumeRoleProviderId = assumeRoleWithWebIdentity["provider_id"].(string)
2502+
err = genClientWithOidcSTS(&tcClient, assumeRoleArn, assumeRoleSessionName, assumeRoleSessionDuration, assumeRoleWebIdentityToken, assumeRoleProviderId)
24942503
if err != nil {
24952504
return nil, fmt.Errorf("Get auth from assume role with OIDC failed. Reason: %s", err.Error())
24962505
}
@@ -2655,15 +2664,18 @@ func genClientWithSamlSTS(tcClient *TencentCloudClient, assumeRoleArn, assumeRol
26552664
return nil
26562665
}
26572666

2658-
func genClientWithOidcSTS(tcClient *TencentCloudClient, assumeRoleArn, assumeRoleSessionName string, assumeRoleSessionDuration int, assumeRolePolicy string) error {
2667+
func genClientWithOidcSTS(tcClient *TencentCloudClient, assumeRoleArn, assumeRoleSessionName string, assumeRoleSessionDuration int, assumeRolePolicy, assumeRoleProviderId string) error {
26592668
// applying STS credentials
26602669
request := sdksts.NewAssumeRoleWithWebIdentityRequest()
26612670
response := sdksts.NewAssumeRoleWithWebIdentityResponse()
2662-
request.ProviderId = helper.String("OIDC")
2671+
if assumeRoleProviderId == "" {
2672+
assumeRoleProviderId = "OIDC"
2673+
}
26632674
request.RoleArn = helper.String(assumeRoleArn)
26642675
request.RoleSessionName = helper.String(assumeRoleSessionName)
26652676
request.DurationSeconds = helper.IntInt64(assumeRoleSessionDuration)
26662677
request.WebIdentityToken = helper.String(assumeRolePolicy)
2678+
request.ProviderId = helper.String(assumeRoleProviderId)
26672679
var stsExtInfo connectivity.StsExtInfo
26682680
stsExtInfo.Authorization = "SKIP"
26692681
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {

website/docs/index.html.markdown

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ Usage:
240240
```hcl
241241
provider "tencentcloud" {
242242
assume_role_with_web_identity {
243+
provider_id = "OIDC"
243244
role_arn = "my-role-arn"
244245
session_name = "my-session-name"
245246
session_duration = 3600
@@ -248,7 +249,7 @@ provider "tencentcloud" {
248249
}
249250
```
250251

251-
The `role_arn`, `session_name`, `session_duration`, `web_identity_token` can also provided via `TENCENTCLOUD_ASSUME_ROLE_ARN`, `TENCENTCLOUD_ASSUME_ROLE_SESSION_NAME`, `TENCENTCLOUD_ASSUME_ROLE_SESSION_DURATION` and `TENCENTCLOUD_ASSUME_ROLE_WEB_IDENTITY_TOKEN` environment variables.
252+
The `provider_id`, `role_arn`, `session_name`, `session_duration`, `web_identity_token` can also provided via `TENCENTCLOUD_ASSUME_ROLE_PROVIDER_ID`, `TENCENTCLOUD_ASSUME_ROLE_ARN`, `TENCENTCLOUD_ASSUME_ROLE_SESSION_NAME`, `TENCENTCLOUD_ASSUME_ROLE_SESSION_DURATION` and `TENCENTCLOUD_ASSUME_ROLE_WEB_IDENTITY_TOKEN` environment variables.
252253

253254
Usage:
254255

@@ -257,6 +258,7 @@ $ export TENCENTCLOUD_SECRET_ID="my-secret-id"
257258
$ export TENCENTCLOUD_SECRET_KEY="my-secret-key"
258259
$ export TENCENTCLOUD_ASSUME_ROLE_SESSION_DURATION=3600
259260
$ export TENCENTCLOUD_ASSUME_ROLE_WEB_IDENTITY_TOKEN="my-web-identity-token"
261+
$ export TENCENTCLOUD_ASSUME_ROLE_PROVIDER_ID="OIDC"
260262
$ terraform plan
261263
```
262264

@@ -322,8 +324,8 @@ locals {
322324
323325
provider "tencentcloud" {
324326
region = local.region
325-
secret_id = "xxxxxx"
326-
secret_key = "xxxxxx"
327+
secret_id = "my-secret-id"
328+
secret_key = "my-secret-key"
327329
cos_domain = "https://${local.cdc_id}.cos-cdc.${local.region}.myqcloud.com/"
328330
}
329331
```
@@ -399,6 +401,7 @@ The nested `assume_role_with_saml` block supports the following:
399401
* `principal_arn` - (Required) Player Access Description Name. It can be sourced from the `TENCENTCLOUD_ASSUME_ROLE_PRINCIPAL_ARN`.
400402

401403
The nested `assume_role_with_web_identity` block supports the following:
404+
* `provider_id` - (Optional) Identity provider name. It can be sourced from the `TENCENTCLOUD_ASSUME_ROLE_PROVIDER_ID`, Default is OIDC.
402405
* `role_arn` - (Required) The ARN of the role to assume. It can also be sourced from the `TENCENTCLOUD_ASSUME_ROLE_ARN` environment variable.
403406
* `session_name` - (Required) The session name to use when making the AssumeRole call. It can also be sourced from the `TENCENTCLOUD_ASSUME_ROLE_SESSION_NAME` environment variable.
404407
* `session_duration` - (Required) The duration of the session when making the AssumeRole call. Its value ranges from 0 to 43200(seconds), and default is 7200 seconds. It can also be sourced from the `TENCENTCLOUD_ASSUME_ROLE_SESSION_DURATION` environment variable.

0 commit comments

Comments
 (0)