Skip to content

Commit 15bc8ff

Browse files
committed
feat(sdb): Add policies and API Keys to access the Serverless instance
1 parent ff4ac0d commit 15bc8ff

File tree

5 files changed

+102
-0
lines changed

5 files changed

+102
-0
lines changed

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,17 @@ module "sdb" {
2929

3030
| Name | Type |
3131
|------|------|
32+
| [scaleway_iam_api_key.admin](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/iam_api_key) | resource |
33+
| [scaleway_iam_api_key.ro](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/iam_api_key) | resource |
34+
| [scaleway_iam_api_key.rw](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/iam_api_key) | resource |
35+
| [scaleway_iam_application.admin](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/iam_application) | resource |
36+
| [scaleway_iam_application.ro](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/iam_application) | resource |
37+
| [scaleway_iam_application.rw](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/iam_application) | resource |
38+
| [scaleway_iam_policy.admin](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/iam_policy) | resource |
39+
| [scaleway_iam_policy.ro](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/iam_policy) | resource |
40+
| [scaleway_iam_policy.rw](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/iam_policy) | resource |
3241
| [scaleway_sdb_sql_database.main](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/sdb_sql_database) | resource |
42+
| [scaleway_account_project.current](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/data-sources/account_project) | data source |
3343

3444
## Inputs
3545

@@ -44,7 +54,10 @@ module "sdb" {
4454

4555
| Name | Description |
4656
|------|-------------|
57+
| <a name="output_admin_connection_string"></a> [admin_connection_string](#output_admin_connection_string) | Connection string to connect with admin permissions. |
4758
| <a name="output_endpoint"></a> [endpoint](#output_endpoint) | Endpoint of the database. |
59+
| <a name="output_ro_connection_string"></a> [ro_connection_string](#output_ro_connection_string) | Connection string to connect with read only permissions. |
60+
| <a name="output_rw_connection_string"></a> [rw_connection_string](#output_rw_connection_string) | Connection string to connect with read/write permissions. |
4861
<!-- END_TF_DOCS -->
4962

5063
## Authors

access_admin.tf

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
data "scaleway_account_project" "current" {}
2+
3+
resource "scaleway_iam_application" "admin" {
4+
name = format("SDB - %s - Admin", var.name)
5+
description = format("Full access to Serverless SQL Database %s", var.name)
6+
}
7+
8+
resource "scaleway_iam_policy" "admin" {
9+
name = format("SDB - %s - Admin", var.name)
10+
description = format("Full access to Serverless SQL Database %s", var.name)
11+
application_id = scaleway_iam_application.admin.id
12+
13+
rule {
14+
project_ids = [data.scaleway_account_project.current.id]
15+
permission_set_names = ["ServerlessSQLDatabaseFullAccess"]
16+
}
17+
}
18+
19+
resource "scaleway_iam_api_key" "admin" {
20+
application_id = scaleway_iam_application.admin.id
21+
}

access_ro.tf

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
resource "scaleway_iam_application" "ro" {
2+
name = format("SDB - %s - RW", var.name)
3+
description = format("Read access to Serverless SQL Database %s", var.name)
4+
}
5+
6+
resource "scaleway_iam_policy" "ro" {
7+
name = format("SDB - %s - RO", var.name)
8+
description = format("Read access to Serverless SQL Database %s", var.name)
9+
application_id = scaleway_iam_application.ro.id
10+
11+
rule {
12+
project_ids = [data.scaleway_account_project.current.id]
13+
permission_set_names = ["ServerlessSQLDatabaseReadOnly"]
14+
}
15+
}
16+
17+
resource "scaleway_iam_api_key" "ro" {
18+
application_id = scaleway_iam_application.ro.id
19+
}

access_rw.tf

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
resource "scaleway_iam_application" "rw" {
2+
name = format("SDB - %s - RW", var.name)
3+
description = format("Read and write access to Serverless SQL Database %s", var.name)
4+
}
5+
6+
resource "scaleway_iam_policy" "rw" {
7+
name = format("SDB - %s - RW", var.name)
8+
description = format("Read and write access to Serverless SQL Database %s", var.name)
9+
application_id = scaleway_iam_application.rw.id
10+
11+
rule {
12+
project_ids = [data.scaleway_account_project.current.id]
13+
permission_set_names = ["ServerlessSQLDatabaseReadWrite"]
14+
}
15+
}
16+
17+
resource "scaleway_iam_api_key" "rw" {
18+
application_id = scaleway_iam_application.rw.id
19+
}

outputs.tf

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,33 @@ output "endpoint" {
22
description = "Endpoint of the database."
33
value = scaleway_sdb_sql_database.main.endpoint
44
}
5+
6+
output "admin_connection_string" {
7+
description = "Connection string to connect with admin permissions."
8+
value = format("postgres://%s:%s@%s",
9+
scaleway_iam_application.admin.id,
10+
scaleway_iam_api_key.admin.secret_key,
11+
trimprefix(scaleway_sdb_sql_database.main.endpoint, "postgres://"),
12+
)
13+
sensitive = true
14+
}
15+
16+
output "ro_connection_string" {
17+
description = "Connection string to connect with read only permissions."
18+
value = format("postgres://%s:%s@%s",
19+
scaleway_iam_application.ro.id,
20+
scaleway_iam_api_key.ro.secret_key,
21+
trimprefix(scaleway_sdb_sql_database.main.endpoint, "postgres://"),
22+
)
23+
sensitive = true
24+
}
25+
26+
output "rw_connection_string" {
27+
description = "Connection string to connect with read/write permissions."
28+
value = format("postgres://%s:%s@%s",
29+
scaleway_iam_application.rw.id,
30+
scaleway_iam_api_key.rw.secret_key,
31+
trimprefix(scaleway_sdb_sql_database.main.endpoint, "postgres://"),
32+
)
33+
sensitive = true
34+
}

0 commit comments

Comments
 (0)