Skip to content

Commit 4d37f35

Browse files
Merge pull request #333 from originalworks/use-secrets-manager-for-blobs-batch-sender
Use secrets manager for blobs batch sender
2 parents 0bba603 + 4764cb0 commit 4d37f35

7 files changed

Lines changed: 105 additions & 29 deletions

File tree

Cargo.lock

Lines changed: 30 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

aws/blobs_batch_sender/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ serde = { workspace = true }
1515
serde_json = { workspace = true }
1616
aws-sdk-s3 = "1.98.0"
1717
alloy = { version = "1.0.32", features = ["full"] }
18+
aws-sdk-secretsmanager = "1.95.0"

aws/blobs_batch_sender/src/main.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
mod contract;
22
mod event_handler;
33
mod s3;
4+
mod secrets;
45
use event_handler::function_handler;
56
use lambda_runtime::{Error, run, service_fn, tracing};
67

8+
use crate::secrets::set_secret_envs;
9+
710
#[tokio::main]
811
async fn main() -> Result<(), Error> {
12+
set_secret_envs().await?;
913
tracing::init_default_subscriber();
1014
run(service_fn(function_handler)).await
1115
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
use aws_config::{BehaviorVersion, meta::region::RegionProviderChain};
2+
use lambda_runtime::Error;
3+
use serde::{Deserialize, Serialize};
4+
use std::env;
5+
6+
#[allow(non_snake_case)]
7+
#[derive(Debug, Serialize, Deserialize)]
8+
struct OwenSecretEnvs {
9+
RPC_URL: String,
10+
PRIVATE_KEY: String,
11+
}
12+
13+
pub async fn set_secret_envs() -> Result<(), Error> {
14+
let region_provider = RegionProviderChain::default_provider().or_else("us-east-1");
15+
let aws_main_config = aws_config::defaults(BehaviorVersion::latest())
16+
.region(region_provider)
17+
.load()
18+
.await;
19+
let client = aws_sdk_secretsmanager::Client::new(&aws_main_config);
20+
let owen_lambda_secrets_name = env::var("OWEN_LAMBDA_SECRETS_NAME")
21+
.expect(format!("Missing env variable: OWEN_LAMBDA_SECRETS_NAME").as_str());
22+
23+
let response = client
24+
.get_secret_value()
25+
.secret_id(owen_lambda_secrets_name)
26+
.send()
27+
.await?;
28+
29+
let secrets_json_string = response
30+
.secret_string()
31+
.expect("Could not retrieve secret string from AWS SM");
32+
33+
let owen_secret_envs: OwenSecretEnvs = serde_json::from_str(secrets_json_string)?;
34+
unsafe {
35+
env::set_var("RPC_URL", owen_secret_envs.RPC_URL);
36+
env::set_var("PRIVATE_KEY", owen_secret_envs.PRIVATE_KEY);
37+
}
38+
39+
Ok(())
40+
}

aws/owen-infra/resources/owen-blobs-queue.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@ Transform: AWS::Serverless-2016-10-31
33
Parameters:
44
BlobsTempStorageBucketName:
55
Type: String
6+
OwenLambdaSecretsName:
7+
Type: String
8+
DdexSequencerAddress:
9+
Type: String
10+
SeoaAddress:
11+
Type: String
12+
13+
Conditions:
14+
OverwriteDdexSequencerAddress: !Not [!Equals [!Ref DdexSequencerAddress, ""]]
615

716
Resources:
817
OwenBlobsQueue:
@@ -37,6 +46,13 @@ Resources:
3746
Environment:
3847
Variables:
3948
BLOBS_TEMP_STORAGE_BUCKET_NAME: !Ref BlobsTempStorageBucketName
49+
OWEN_LAMBDA_SECRETS_NAME: !Ref OwenLambdaSecretsName
50+
USE_KMS: false
51+
S_EOA_ADDRESS: !Ref SeoaAddress
52+
DDEX_SEQUENCER_ADDRESS: !If
53+
- OverwriteDdexSequencerAddress
54+
- !Ref DdexSequencerAddress
55+
- !Ref "AWS::NoValue"
4056

4157
MyLambdaEventSourceMapping:
4258
Type: AWS::Lambda::EventSourceMapping
@@ -79,6 +95,13 @@ Resources:
7995
- s3:GetObject
8096
- s3:ListBucket
8197
Resource: !Sub "${BlobsTempStorage.Arn}/*"
98+
- PolicyName: OwenLambdaSecretsAccess
99+
PolicyDocument:
100+
Version: "2012-10-17"
101+
Statement:
102+
- Effect: Allow
103+
Action: secretsmanager:GetSecretValue
104+
Resource: !Sub "arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:${OwenLambdaSecretsName}*"
82105

83106
BlobsTempStorage:
84107
Type: AWS::S3::Bucket

aws/owen-infra/template-config-dev.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"Environment": "development",
1414
"OwenLambdaSecretsName": "OwenLambdaSecretsDev",
1515
"DdexSequencerAddress": "75AbeCf07C26368F0f4AA0b0d3637A732E25467e",
16-
"StorachaBridgeUrl": "https://lwdrum6osj.execute-api.us-east-1.amazonaws.com/stage/"
16+
"StorachaBridgeUrl": "https://lwdrum6osj.execute-api.us-east-1.amazonaws.com/stage/",
17+
"SeoaAddress": "18f6d8e8b6b72bd9088dd452c63af0a79e2b58b3"
1718
}
1819
}

aws/owen-infra/template.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ Parameters:
3939
BlobsTempStorageBucketPrefix:
4040
Default: owen-blobs-temp-storage
4141
Type: String
42+
SeoaAddress:
43+
Type: String
4244

4345
Conditions:
4446
ShouldCreateNewBucket: !Equals [!Ref CreateNewBucket, "true"]
@@ -281,3 +283,6 @@ Resources:
281283
Location: ./resources/owen-blobs-queue.yml
282284
Parameters:
283285
BlobsTempStorageBucketName: !Sub "${BlobsTempStorageBucketPrefix}-${Environment}"
286+
OwenLambdaSecretsName: !Ref OwenLambdaSecretsName
287+
DdexSequencerAddress: !Ref DdexSequencerAddress
288+
SeoaAddress: !Ref SeoaAddress

0 commit comments

Comments
 (0)