Virus scan S3 buckets with a serverless ClamAV based CDK construct

海外精选
海外精选的内容汇集了全球优质的亚马逊云科技相关技术内容。同时,内容中提到的“AWS” 是 “Amazon Web Services” 的缩写,在此网站不作为商标展示。
0
0
{"value":"**Edit: March 10th 2022 – Updated post to use [AWS Cloud Development Kit](https://aws.amazon.com/cn/cdk/?trk=cndc-detail) (CDK) v2.**\n\nProtecting systems from malware is an essential part of a systems protection strategy. It is important to both scan binaries and other files before introducing them into your system boundary and appropriately respond to potential threats in accordance to your organizational security strategy.\n\nThis post shows you how to leverage an [aws-cdk construct](https://github.com/awslabs/cdk-serverless-clamscan) that uses [ClamAV®](https://www.clamav.net/) to scan new objects in [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) for viruses. The construct provides easy integration with AWS services to allow for your system to act based on the results of a ClamAV scan.\n\n### **Overview of Solution**\n\nIn short the construct creates a Docker based [AWS Lambda](https://aws.amazon.com/cn/lambda/?trk=cndc-detail) function that tags and temporarily downloads a newly created file in configured [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) buckets into an [Amazon Elastic File System](https://aws.amazon.com/cn/efs/?trk=cndc-detail), scans the file, and appropriately tags the file in S3 and publishes the result to a supported Lambda destination of your choosing. Additionally, the construct, creates an hourly job to download the latest ClamAV definition files to the Virus Definitions S3 Bucket by utilizing an [Amazon EventBridge](https://aws.amazon.com/cn/eventbridge/?trk=cndc-detail) rule and a Lambda function and publishes [Amazon CloudWatch](https://aws.amazon.com/cn/cloudwatch/?trk=cndc-detail) Metrics on scan results to the ‘serverless-clamscan’ namespace.\n\n![image.png](https://dev-media.amazoncloud.cn/be09de2ff4c34eef9373f648f39f9d31_image.png)\n\n### **Walkthrough**\n\nThis walkthrough will show you how to deploy a minimal setup of using the construct and how to view manually view the results. The walkthrough does not go over configuring your own Lambda Destinations. In short you will create a new CDK application with a minimal configuration of the construct, upload the EICAR anti malware test file to the example S3 Bucket, view the results in S3 and CloudWatch Metrics, and finally clean up the deployment.\n\nGitHub repo: [https://github.com/awslabs/cdk-serverless-clamscan](https://github.com/awslabs/cdk-serverless-clamscan)\n\n#### **Prerequisites**\n\nFor this walkthrough, you should have the following prerequisites:\n\n- An [AWS account](https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fportal.aws.amazon.com%2Fbilling%2Fsignup%2Fresume&client_id=signup)\n- [Docker installed](https://docs.docker.com/get-docker/) on your local machine\n- A local installation of and experience using the [AWS Cloud Development Kit](https://aws.amazon.com/cdk/)\n\n#### **Create and deploy our cdk application**\n\nYou will be deploying a minimal configuration of the construct in this section. To learn more about how to customize the construct configuration (like the Lambda Destinations), take a look at the [API Documentation](https://github.com/awslabs/cdk-serverless-clamscan/blob/main/API.md). If you are unfamiliar with using the CDK, learn how to install and setup the CDK by taking a look at their open source [GitHub repository](https://github.com/aws/aws-cdk).\n\n1. Run the following commands to create the CDK application.\n\nBash\n\n```\\nmkdir CdkTest\\ncd CdkTest\\ncdk init app --language typescript\\n```\n\n2. Replace the contents of the ```package.json``` file with the following.\n\nJSON\n\n```\\n{\\n \\"name\\": \\"cdk_test\\",\\n \\"version\\": \\"0.1.0\\",\\n \\"bin\\": {\\n \\"cdk_test\\": \\"bin/cdk_test.js\\"\\n },\\n \\"scripts\\": {\\n \\"build\\": \\"tsc\\",\\n \\"watch\\": \\"tsc -w\\",\\n \\"test\\": \\"jest\\",\\n \\"cdk\\": \\"cdk\\"\\n },\\n \\"devDependencies\\": {\\n \\"@types/jest\\": \\"^26.0.10\\",\\n \\"@types/node\\": \\"10.17.27\\",\\n \\"aws-cdk\\": \\"^2.11.0\\",\\n \\"jest\\": \\"^26.4.2\\",\\n \\"ts-jest\\": \\"^26.2.0\\",\\n \\"ts-node\\": \\"^9.0.0\\",\\n \\"typescript\\": \\"~3.9.7\\"\\n },\\n \\"dependencies\\": {\\n \\"aws-cdk-lib\\": \\"^2.11.0\\",\\n \\"cdk-serverless-clamscan\\": \\"^2.1.29\\",\\n \\"constructs\\": \\"^10.0.0\\",\\n \\"source-map-support\\": \\"^0.5.16\\"\\n }\\n}\\n```\n3. Replace the contents of the ```lib/cdk_test-stack.ts ```with the following.\n\nTypeScript\n\n```\\nimport { Bucket } from 'aws-cdk-lib/aws-s3';\\nimport { Stack, StackProps, RemovalPolicy, CfnOutput } from 'aws-cdk-lib';\\nimport { Construct } from 'constructs';\\nimport { ServerlessClamscan } from 'cdk-serverless-clamscan';\\n\\nexport class CdkTestStack extends Stack {\\n constructor(scope: Construct, id: string, props?: StackProps) {\\n super(scope, id, props);\\n const sc = new ServerlessClamscan(this, 'rClamscan', {});\\n const bucket = new Bucket(this, 'rBucket', {\\n autoDeleteObjects: true,\\n removalPolicy: RemovalPolicy.DESTROY\\n });\\n sc.addSourceBucket(bucket);\\n new CfnOutput(this, 'oBucketName', {\\n description: 'The name of the input S3 Bucket',\\n value: bucket.bucketName\\n })\\n }\\n}\\n```\n\n4. Run the following commands to install dependencies and deploy our sample app.\n\nBash\n\n```\\nnpm install\\ncdk deploy\\n```\n\n5. After the application deploys, you should see ```CdkTestStack.oBucketName``` output in your terminal. You will be navigating to that S3 bucket in the AWS console in the next step.\n\n#### **Testing the construct and viewing the results**\n\n\nIn this section you will upload the EICAR anti malware test file to the S3 Bucket and view the results. The file contains a non-viral 68 character string that a number of anti-virus software (like ClamAV) will react to as it were a virus. You can learn more about the test file at the [eicar.org website](https://www.eicar.org/?page_id=3950)\n\n1. Navigate to the to the S3 Console and search for the S3 bucket that you noted at the end of last section.\n2. Click on the name of the bucket, navigate to the Permissions tab, and scroll down to view the bucket policy. You should see a policy similar to the following.\n\nJSON\n\n```\\n{\\n \\"Version\\": \\"2012-10-17\\",\\n \\"Statement\\": [\\n {\\n \\"Effect\\": \\"Deny\\",\\n \\"NotPrincipal\\": {\\n \\"AWS\\": [\\n \\"arn:aws:sts::111122223333:assumed-role/ServerlessClamscanFunction/ServerlessClamscanFunctionAssumedRole\\",\\n \\"arn:aws:iam::111122223333:role/ServerlessClamscanFunction\\"\\n ]\\n },\\n \\"Action\\": \\"s3:GetObject\\",\\n \\"Resource\\": \\"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*\\",\\n \\"Condition\\": {\\n \\"StringEquals\\": {\\n \\"s3:ExistingObjectTag/scan-status\\": [\\n \\"IN PROGRESS\\",\\n \\"INFECTED\\",\\n \\"ERROR\\"\\n ]\\n }\\n }\\n }\\n ]\\n}\\n```\n\nThis bucket policy prevents users/applications in your system from downloading new objects while a scan is in “**IN PROGRESS**“, the object was marked as “**INFECTED**“, or if there was an “**ERROR**” with the scan.\n\n3. Scroll up, navigate to the Objects tab and click upload.\n4. Click on the Add files button, and paste the URL to the Eicar test file ([https://secure.eicar.org/eicar.com](https://secure.eicar.org/eicar.com)) in the file name dialog, and click open to select the file.\n5. Click the Upload button in the S3 Console.\n6. Once the file has uploaded, navigate to the file in the S3 Bucket and click on the Properties tab for the file.\n7. Scroll down to the Tags section. You should see a tag called scan-status with a value of “**INFECTED**“. If you don’t see any tags or the value of the tag is “**IN PROGRESS**“, refresh the page. It may take a few seconds for the first invocation of the Lambda function to start up and scan the object. Since this is a small object the scan should finish quickly.\n\n![image.png](https://dev-media.amazoncloud.cn/6ab40b7c5c65443bb868187ce10ded70_image.png)\n\n8. Navigate to the CloudWatch console and click on the Metrics sidebar item. You should see the “**serverless-clamscan**” Namespace in the Customer Namespaces section.\n9. Click on the “**serverless-clamscan**” namespace, then click on “**service**“. You should see the following metrics.\n\n![image.png](https://dev-media.amazoncloud.cn/9854d0937ec64e23b416ede0c37f9e71_image.png)\n\n10. Toggle the checkboxes next to the metrics. You should see an example graph like the following with the charted metrics. In addition to the Lambda destinations, you can use these metrics to include in custom CloudWatch Dashboards or create additional CloudWatch alarms.\n\n![image.png](https://dev-media.amazoncloud.cn/4f084654bfbc4f4db1cf429404cb5131_image.png)\n\n#### **Resource clean up**\n\n1. Delete the resources by running the ```cdk destroy``` command twice. The S3 Bucket that contains the Virus Definitions has a bucket policy that will likely cause a deletion error if you when deleting the stack associated in the construct. However since the bucket itself gets deleted, you can run the destroy command again to resolve the error.\n2. Navigate to the S3 console and manually delete the S3 Bucket with a name like “**cdktest-rclamscanvirusdefsaccessl**”. This bucket was created to retain Access Logs for the Virus Definitions S3 Bucket.\n\n### **Conclusion**\n\nIn this post you learned how to use an [aws-cdk construct](https://github.com/awslabs/cdk-serverless-clamscan) that uses [ClamAV®](https://www.clamav.net/) to scan new objects in [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) for viruses. To learn more about configuring the construct to your use case, read the [API reference](https://github.com/awslabs/cdk-serverless-clamscan/blob/main/API.md). The construct has been pre-packaged and published on npm ([cdk](https://www.npmjs.com/package/cdk-serverless-clamscan), [monocdk](https://www.npmjs.com/package/monocdk-serverless-clamscan)) and PyPI ([cdk](https://pypi.org/project/cdk-serverless-clamscan/), [monocdk](https://pypi.org/project/monocdk-serverless-clamscan/)) for easy use in TypeScript and Python CDK applications. The open source code for the construct is available on [GitHub](https://github.com/awslabs/cdk-serverless-clamscan/blob/main/API.md) and is open to [community contributions](https://github.com/awslabs/cdk-serverless-clamscan/blob/main/CONTRIBUTING.md).\n\n![image.png](https://dev-media.amazoncloud.cn/fd4b75dcccfb44daa514be4467b29500_image.png)\n\n### [ **Arun Donti**](https://github.com/dontirun)\n\nArun Donti is a Senior Cloud Developer with AWS WWPS Professional Services. He loves working on building automated processes and tools that enable builders and organizations to focus on and deliver their mission critical needs. You can find him on [GitHub](https://github.com/dontirun).","render":"<p><strong>Edit: March 10th 2022 – Updated post to use AWS Cloud Development Kit (CDK) v2.</strong></p>\\n<p>Protecting systems from malware is an essential part of a systems protection strategy. It is important to both scan binaries and other files before introducing them into your system boundary and appropriately respond to potential threats in accordance to your organizational security strategy.</p>\n<p>This post shows you how to leverage an <a href=\\"https://github.com/awslabs/cdk-serverless-clamscan\\" target=\\"_blank\\">aws-cdk construct</a> that uses <a href=\\"https://www.clamav.net/\\" target=\\"_blank\\">ClamAV®</a> to scan new objects in [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) for viruses. The construct provides easy integration with AWS services to allow for your system to act based on the results of a ClamAV scan.</p>\\n<h3><a id=\\"Overview_of_Solution_6\\"></a><strong>Overview of Solution</strong></h3>\\n<p>In short the construct creates a Docker based AWS Lambda function that tags and temporarily downloads a newly created file in configured Amazon S3 buckets into an Amazon Elastic File System, scans the file, and appropriately tags the file in S3 and publishes the result to a supported Lambda destination of your choosing. Additionally, the construct, creates an hourly job to download the latest ClamAV definition files to the Virus Definitions S3 Bucket by utilizing an Amazon EventBridge rule and a Lambda function and publishes Amazon CloudWatch Metrics on scan results to the ‘serverless-clamscan’ namespace.</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/be09de2ff4c34eef9373f648f39f9d31_image.png\\" alt=\\"image.png\\" /></p>\n<h3><a id=\\"Walkthrough_12\\"></a><strong>Walkthrough</strong></h3>\\n<p>This walkthrough will show you how to deploy a minimal setup of using the construct and how to view manually view the results. The walkthrough does not go over configuring your own Lambda Destinations. In short you will create a new CDK application with a minimal configuration of the construct, upload the EICAR anti malware test file to the example S3 Bucket, view the results in S3 and CloudWatch Metrics, and finally clean up the deployment.</p>\n<p>GitHub repo: <a href=\\"https://github.com/awslabs/cdk-serverless-clamscan\\" target=\\"_blank\\">https://github.com/awslabs/cdk-serverless-clamscan</a></p>\\n<h4><a id=\\"Prerequisites_18\\"></a><strong>Prerequisites</strong></h4>\\n<p>For this walkthrough, you should have the following prerequisites:</p>\n<ul>\\n<li>An <a href=\\"https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fportal.aws.amazon.com%2Fbilling%2Fsignup%2Fresume&amp;client_id=signup\\" target=\\"_blank\\">AWS account</a></li>\\n<li><a href=\\"https://docs.docker.com/get-docker/\\" target=\\"_blank\\">Docker installed</a> on your local machine</li>\\n<li>A local installation of and experience using the <a href=\\"https://aws.amazon.com/cdk/\\" target=\\"_blank\\">AWS Cloud Development Kit</a></li>\\n</ul>\n<h4><a id=\\"Create_and_deploy_our_cdk_application_26\\"></a><strong>Create and deploy our cdk application</strong></h4>\\n<p>You will be deploying a minimal configuration of the construct in this section. To learn more about how to customize the construct configuration (like the Lambda Destinations), take a look at the <a href=\\"https://github.com/awslabs/cdk-serverless-clamscan/blob/main/API.md\\" target=\\"_blank\\">API Documentation</a>. If you are unfamiliar with using the CDK, learn how to install and setup the CDK by taking a look at their open source <a href=\\"https://github.com/aws/aws-cdk\\" target=\\"_blank\\">GitHub repository</a>.</p>\\n<ol>\\n<li>Run the following commands to create the CDK application.</li>\n</ol>\\n<p>Bash</p>\n<pre><code class=\\"lang-\\">mkdir CdkTest\\ncd CdkTest\\ncdk init app --language typescript\\n</code></pre>\\n<ol start=\\"2\\">\\n<li>Replace the contents of the <code>package.json</code> file with the following.</li>\\n</ol>\n<p>JSON</p>\n<pre><code class=\\"lang-\\">{\\n &quot;name&quot;: &quot;cdk_test&quot;,\\n &quot;version&quot;: &quot;0.1.0&quot;,\\n &quot;bin&quot;: {\\n &quot;cdk_test&quot;: &quot;bin/cdk_test.js&quot;\\n },\\n &quot;scripts&quot;: {\\n &quot;build&quot;: &quot;tsc&quot;,\\n &quot;watch&quot;: &quot;tsc -w&quot;,\\n &quot;test&quot;: &quot;jest&quot;,\\n &quot;cdk&quot;: &quot;cdk&quot;\\n },\\n &quot;devDependencies&quot;: {\\n &quot;@types/jest&quot;: &quot;^26.0.10&quot;,\\n &quot;@types/node&quot;: &quot;10.17.27&quot;,\\n &quot;aws-cdk&quot;: &quot;^2.11.0&quot;,\\n &quot;jest&quot;: &quot;^26.4.2&quot;,\\n &quot;ts-jest&quot;: &quot;^26.2.0&quot;,\\n &quot;ts-node&quot;: &quot;^9.0.0&quot;,\\n &quot;typescript&quot;: &quot;~3.9.7&quot;\\n },\\n &quot;dependencies&quot;: {\\n &quot;aws-cdk-lib&quot;: &quot;^2.11.0&quot;,\\n &quot;cdk-serverless-clamscan&quot;: &quot;^2.1.29&quot;,\\n &quot;constructs&quot;: &quot;^10.0.0&quot;,\\n &quot;source-map-support&quot;: &quot;^0.5.16&quot;\\n }\\n}\\n</code></pre>\\n<ol start=\\"3\\">\\n<li>Replace the contents of the <code>lib/cdk_test-stack.ts </code>with the following.</li>\\n</ol>\n<p>TypeScript</p>\n<pre><code class=\\"lang-\\">import { Bucket } from 'aws-cdk-lib/aws-s3';\\nimport { Stack, StackProps, RemovalPolicy, CfnOutput } from 'aws-cdk-lib';\\nimport { Construct } from 'constructs';\\nimport { ServerlessClamscan } from 'cdk-serverless-clamscan';\\n\\nexport class CdkTestStack extends Stack {\\n constructor(scope: Construct, id: string, props?: StackProps) {\\n super(scope, id, props);\\n const sc = new ServerlessClamscan(this, 'rClamscan', {});\\n const bucket = new Bucket(this, 'rBucket', {\\n autoDeleteObjects: true,\\n removalPolicy: RemovalPolicy.DESTROY\\n });\\n sc.addSourceBucket(bucket);\\n new CfnOutput(this, 'oBucketName', {\\n description: 'The name of the input S3 Bucket',\\n value: bucket.bucketName\\n })\\n }\\n}\\n</code></pre>\\n<ol start=\\"4\\">\\n<li>Run the following commands to install dependencies and deploy our sample app.</li>\n</ol>\\n<p>Bash</p>\n<pre><code class=\\"lang-\\">npm install\\ncdk deploy\\n</code></pre>\\n<ol start=\\"5\\">\\n<li>After the application deploys, you should see <code>CdkTestStack.oBucketName</code> output in your terminal. You will be navigating to that S3 bucket in the AWS console in the next step.</li>\\n</ol>\n<h4><a id=\\"Testing_the_construct_and_viewing_the_results_112\\"></a><strong>Testing the construct and viewing the results</strong></h4>\\n<p>In this section you will upload the EICAR anti malware test file to the S3 Bucket and view the results. The file contains a non-viral 68 character string that a number of anti-virus software (like ClamAV) will react to as it were a virus. You can learn more about the test file at the <a href=\\"https://www.eicar.org/?page_id=3950\\" target=\\"_blank\\">eicar.org website</a></p>\\n<ol>\\n<li>Navigate to the to the S3 Console and search for the S3 bucket that you noted at the end of last section.</li>\n<li>Click on the name of the bucket, navigate to the Permissions tab, and scroll down to view the bucket policy. You should see a policy similar to the following.</li>\n</ol>\\n<p>JSON</p>\n<pre><code class=\\"lang-\\">{\\n &quot;Version&quot;: &quot;2012-10-17&quot;,\\n &quot;Statement&quot;: [\\n {\\n &quot;Effect&quot;: &quot;Deny&quot;,\\n &quot;NotPrincipal&quot;: {\\n &quot;AWS&quot;: [\\n &quot;arn:aws:sts::111122223333:assumed-role/ServerlessClamscanFunction/ServerlessClamscanFunctionAssumedRole&quot;,\\n &quot;arn:aws:iam::111122223333:role/ServerlessClamscanFunction&quot;\\n ]\\n },\\n &quot;Action&quot;: &quot;s3:GetObject&quot;,\\n &quot;Resource&quot;: &quot;arn:aws:s3:::DOC-EXAMPLE-BUCKET/*&quot;,\\n &quot;Condition&quot;: {\\n &quot;StringEquals&quot;: {\\n &quot;s3:ExistingObjectTag/scan-status&quot;: [\\n &quot;IN PROGRESS&quot;,\\n &quot;INFECTED&quot;,\\n &quot;ERROR&quot;\\n ]\\n }\\n }\\n }\\n ]\\n}\\n</code></pre>\\n<p>This bucket policy prevents users/applications in your system from downloading new objects while a scan is in “<strong>IN PROGRESS</strong>“, the object was marked as “<strong>INFECTED</strong>“, or if there was an “<strong>ERROR</strong>” with the scan.</p>\\n<ol start=\\"3\\">\\n<li>Scroll up, navigate to the Objects tab and click upload.</li>\n<li>Click on the Add files button, and paste the URL to the Eicar test file (<a href=\\"https://secure.eicar.org/eicar.com\\" target=\\"_blank\\">https://secure.eicar.org/eicar.com</a>) in the file name dialog, and click open to select the file.</li>\\n<li>Click the Upload button in the S3 Console.</li>\n<li>Once the file has uploaded, navigate to the file in the S3 Bucket and click on the Properties tab for the file.</li>\n<li>Scroll down to the Tags section. You should see a tag called scan-status with a value of “<strong>INFECTED</strong>“. If you don’t see any tags or the value of the tag is “<strong>IN PROGRESS</strong>“, refresh the page. It may take a few seconds for the first invocation of the Lambda function to start up and scan the object. Since this is a small object the scan should finish quickly.</li>\\n</ol>\n<p><img src=\\"https://dev-media.amazoncloud.cn/6ab40b7c5c65443bb868187ce10ded70_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"8\\">\\n<li>Navigate to the CloudWatch console and click on the Metrics sidebar item. You should see the “<strong>serverless-clamscan</strong>” Namespace in the Customer Namespaces section.</li>\\n<li>Click on the “<strong>serverless-clamscan</strong>” namespace, then click on “<strong>service</strong>“. You should see the following metrics.</li>\\n</ol>\n<p><img src=\\"https://dev-media.amazoncloud.cn/9854d0937ec64e23b416ede0c37f9e71_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"10\\">\\n<li>Toggle the checkboxes next to the metrics. You should see an example graph like the following with the charted metrics. In addition to the Lambda destinations, you can use these metrics to include in custom CloudWatch Dashboards or create additional CloudWatch alarms.</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/4f084654bfbc4f4db1cf429404cb5131_image.png\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"Resource_clean_up_169\\"></a><strong>Resource clean up</strong></h4>\\n<ol>\\n<li>Delete the resources by running the <code>cdk destroy</code> command twice. The S3 Bucket that contains the Virus Definitions has a bucket policy that will likely cause a deletion error if you when deleting the stack associated in the construct. However since the bucket itself gets deleted, you can run the destroy command again to resolve the error.</li>\\n<li>Navigate to the S3 console and manually delete the S3 Bucket with a name like “<strong>cdktest-rclamscanvirusdefsaccessl</strong>”. This bucket was created to retain Access Logs for the Virus Definitions S3 Bucket.</li>\\n</ol>\n<h3><a id=\\"Conclusion_174\\"></a><strong>Conclusion</strong></h3>\\n<p>In this post you learned how to use an <a href=\\"https://github.com/awslabs/cdk-serverless-clamscan\\" target=\\"_blank\\">aws-cdk construct</a> that uses <a href=\\"https://www.clamav.net/\\" target=\\"_blank\\">ClamAV®</a> to scan new objects in [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) for viruses. To learn more about configuring the construct to your use case, read the <a href=\\"https://github.com/awslabs/cdk-serverless-clamscan/blob/main/API.md\\" target=\\"_blank\\">API reference</a>. The construct has been pre-packaged and published on npm (<a href=\\"https://www.npmjs.com/package/cdk-serverless-clamscan\\" target=\\"_blank\\">cdk</a>, <a href=\\"https://www.npmjs.com/package/monocdk-serverless-clamscan\\" target=\\"_blank\\">monocdk</a>) and PyPI (<a href=\\"https://pypi.org/project/cdk-serverless-clamscan/\\" target=\\"_blank\\">cdk</a>, <a href=\\"https://pypi.org/project/monocdk-serverless-clamscan/\\" target=\\"_blank\\">monocdk</a>) for easy use in TypeScript and Python CDK applications. The open source code for the construct is available on <a href=\\"https://github.com/awslabs/cdk-serverless-clamscan/blob/main/API.md\\" target=\\"_blank\\">GitHub</a> and is open to <a href=\\"https://github.com/awslabs/cdk-serverless-clamscan/blob/main/CONTRIBUTING.md\\" target=\\"_blank\\">community contributions</a>.</p>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/fd4b75dcccfb44daa514be4467b29500_image.png\\" alt=\\"image.png\\" /></p>\n<h3><a id=\\"_Arun_Dontihttpsgithubcomdontirun_180\\"></a><a href=\\"https://github.com/dontirun\\" target=\\"_blank\\"> <strong>Arun Donti</strong></a></h3>\n<p>Arun Donti is a Senior Cloud Developer with AWS WWPS Professional Services. He loves working on building automated processes and tools that enable builders and organizations to focus on and deliver their mission critical needs. You can find him on <a href=\\"https://github.com/dontirun\\" target=\\"_blank\\">GitHub</a>.</p>\n"}
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭