Skip to content

Commit 431c5d8

Browse files
sressiersressier
authored andcommitted
update code with permissions, export
1 parent 2cbdf45 commit 431c5d8

6 files changed

Lines changed: 22 additions & 10 deletions

File tree

lambdas/functions/iroco2-client-side-scanner/cur.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ resource "aws_bcmdataexports_export" "CUR" {
22
export {
33
name = var.bcm_data_export_name
44
data_query {
5-
query_statement = "SELECT identity_line_item_id, identity_time_interval, line_item_product_code,line_item_unblended_cost FROM COST_AND_USAGE_REPORT"
5+
query_statement = "SELECT line_item_usage_amount, product_region_code, product_servicecode, line_item_usage_type FROM COST_AND_USAGE_REPORT"
66
table_configurations = {
77
COST_AND_USAGE_REPORT = {
88
BILLING_VIEW_ARN = "arn:aws:billing::${data.aws_caller_identity.current.account_id}:billingview/primary"

lambdas/functions/iroco2-client-side-scanner/iam.tf

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ resource "aws_iam_role_policy" "lambda_s3_kms_access" {
3939
"s3:GetObjectVersion",
4040
"s3:ListBucket"
4141
]
42-
Resource = "${aws_s3_bucket.cur_output.arn}/*"
42+
Resource = [
43+
"${aws_s3_bucket.cur_output.arn}",
44+
"${aws_s3_bucket.cur_output.arn}/*"
45+
]
4346
},
4447
{
4548
Effect = "Allow"

lambdas/functions/iroco2-client-side-scanner/layers/python/lib/python3.11/site-packages/ec2_service.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,26 @@ class CurProcessorEC2Service:
2222

2323
cur_useful_column_keyname_matrix = {
2424
'service_code': {
25+
'gz': 'product/servicecode',
2526
'zip': 'product/servicecode',
2627
'csv': 'product/servicecode',
2728
'parquet': 'product_servicecode'
2829
},
2930
'usage_type': {
31+
'gz': 'lineItem/UsageType',
3032
'zip': 'lineItem/UsageType',
3133
'csv': 'lineItem/UsageType',
3234
'parquet': 'line_item_usage_type'
3335
},
3436
'region_code': {
3537
'zip': 'product/regionCode',
38+
'gz': 'product/regionCode',
3639
'csv': 'product/regionCode',
3740
'parquet': 'product_region_code'
3841
},
3942
'instance_type': {
4043
'zip': 'product/instanceType',
44+
'gz': 'product/instanceType',
4145
'csv': 'product/instanceType',
4246
'parquet': 'product_instance_type'
4347
}
@@ -47,6 +51,8 @@ def creating_message_from_cur(self, cur, cur_file_type):
4751
try:
4852
useful_column = [values[cur_file_type] for values in self.cur_useful_column_keyname_matrix.values()]
4953
match cur_file_type:
54+
case 'gz':
55+
cur_with_useful_colum = pd.read_csv(BytesIO(cur), usecols=useful_column, compression='gzip', low_memory=False)
5056
case 'zip':
5157
cur_with_useful_colum = pd.read_csv(BytesIO(cur), usecols=useful_column, compression='zip', low_memory=False)
5258
case 'csv':

lambdas/functions/iroco2-client-side-scanner/layers/python/lib/python3.11/site-packages/s3_service.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,25 @@ class CurProcessorS3Service:
2525
cur_useful_column_keyname_matrix = {
2626
'service_code': {
2727
'zip': 'product/servicecode',
28+
'gz': 'product/servicecode',
2829
'csv': 'product/servicecode',
2930
'parquet': 'product_servicecode'
3031
},
3132
'usage_type': {
3233
'zip': 'lineItem/UsageType',
34+
'gz': 'lineItem/UsageType',
3335
'csv': 'lineItem/UsageType',
3436
'parquet': 'line_item_usage_type'
3537
},
3638
'region_code': {
3739
'zip': 'product/regionCode',
40+
'gz': 'product/regionCode',
3841
'csv': 'product/regionCode',
3942
'parquet': 'product_region_code'
4043
},
4144
'usage_amount': {
4245
'zip': 'lineItem/UsageAmount',
46+
'gz': 'lineItem/UsageAmount',
4347
'csv': 'lineItem/UsageAmount',
4448
'parquet': 'line_item_usage_amount'
4549
}
@@ -86,6 +90,8 @@ def __creating_message_from_cur_for_storage(self, cur):
8690
match self.cur_file_type:
8791
case 'zip':
8892
cur_with_useful_colum = pd.read_csv(BytesIO(cur), usecols=useful_columns, compression='zip', low_memory=False)
93+
case 'gz':
94+
cur_with_useful_colum = pd.read_csv(BytesIO(cur), usecols=useful_columns, compression='gzip', low_memory=False)
8995
case 'csv':
9096
cur_with_useful_colum = pd.read_csv(StringIO(cur.decode('utf-8')), usecols=useful_columns, low_memory=False)
9197
case 'parquet':

lambdas/functions/iroco2-client-side-scanner/package/cur_scrapper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def __init__(self):
3131
def parsing_cur_and_send_to_api(self, bucket_name, s3_file_name):
3232
cur_file_type = os.path.splitext(s3_file_name)[1].replace(".", "")
3333
print(cur_file_type)
34-
cur = self.s3_repository.read_file(bucket_name, s3_file_name)
34+
cur = self.s3_repository.read_file(bucket_name, urllib.parse.unquote_plus(s3_file_name))
3535
message_parsed = []
3636
parsed_ec2_message = self.cur_processor_ec2_service.creating_message_from_cur(cur, cur_file_type)
3737
print(f'EC2 messages: {parsed_ec2_message}')

lambdas/functions/iroco2-client-side-scanner/s3.tf

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,15 @@ resource "aws_s3_bucket_policy" "cur_output" {
7171
}
7272
Action = [
7373
"s3:GetBucketPolicy",
74-
"s3:PutObject",
75-
"s3:ListBucket"
74+
"s3:PutObject"
7675
]
7776
Resource = [
7877
"arn:aws:s3:::${var.cur_output_bucket_name}",
7978
"arn:aws:s3:::${var.cur_output_bucket_name}/*"
8079
]
8180
Condition = {
82-
StringEquals = {
83-
"aws:SourceAccount" = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:root",
84-
},
8581
StringLike = {
82+
"aws:SourceAccount" = data.aws_caller_identity.current.account_id,
8683
"aws:SourceArn" = [
8784
"arn:aws:bcm-data-exports:us-east-1:${data.aws_caller_identity.current.account_id}:export/*",
8885
"arn:aws:cur:us-east-1:${data.aws_caller_identity.current.account_id}:definition/*"
@@ -95,8 +92,8 @@ resource "aws_s3_bucket_policy" "cur_output" {
9592
Principal = {
9693
AWS = aws_iam_role.lambda_execution.arn
9794
}
98-
NotAction = "s3:GetObject"
99-
Resource = "${aws_s3_bucket.cur_output.arn}/*"
95+
NotAction = ["s3:GetObject", "s3:ListBucket"]
96+
Resource = ["${aws_s3_bucket.cur_output.arn}/*", aws_s3_bucket.cur_output.arn]
10097
Condition = {
10198
Bool = {
10299
"aws:SecureTransport" = "true"

0 commit comments

Comments
 (0)