Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add iam_tags to vault_aws_secret_backend_role #2231

Merged
merged 4 commits into from
May 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
## Unreleased

FEATURES:
* Add support for `iam_tags` in `vault_aws_secret_backend_role` ([#2231](https://github.com/hashicorp/terraform-provider-vault/pull/2231)).

## 4.2.0 (Mar 27, 2024)

FEATURES:
Expand Down
16 changes: 16 additions & 0 deletions vault/resource_aws_secret_backend_role.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,14 @@ func awsSecretBackendRoleResource(name string) *schema.Resource {
Optional: true,
Description: "A list of IAM group names. IAM users generated against this vault role will be added to these IAM Groups. For a credential type of assumed_role or federation_token, the policies sent to the corresponding AWS call (sts:AssumeRole or sts:GetFederation) will be the policies from each group in iam_groups combined with the policy_document and policy_arns parameters.",
},
"iam_tags": {
Type: schema.TypeMap,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
Description: "A map of strings representing key/value pairs used as tags for any IAM user created by this role.",
},
"default_sts_ttl": {
Type: schema.TypeInt,
Optional: true,
Expand Down Expand Up @@ -123,6 +131,8 @@ func awsSecretBackendRoleWrite(d *schema.ResourceData, meta interface{}) error {

iamGroups := d.Get("iam_groups").(*schema.Set).List()

iamTags := d.Get("iam_tags")

if policyDocument == "" && len(policyARNs) == 0 && len(roleARNs) == 0 && len(iamGroups) == 0 {
return fmt.Errorf("at least one of: `policy_document`, `policy_arns`, `role_arns` or `iam_groups` must be set")
}
Expand Down Expand Up @@ -155,6 +165,9 @@ func awsSecretBackendRoleWrite(d *schema.ResourceData, meta interface{}) error {
if d.HasChange("iam_groups") {
data["iam_groups"] = iamGroups
}
if d.HasChange("iam_tags") {
data["iam_tags"] = iamTags
}
if d.HasChange("user_path") {
if credentialType == "iam_user" {
data["user_path"] = userPath
Expand Down Expand Up @@ -239,6 +252,9 @@ func awsSecretBackendRoleRead(d *schema.ResourceData, meta interface{}) error {
if v, ok := secret.Data["iam_groups"]; ok {
d.Set("iam_groups", v)
}
if v, ok := secret.Data["iam_tags"]; ok {
d.Set("iam_tags", v)
}
if v, ok := secret.Data["permissions_boundary_arn"]; ok {
d.Set("permissions_boundary_arn", v)
}
Expand Down
30 changes: 28 additions & 2 deletions vault/resource_aws_secret_backend_role_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ const (
testAccAWSSecretBackendRolePermissionsBoundaryArn_updated = "arn:aws:iam::123456789123:policy/boundary2"
testAccAWSSecretBackendRoleIamUserPath_basic = "/path1/"
testAccAWSSecretBackendRoleIamUserPath_updated = "/path2/"
testAccAWSSecretBackendRoleIamTag_key_basic = "key1"
testAccAWSSecretBackendRoleIamTag_value_basic = "value1"
testAccAWSSecretBackendRoleIamTag_key_updated = "key2"
testAccAWSSecretBackendRoleIamTag_value_updated = "value2"
)

func TestAccAWSSecretBackendRole_basic(t *testing.T) {
Expand Down Expand Up @@ -167,6 +171,8 @@ func testAccAWSSecretBackendRoleCheckBasicAttributes(name, backend string) resou
resource.TestCheckResourceAttr("vault_aws_secret_backend_role.test_iam_user_type_optional_attributes", "policy_arns.0", testAccAWSSecretBackendRolePolicyArn_basic),
resource.TestCheckResourceAttr("vault_aws_secret_backend_role.test_iam_user_type_optional_attributes", "permissions_boundary_arn", testAccAWSSecretBackendRolePermissionsBoundaryArn_basic),
resource.TestCheckResourceAttr("vault_aws_secret_backend_role.test_iam_user_type_optional_attributes", "user_path", testAccAWSSecretBackendRoleIamUserPath_basic),
resource.TestCheckResourceAttr("vault_aws_secret_backend_role.test_iam_user_type_optional_attributes", "iam_tags.%", "1"),
resource.TestCheckResourceAttr("vault_aws_secret_backend_role.test_iam_user_type_optional_attributes", fmt.Sprintf("iam_tags.%s", testAccAWSSecretBackendRoleIamTag_key_basic), testAccAWSSecretBackendRoleIamTag_value_basic),
)
}

Expand Down Expand Up @@ -205,6 +211,8 @@ func testAccAWSSecretBackendRoleCheckUpdatedAttributes(name, backend string) res
resource.TestCheckResourceAttr("vault_aws_secret_backend_role.test_iam_user_type_optional_attributes", "policy_arns.0", testAccAWSSecretBackendRolePolicyArn_updated),
resource.TestCheckResourceAttr("vault_aws_secret_backend_role.test_iam_user_type_optional_attributes", "permissions_boundary_arn", testAccAWSSecretBackendRolePermissionsBoundaryArn_updated),
resource.TestCheckResourceAttr("vault_aws_secret_backend_role.test_iam_user_type_optional_attributes", "user_path", testAccAWSSecretBackendRoleIamUserPath_updated),
resource.TestCheckResourceAttr("vault_aws_secret_backend_role.test_iam_user_type_optional_attributes", "iam_tags.%", "1"),
resource.TestCheckResourceAttr("vault_aws_secret_backend_role.test_iam_user_type_optional_attributes", fmt.Sprintf("iam_tags.%s", testAccAWSSecretBackendRoleIamTag_key_updated), testAccAWSSecretBackendRoleIamTag_value_updated),
)
}

Expand Down Expand Up @@ -274,8 +282,17 @@ resource "vault_aws_secret_backend_role" "test_iam_user_type_optional_attributes
backend = vault_aws_secret_backend.test.path
permissions_boundary_arn = "%s"
user_path = "%s"
iam_tags = {
%s = "%s"
}
}
`, name, testAccAWSSecretBackendRolePolicyArn_basic, testAccAWSSecretBackendRolePermissionsBoundaryArn_basic, testAccAWSSecretBackendRoleIamUserPath_basic),
`,
name,
testAccAWSSecretBackendRolePolicyArn_basic,
testAccAWSSecretBackendRolePermissionsBoundaryArn_basic,
testAccAWSSecretBackendRoleIamUserPath_basic,
testAccAWSSecretBackendRoleIamTag_key_basic,
testAccAWSSecretBackendRoleIamTag_value_basic),
}

return strings.Join(resources, "\n")
Expand Down Expand Up @@ -360,8 +377,17 @@ resource "vault_aws_secret_backend_role" "test_iam_user_type_optional_attributes
backend = vault_aws_secret_backend.test.path
permissions_boundary_arn = "%s"
user_path = "%s"
iam_tags = {
%s = "%s"
}
}
`, name, testAccAWSSecretBackendRolePolicyArn_updated, testAccAWSSecretBackendRolePermissionsBoundaryArn_updated, testAccAWSSecretBackendRoleIamUserPath_updated),
`,
name,
testAccAWSSecretBackendRolePolicyArn_updated,
testAccAWSSecretBackendRolePermissionsBoundaryArn_updated,
testAccAWSSecretBackendRoleIamUserPath_updated,
testAccAWSSecretBackendRoleIamTag_key_updated,
testAccAWSSecretBackendRoleIamTag_value_updated),
}
return strings.Join(resources, "\n")
}
3 changes: 3 additions & 0 deletions website/docs/r/aws_secret_backend_role.html.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ The following arguments are supported:
policies from each group in `iam_groups` combined with the `policy_document`
and `policy_arns` parameters.

* `iam_tags` (Optional) - A map of strings representing key/value pairs
to be used as tags for any IAM user that is created by this role.

* `default_sts_ttl` - (Optional) The default TTL in seconds for STS credentials.
When a TTL is not specified when STS credentials are requested,
and a default TTL is specified on the role,
Expand Down
Loading