From 5e1dba2854ee944168bae40f11f6891545c34cc6 Mon Sep 17 00:00:00 2001 From: Martin Grohme Date: Wed, 27 Nov 2024 14:56:15 +0100 Subject: [PATCH] add workflow to documentation --- .gitignore | 1 + README.md | 19 ++++----- doc/c2paSign.drawio | 85 ++++++++++++++++++++++++++++++++++++++++ doc/c2paSign.drawio.png | Bin 0 -> 53308 bytes doc/fixme_template.yaml | 64 ++++++++++++++++++++++++++++++ 5 files changed, 160 insertions(+), 9 deletions(-) create mode 100644 doc/c2paSign.drawio create mode 100644 doc/c2paSign.drawio.png create mode 100644 doc/fixme_template.yaml diff --git a/.gitignore b/.gitignore index 16d1668..84cc5f4 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /kms_signer/obj *.exe /lambda_c2pasign/obj +/.vs diff --git a/README.md b/README.md index cff06ab..0853bc2 100644 --- a/README.md +++ b/README.md @@ -16,12 +16,13 @@ openssl pkcs8 -topk8 -inform PEM -outform DER -in es256_private.key -out es256_p ## Short Introduction in running c2patool with AWS KMS -1. using parameter `signer-path`, ref [^3] and [^4] - -[^3]: https://github.com/contentauth/c2patool?tab=readme-ov-file#signing-claim-bytes-with-your-own-signer - -[^4]: https://github.com/nitrat7/c2pa_sign_awslambdakms/blob/main/lambda_c2pasign/runC2PA.cs#L208) - -2. and application that gets claim-bytes per standard-input and returns signed bytestream via standard-output, ref [^5] - -[^5]: https://github.com/nitrat7/c2pa_sign_awslambdakms/blob/main/kms_signer/Program.cs#L18 +![system schema](doc/c2paSign.drawio.png) + +1. There's a trigger configured, that once an Object on S3 Bucket has been created in folder "s3BucketPath" (defined by env-variable, default "data"), a call to Lambda function will be initiated. (ref https://github.com/nitrat7/c2pa_sign_awslambdakms/blob/4a185dc5502490e891a8de1c4f493726f3b01be6/lambda_c2pasign/Function.cs#L35) +2. Lambda Function will download Object to local Store +3. Starting Signing with given manifest-definition (ref https://github.com/nitrat7/c2pa_sign_awslambdakms/blob/4a185dc5502490e891a8de1c4f493726f3b01be6/lambda_c2pasign/runC2PA.cs#L201). +To be signed claim-bytes will be sent to AWS KMS - and with stored Config with private Key on AWS KMS (ref https://github.com/nitrat7/c2pa_sign_awslambdakms/blob/main/kms_signer/Program.cs) +Have a look using parameter `signer-path`, (ref https://github.com/nitrat7/c2pa_sign_awslambdakms/blob/main/lambda_c2pasign/runC2PA.cs#L208) and https://github.com/contentauth/c2patool?tab=readme-ov-file#signing-claim-bytes-with-your-own-signer +The kms_signer application that gets claim-bytes per standard-input and returns signed bytestream via standard-output (https://github.com/nitrat7/c2pa_sign_awslambdakms/blob/main/kms_signer/Program.cs#L18) +4. the signed claim bytes will be returned +5. the signed Object will be transferred back to S3-Bucket in folder "s3BucketPathSigned" (defined by env-variable, default "data_sign") \ No newline at end of file diff --git a/doc/c2paSign.drawio b/doc/c2paSign.drawio new file mode 100644 index 0000000..b1463c7 --- /dev/null +++ b/doc/c2paSign.drawio @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/c2paSign.drawio.png b/doc/c2paSign.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..799fdc5c3730ba1f1c25149fb77a1514a70857ba GIT binary patch literal 53308 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 literal 0 HcmV?d00001 diff --git a/doc/fixme_template.yaml b/doc/fixme_template.yaml new file mode 100644 index 0000000..d27c764 --- /dev/null +++ b/doc/fixme_template.yaml @@ -0,0 +1,64 @@ +Transform: AWS::Serverless-2016-10-31 +Resources: + FunctionC2PASign: + Type: AWS::Serverless::Function + Properties: + Description: !Sub + - Stack ${AWS::StackName} Function ${ResourceName} + - ResourceName: FunctionC2PASign + CodeUri: lambda_c2pasign/ + Handler: lambda_c2pasign::c2panalyze2.Function::FunctionHandlerSign + Runtime: dotnet8 + MemorySize: 3008 + Timeout: 600 + Tracing: Active + Events: + BucketC2PASign: + Type: S3 + Properties: + Bucket: !Ref BucketC2PASign + Events: + - s3:ObjectCreated:* + FunctionC2PASignLogGroup: + Type: AWS::Logs::LogGroup + DeletionPolicy: Retain + Properties: + LogGroupName: !Sub /aws/lambda/${FunctionC2PASign} + BucketC2PASign: + Type: AWS::S3::Bucket + Properties: + BucketName: !Sub ${AWS::StackName}-bucketc2p-${AWS::AccountId} + BucketEncryption: + ServerSideEncryptionConfiguration: + - ServerSideEncryptionByDefault: + SSEAlgorithm: aws:kms + KMSMasterKeyID: alias/aws/s3 + PublicAccessBlockConfiguration: + IgnorePublicAcls: true + RestrictPublicBuckets: true + BucketC2PASignBucketPolicy: + Type: AWS::S3::BucketPolicy + Properties: + Bucket: !Ref BucketC2PASign + PolicyDocument: + Id: RequireEncryptionInTransit + Version: '2012-10-17' + Statement: + - Principal: '*' + Action: '*' + Effect: Deny + Resource: + - !GetAtt BucketC2PASign.Arn + - !Sub ${BucketC2PASign.Arn}/* + Condition: + Bool: + aws:SecureTransport: 'false' + RolePolicy: + Type: AWS::IAM::RolePolicy + Properties: + RoleName: + PolicyName: + Role: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: \ No newline at end of file