-
Notifications
You must be signed in to change notification settings - Fork 3
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
feat: Support permission init for control plane management volume #104
base: main
Are you sure you want to change the base?
Changes from all commits
9ffca38
41e6788
a2b4989
a5929c5
559eea4
f4dbc20
7d46c0d
1778f65
737a5d5
56ab268
be99962
9c93682
144090e
3450f86
548adf1
6dac346
c26dca9
9429ef5
f05e13a
1169a4e
53159bc
89841d6
7e1708a
b97de86
ab5c8a4
a59d6e3
c849dc1
a9e1dab
58db995
4fa0eb4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
module "sn_managed_cloud" { | ||
source = "../../modules/aws/volume-access" | ||
|
||
external_id = "<your-organization-id>" | ||
role = "<role-name>" | ||
buckets = [] | ||
|
||
account_ids = [] | ||
|
||
streamnative_vendor_access_role_arns = [] | ||
} |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,109 @@ | ||||||||||||||||||||||||||||||||||||||||
data "aws_caller_identity" "current" {} | ||||||||||||||||||||||||||||||||||||||||
locals { | ||||||||||||||||||||||||||||||||||||||||
external_id = (var.external_id != "" ? [{ test : "StringEquals", variable : "sts:ExternalId", values : [var.external_id] }] : []) | ||||||||||||||||||||||||||||||||||||||||
account_ids = distinct(concat(var.account_ids, local.default_account_ids)) | ||||||||||||||||||||||||||||||||||||||||
bucket_list = distinct([for item in var.buckets : "arn:aws:s3:::${split("/", item)[0]}"]) | ||||||||||||||||||||||||||||||||||||||||
bucket_path_list = distinct([for item in var.buckets : "arn:aws:s3:::${item}"]) | ||||||||||||||||||||||||||||||||||||||||
tag_set = merge({ Vendor = "StreamNative", Module = "StreamNative Volume", SNVersion = var.sn_policy_version }, var.tags) | ||||||||||||||||||||||||||||||||||||||||
default_account_ids = compact([ | ||||||||||||||||||||||||||||||||||||||||
# will add it in the next pr | ||||||||||||||||||||||||||||||||||||||||
]) | ||||||||||||||||||||||||||||||||||||||||
conditions = [ | ||||||||||||||||||||||||||||||||||||||||
for value in local.account_ids : | ||||||||||||||||||||||||||||||||||||||||
[ | ||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||
test : "StringEquals", | ||||||||||||||||||||||||||||||||||||||||
variable : "sts:ExternalId", | ||||||||||||||||||||||||||||||||||||||||
values : [var.external_id] | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
Comment on lines
+11
to
+21
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
data "aws_iam_policy_document" "streamnative_management_access" { | ||||||||||||||||||||||||||||||||||||||||
statement { | ||||||||||||||||||||||||||||||||||||||||
sid = "AllowStreamNativeControlPlaneAccess" | ||||||||||||||||||||||||||||||||||||||||
effect = "Allow" | ||||||||||||||||||||||||||||||||||||||||
actions = ["sts:AssumeRole"] | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
principals { | ||||||||||||||||||||||||||||||||||||||||
type = "AWS" | ||||||||||||||||||||||||||||||||||||||||
identifiers = var.streamnative_vendor_access_role_arns | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
dynamic "condition" { | ||||||||||||||||||||||||||||||||||||||||
for_each = local.external_id | ||||||||||||||||||||||||||||||||||||||||
content { | ||||||||||||||||||||||||||||||||||||||||
test = condition.value["test"] | ||||||||||||||||||||||||||||||||||||||||
values = condition.value["values"] | ||||||||||||||||||||||||||||||||||||||||
variable = condition.value["variable"] | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
dynamic "statement" { | ||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This block is duplicated, since the
Suggested change
|
||||||||||||||||||||||||||||||||||||||||
for_each = local.conditions | ||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||
content { | ||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||
effect = "Allow" | ||||||||||||||||||||||||||||||||||||||||
actions = ["sts:AssumeRole"] | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
principals { | ||||||||||||||||||||||||||||||||||||||||
type = "AWS" | ||||||||||||||||||||||||||||||||||||||||
identifiers = [for account_id in local.account_ids : "arn:aws:iam::${account_id}:root"] | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
dynamic "condition" { | ||||||||||||||||||||||||||||||||||||||||
for_each = toset(statement.value) | ||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||
content { | ||||||||||||||||||||||||||||||||||||||||
test = condition.value["test"] | ||||||||||||||||||||||||||||||||||||||||
values = condition.value["values"] | ||||||||||||||||||||||||||||||||||||||||
variable = condition.value["variable"] | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
###### | ||||||||||||||||||||||||||||||||||||||||
#-- Create the IAM role for the the StreamNative Cloud data plane access to s3 bucket | ||||||||||||||||||||||||||||||||||||||||
###### | ||||||||||||||||||||||||||||||||||||||||
resource "aws_iam_role_policy" "access_bucket_role" { | ||||||||||||||||||||||||||||||||||||||||
name = var.role | ||||||||||||||||||||||||||||||||||||||||
role = var.role | ||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||
policy = jsonencode({ | ||||||||||||||||||||||||||||||||||||||||
"Version" : "2012-10-17", | ||||||||||||||||||||||||||||||||||||||||
"Statement" : [ | ||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||
"Effect" : "Allow", | ||||||||||||||||||||||||||||||||||||||||
"Action" : [ | ||||||||||||||||||||||||||||||||||||||||
"s3:ListBucket" | ||||||||||||||||||||||||||||||||||||||||
], | ||||||||||||||||||||||||||||||||||||||||
"Resource" : local.bucket_list | ||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||
"Effect" : "Allow", | ||||||||||||||||||||||||||||||||||||||||
"Action" : [ | ||||||||||||||||||||||||||||||||||||||||
"s3:PutObject", | ||||||||||||||||||||||||||||||||||||||||
"s3:GetObject", | ||||||||||||||||||||||||||||||||||||||||
"s3:DeleteObject" | ||||||||||||||||||||||||||||||||||||||||
], | ||||||||||||||||||||||||||||||||||||||||
"Resource" : [for item in local.bucket_path_list : "${item}/*"] | ||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||
"Effect" : "Allow", | ||||||||||||||||||||||||||||||||||||||||
"Action" : [ | ||||||||||||||||||||||||||||||||||||||||
"s3:PutLifecycleConfiguration", | ||||||||||||||||||||||||||||||||||||||||
"s3:GetLifecycleConfiguration" | ||||||||||||||||||||||||||||||||||||||||
], | ||||||||||||||||||||||||||||||||||||||||
"Resource" : local.bucket_path_list | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
resource "aws_iam_role" "access_bucket_role" { | ||||||||||||||||||||||||||||||||||||||||
name = var.role | ||||||||||||||||||||||||||||||||||||||||
description = "This role is used by StreamNative for the access s3 bucket." | ||||||||||||||||||||||||||||||||||||||||
assume_role_policy = data.aws_iam_policy_document.streamnative_management_access.json | ||||||||||||||||||||||||||||||||||||||||
path = "/StreamNative/" | ||||||||||||||||||||||||||||||||||||||||
tags = local.tag_set | ||||||||||||||||||||||||||||||||||||||||
max_session_duration = 43200 | ||||||||||||||||||||||||||||||||||||||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
variable "sn_policy_version" { | ||
description = "The value of SNVersion tag" | ||
default = "3.16.1" # {{ x-release-please-version }} | ||
type = string | ||
} | ||
|
||
variable "streamnative_vendor_access_role_arns" { | ||
default = ["arn:aws:iam::311022431024:role/cloud-manager"] | ||
description = "This role for access customer s3 bucket on control plane." | ||
type = list(string) | ||
} | ||
|
||
variable "external_id" { | ||
default = "" | ||
description = "A external ID that correspond to your Organization within StreamNative Cloud, used for all STS assume role calls to the IAM roles created by the module. This will be the organization ID in the StreamNative console, e.g. \"o-xhopj\"." | ||
type = string | ||
} | ||
|
||
variable "tags" { | ||
default = {} | ||
description = "Extra tags to apply to the resources created by this module." | ||
type = map(string) | ||
} | ||
|
||
variable "buckets" { | ||
default = [] | ||
description = "User bucket and path name" | ||
type = list(string) | ||
} | ||
|
||
variable "role" { | ||
description = "Your aws iam role for access s3 bucket" | ||
type = string | ||
} | ||
|
||
variable "account_ids" { | ||
default = [] | ||
description = "Your account id" | ||
type = list(string) | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
terraform { | ||
required_version = ">= 1.0" | ||
|
||
required_providers { | ||
aws = { | ||
source = "hashicorp/aws" | ||
version = ">= 5.30" | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Will change it after this pr approve and merged