{"id":15131,"date":"2021-09-23T12:36:13","date_gmt":"2021-09-23T16:36:13","guid":{"rendered":"http:\/\/www.iri.com\/blog\/?p=15131"},"modified":"2024-09-23T13:48:03","modified_gmt":"2024-09-23T17:48:03","slug":"masked-test-data-in-an-aws-codepipeline","status":"publish","type":"post","link":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/","title":{"rendered":"Masked Test Data in an AWS CodePipeline"},"content":{"rendered":"<p><i>This article demonstrates how to automate the execution of <\/i><a href=\"https:\/\/www.iri.com\/products\/darkshield\"><i>IRI DarkShield<\/i><\/a><i> data masking jobs from SSH commands run from within the <\/i><a href=\"https:\/\/aws.amazon.com\/codepipeline\/\"><i>AWS CodePipeline<\/i><\/a><i> to produce fit-for-purpose test data in the DevOps process.<\/i><\/p>\n<p><a href=\"\/blog\/wp-content\/uploads\/2021\/11\/iri-aws-pipeline-diagram.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15142 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2021\/11\/iri-aws-pipeline-diagram.png\" alt=\"\" width=\"500\" height=\"572\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/iri-aws-pipeline-diagram.png 643w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/iri-aws-pipeline-diagram-262x300.png 262w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>In my last demonstration with the <a href=\"https:\/\/www.iri.com\/blog\/test-data\/building-test-data-in-cicd-pipeline\/\">GitLab pipeline<\/a>, I ran structured <a href=\"https:\/\/www.iri.com\/products\/fieldshield\/overview\">IRI FieldShield<\/a> data masking and <a href=\"https:\/\/www.iri.com\/products\/rowgen\/overview\">IRI RowGen<\/a> data synthesis job scripts to produce test data and consume them in API testing post-deployment. In this demonstration, the AWS CodePipeline will call the <a href=\"https:\/\/www.iri.com\/blog\/data-protection\/darkshield-files-rpc-api\/\">DarkShield-Files API<\/a> on a remote server to showcase another method of creating fit-for-purpose test data in MongoDB. Of course, the GitLab method with FieldShield and RowGen, is viable in <a href=\"https:\/\/www.iri.com\/blog\/test-data\/db-subsets-in-jenkins-pipeline\/\">Jenkins<\/a> and <a href=\"https:\/\/www.iri.com\/blog\/test-data\/test-data-azure-devops\/\">Azure DevOps<\/a>, too.<\/p>\n<h6><b>About IRI DarkShield<\/b><\/h6>\n<p>DarkShield is a member <a href=\"https:\/\/www.iri.com\/solutions\/data-masking\">data masking<\/a> product in the <a href=\"https:\/\/www.iri.com\/products\/iri-data-protector\">IRI Data Protector Suite<\/a> and included a component of the <a href=\"https:\/\/www.iri.com\/products\/voracity\">IRI Voracity<\/a> data management platform. DarkShield focuses mostly on data in semi-structured and unstructured sources like: NoSQL DBs (including DynamoDB), PDFs, MS Word, text and image files (including Parquet and DICOM). DarkShield also finds and masks PII in flat files (local or stored in buckets like S3) and RDBs (usually with C\/BLOB data).<\/p>\n<h6><b>About AWS CodePipeline and Its Structure<\/b><\/h6>\n<p>The Amazon Web Service CodePipeline is a continuous delivery service that automates the build, test, and deployment phases of new software releases. AWS CodePipeline also supports the integration of third-party services such as GitHub.<\/p>\n<p>According to AWS documentation, \u201cA pipeline is a workflow construct that describes how software changes go through a release process\u201d<span id='easy-footnote-1-15131' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#easy-footnote-bottom-1-15131' title='&lt;i&gt;Codepipeline Concepts &amp;#8211; AWS Codepipeline&lt;\/i&gt;. &lt;a href=&quot;https:\/\/docs.aws.amazon.com\/codepipeline\/latest\/userguide\/concepts.html&quot;&gt;https:\/\/docs.aws.amazon.com\/codepipeline\/latest\/userguide\/concepts.html&lt;\/a&gt;'><sup>1<\/sup><\/a><\/span>. The pipelines are made up of units called <i>stages<\/i> (build,test,deploy). Each stage in turn, is made up of sets of operations called <i>actions<\/i>.<\/p>\n<p>The actions are configured to run at specific points in the pipeline. An example of an action would be a deployment action in a deployment stage that deploys code to a compute service.<\/p>\n<p>Each action can be run in serial or parallel within a stage. The following are valid action types in CodePipeline:<\/p>\n<ul>\n<li aria-level=\"1\">Source<\/li>\n<li aria-level=\"1\">Build<\/li>\n<li aria-level=\"1\">Test<\/li>\n<li aria-level=\"1\">Deploy<\/li>\n<li aria-level=\"1\">Approval<\/li>\n<li aria-level=\"1\">Invoke<\/li>\n<\/ul>\n<p>Each action type has an accepted <a href=\"https:\/\/docs.aws.amazon.com\/codepipeline\/latest\/userguide\/integrations-action-type.html\">set of providers<\/a>. Each provider has a name that must be included in the Provider field in the action category of the pipeline.<\/p>\n<h6><b>The Source<\/b><\/h6>\n<p>For this demonstration my source will be from my GitHub repository. With that source, the AWS CodePipeline will utilize the <i>buildspec.yml <\/i>file stored in the repository and build the pipeline as dictated by the <i>buildspec.yml<\/i> file.<\/p>\n<p>Conversely, I could have stored my <i>buildspec.yml<\/i> file in any number of places as a source. These include Amazon S3, Amazon ECR, CodeCommite, BitBucket, GitHub, and GitHub Enterprise Server actions.<\/p>\n<h6><b>Demonstration Prerequisites<\/b><\/h6>\n<ul>\n<li aria-level=\"1\">Your IRI software product is installed and licensed on the target remote server (the remote server that the CodePipeline will access via SSH could be your on-premise computer or somewhere on the cloud).<\/li>\n<li aria-level=\"1\">The server where the IRI job script is located can be accessed with SSH.<\/li>\n<li aria-level=\"1\">An AWS account (for my purposes the free tier was adequate).<\/li>\n<li aria-level=\"1\">The environment variables to be used are stored in the AWS Parameter Store.<\/li>\n<\/ul>\n<h6><b>Setting Up the AWS CodePipeline Build Stage<\/b><\/h6>\n<p>The first part of my<i> buildspec<\/i>.<i>yml<\/i> file will be declaring my environment variables that are stored in my <a href=\"https:\/\/docs.aws.amazon.com\/systems-manager\/latest\/userguide\/systems-manager-parameter-store.html\">AWS Parameter Store<\/a> within secure strings. I stored variables here to keep sensitive data like IP addresses, private keys, and ssh commands hidden.<\/p>\n<p style=\"text-align: center;\"><a href=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-buildspec-yml.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-15143 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-buildspec-yml.png\" alt=\"\" width=\"270\" height=\"164\" \/><\/a><i>Setting up environment variables for buildspec.yml<\/i><i><br \/>\n<\/i><i><\/i><\/p>\n<p>Alternatively, you could use the <a href=\"https:\/\/docs.aws.amazon.com\/secretsmanager\/latest\/userguide\/intro.html\">AWS Secret Manager Store<\/a>, but unlike AWS Parameter Store, it will incur fees to store secrets in the Secret Manager Store.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-parameter-store-env-var.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15144 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-parameter-store-env-var-1024x164.png\" alt=\"\" width=\"749\" height=\"120\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-parameter-store-env-var-1024x164.png 1024w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-parameter-store-env-var-300x48.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-parameter-store-env-var-768x123.png 768w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-parameter-store-env-var.png 1032w\" sizes=\"(max-width: 749px) 100vw, 749px\" \/><\/a><i>Parameter Store Environment Variables<\/i><\/p>\n<p>Before creating an SSH connection, an OpenSSH Client is installed, an SSH agent is set up, and a private key has been added to the SSH agent. AWS CodePipeline will now be able to SSH into the server where licensed IRI software is installed without requiring a password.<\/p>\n<p style=\"text-align: center;\"><a href=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-build-stage-ssh.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-15145 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-build-stage-ssh.png\" alt=\"\" width=\"555\" height=\"284\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-build-stage-ssh.png 555w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-build-stage-ssh-300x154.png 300w\" sizes=\"(max-width: 555px) 100vw, 555px\" \/><\/a><i>Setting up the build stage to execute SSH commands<\/i><i><br \/>\n<\/i><\/p>\n<h6><b>Executing the Build Stage to Generate Test Data<\/b><\/h6>\n<p>When the build stage is executed the string value stored in SSH_COMMAND will run the IRI job script on the server where the licensed IRI software is installed. After the build stage is finished AWS pipeline console will display a successful build message.<\/p>\n<p>For my demonstration, I am executing a python script that will make a call <a href=\"https:\/\/github.com\/TeamIRI\/darkshield-api-demos\/tree\/master\/csv-tsv\">like this<\/a> to the DarkShield-Files API hosted on the remote server to search and mask JSON posts stored in a collection on a test MongoDB cluster hosted in AWS.<\/p>\n<p style=\"text-align: center;\"><a href=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-build-project-status-display.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-15146 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-build-project-status-display.png\" alt=\"\" width=\"566\" height=\"329\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-build-project-status-display.png 566w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-build-project-status-display-300x174.png 300w\" sizes=\"(max-width: 566px) 100vw, 566px\" \/><\/a><i>Build project Build status display<\/i><\/p>\n<p>The log file created during the build stage will show that a connection to the remote server has been established, and that the DarkShield-Files API has been successfully called.<\/p>\n<p><a href=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-ds-api-log-part1.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15147 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-ds-api-log-part1.png\" alt=\"\" width=\"749\" height=\"330\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-ds-api-log-part1.png 897w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-ds-api-log-part1-300x132.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-ds-api-log-part1-768x338.png 768w\" sizes=\"(max-width: 749px) 100vw, 749px\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-ds-api-log-part2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15148 aligncenter\" src=\"http:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-ds-api-log-part2-e1635882743617-1024x600.jpg\" alt=\"\" width=\"751\" height=\"440\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-ds-api-log-part2-e1635882743617-1024x600.jpg 1024w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-ds-api-log-part2-e1635882743617-300x176.jpg 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-ds-api-log-part2-e1635882743617-768x450.jpg 768w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-ds-api-log-part2-e1635882743617.jpg 1065w\" sizes=\"(max-width: 751px) 100vw, 751px\" \/><\/a><i>The build stage log output<\/i><\/p>\n<h6><b>Results of DarkShield-Files API Call<\/b><\/h6>\n<p>After searching and masking operations are completed, the masked files will be placed in the cloud MongoDB cluster in my collection called <i>Posts<\/i>.<\/p>\n<p style=\"text-align: center;\"><a href=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-mongo-documents.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-15149 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-mongo-documents.png\" alt=\"\" width=\"733\" height=\"314\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-mongo-documents.png 733w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-mongo-documents-300x129.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-mongo-documents-730x314.png 730w\" sizes=\"(max-width: 733px) 100vw, 733px\" \/><\/a><i>MongoDB documents in a collection before masking operation<\/i><\/p>\n<p style=\"text-align: center;\"><a href=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-mongo-documents-masked.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-15150 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-mongo-documents-masked.png\" alt=\"\" width=\"724\" height=\"260\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-mongo-documents-masked.png 724w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-mongo-documents-masked-300x108.png 300w\" sizes=\"(max-width: 724px) 100vw, 724px\" \/><\/a><i>MongoDB documents in a collection after masking operation<\/i><\/p>\n<h6><b>What Can You Do With The Generated Test Data?<\/b><\/h6>\n<p>To provide an accurate assessment of how an application will behave during production, developers will usually require a test environment as close to the final production environment as possible. That said, test environments inevitably will not have the same level of security as the final production environment.<\/p>\n<p>This is an issue when test data needs to be produced and later consumed during the testing process. Testers must make the choice between using a copy of sanitized production data or producing as realistic as possible, synthetic test data.<\/p>\n<p>IRI offers several solutions for procuring safe to use test data. Earlier, I demonstrated how to mask sensitive data in MongoDB collections and produce safe to use test data via the AWS pipeline.<\/p>\n<p>Below you can see a screenshot of a MEAN (MongoDB, Express.js, AngularJs, Node.js) stack app that is using the newly created test data. The app is able to create and store posts in MongoDB. Those posts are then retrieved from the database and displayed back to the user as accordion elements.<\/p>\n<p><a href=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-my-messages-part-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15151 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-my-messages-part-1.png\" alt=\"\" width=\"429\" height=\"509\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-my-messages-part-1.png 507w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-my-messages-part-1-253x300.png 253w\" sizes=\"(max-width: 429px) 100vw, 429px\" \/><\/a><\/p>\n<p><a href=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-my-messages-part-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15152 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-my-messages-part-2.png\" alt=\"\" width=\"426\" height=\"446\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-my-messages-part-2.png 504w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/aws-pipeline-my-messages-part-2-286x300.png 286w\" sizes=\"(max-width: 426px) 100vw, 426px\" \/><\/a><\/p>\n<p>You will notice that no sensitive data has been revealed in this test environment.<\/p>\n<h6><b>AWS CodePipeline Building and Deploying Apps<\/b><\/h6>\n<p>In my demo I showed how to generate test data in the AWS pipeline using IRI DarkShield but the AWS pipeline is capable of far more. I would like to recommend an article written by Max A Raju, on <a href=\"https:\/\/max-a-raju.medium.com\/ci-cd-with-a-mean-app-on-aws-codepipeline-8d1954ce0ed\">building and deploying a MEAN stack app<\/a> (MEAN stands for MongoDB, Express.js, AngularJS, Node.js) in the AWS CodePipeline.<\/p>\n<p>For those not comfortable yet with AWS services like EC2, IAM permissions, or just CodePipeline in general, I highly recommend giving his article a read to better familiarize yourself with the process. As Raju points out, \u201cthere are quite a few steps involved in getting a pipeline up and running, but once set-up it is clearly a valuable workflow tool\u201d<span id='easy-footnote-2-15131' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#easy-footnote-bottom-2-15131' title='Raju, Max A. \u201cCI\/CD with a Mean App on AWS Codepipeline.\u201d &lt;i&gt;Medium&lt;\/i&gt;, Medium, 7 Sept. 2020, &lt;a href=&quot;https:\/\/max-a-raju.medium.com\/ci-cd-with-a-mean-app-on-aws-codepipeline-8d1954ce0ed&quot;&gt;https:\/\/max-a-raju.medium.com\/ci-cd-with-a-mean-app-on-aws-codepipeline-8d1954ce0ed&lt;\/a&gt;'><sup>2<\/sup><\/a><\/span>.<\/p>\n<h6><b>Procedural Summary<\/b><\/h6>\n<p>This article demonstrated how to automate the execution of IRI test-data-producing jobs from within the AWS CodePipeline. Using SSH, any IRI job script or API routine that can run from the command line can be executed from within the pipeline.<\/p>\n<p>It is because the IRI back-end engine is an executable, products like <a href=\"https:\/\/www.iri.com\/products\/darkshield\">DarkShield<\/a>, <a href=\"https:\/\/www.iri.com\/products\/fieldshield\">FieldShield<\/a>, and <a href=\"https:\/\/www.iri.com\/products\/rowgen\">RowGen<\/a> can be run from the command line. Furthermore, the DarkShield-Files API can be programmatically assigned to execute on preselected data sources as our <a href=\"https:\/\/github.com\/TeamIRI\/darkshield-api-demos\">python demos<\/a> show.<\/p>\n<p>Whether it is the generation of synthetic test data, the masking of structured data, semi-structured, or unstructured data, it is possible to incorporate IRI job scripts into the DevOps process through the CI\/CD pipeline. My next article will demonstrate this in Azure DevOps.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article demonstrates how to automate the execution of IRI DarkShield data masking jobs from SSH commands run from within the AWS CodePipeline to produce fit-for-purpose test data in the DevOps process. In my last demonstration with the GitLab pipeline, I ran structured IRI FieldShield data masking and IRI RowGen data synthesis job scripts to<\/p>\n<div><a class=\"btn-filled btn\" href=\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/\" title=\"Masked Test Data in an AWS CodePipeline\">Read More<\/a><\/div>\n","protected":false},"author":152,"featured_media":15141,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[8,29],"tags":[1367,1554,1555,1494,14,1508,1388,533,1553,1252],"class_list":["post-15131","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-protection","category-test-data","tag-aws","tag-aws-codepipeline","tag-codepipeline","tag-darkshield-api","tag-data-masking","tag-devops","tag-iri-darkshield","tag-mongodb","tag-pipeline","tag-ssh"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.4 (Yoast SEO v23.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Masked Test Data in an AWS CodePipeline - IRI<\/title>\n<meta name=\"description\" content=\"This article demonstrates how to automate the execution of IRI DarkShield data masking jobs from SSH commands run from within the AWS CodePipeline to\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Masked Test Data in an AWS CodePipeline\" \/>\n<meta property=\"og:description\" content=\"This article demonstrates how to automate the execution of IRI DarkShield data masking jobs from SSH commands run from within the AWS CodePipeline to\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/\" \/>\n<meta property=\"og:site_name\" content=\"IRI\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-23T16:36:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-23T17:48:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/development-circle-graphic-crop.png\" \/>\n\t<meta property=\"og:image:width\" content=\"513\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Adam Lewis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adam Lewis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/\"},\"author\":{\"name\":\"Adam Lewis\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/37c0e5beab094bd61cc521902df2876e\"},\"headline\":\"Masked Test Data in an AWS CodePipeline\",\"datePublished\":\"2021-09-23T16:36:13+00:00\",\"dateModified\":\"2024-09-23T17:48:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/\"},\"wordCount\":1320,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/development-circle-graphic-crop.png\",\"keywords\":[\"aws\",\"AWS CodePipeline\",\"CodePipeline\",\"Darkshield API\",\"data masking\",\"DevOps\",\"IRI DarkShield\",\"MongoDB\",\"Pipeline\",\"SSH\"],\"articleSection\":[\"Data Masking\/Protection\",\"Test Data\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/\",\"url\":\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/\",\"name\":\"Masked Test Data in an AWS CodePipeline - IRI\",\"isPartOf\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/development-circle-graphic-crop.png\",\"datePublished\":\"2021-09-23T16:36:13+00:00\",\"dateModified\":\"2024-09-23T17:48:03+00:00\",\"description\":\"This article demonstrates how to automate the execution of IRI DarkShield data masking jobs from SSH commands run from within the AWS CodePipeline to\",\"breadcrumb\":{\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#primaryimage\",\"url\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/development-circle-graphic-crop.png\",\"contentUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/development-circle-graphic-crop.png\",\"width\":513,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.iri.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Masked Test Data in an AWS CodePipeline\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.iri.com\/blog\/#website\",\"url\":\"https:\/\/www.iri.com\/blog\/\",\"name\":\"IRI\",\"description\":\"Total Data Management Blog\",\"publisher\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.iri.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\",\"name\":\"IRI\",\"url\":\"https:\/\/www.iri.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png\",\"contentUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png\",\"width\":750,\"height\":206,\"caption\":\"IRI\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/37c0e5beab094bd61cc521902df2876e\",\"name\":\"Adam Lewis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/087667d0c75d33bb6fab6e734bd89333?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/087667d0c75d33bb6fab6e734bd89333?s=96&d=blank&r=g\",\"caption\":\"Adam Lewis\"},\"url\":\"https:\/\/www.iri.com\/blog\/author\/adaml\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Masked Test Data in an AWS CodePipeline - IRI","description":"This article demonstrates how to automate the execution of IRI DarkShield data masking jobs from SSH commands run from within the AWS CodePipeline to","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/","og_locale":"en_US","og_type":"article","og_title":"Masked Test Data in an AWS CodePipeline","og_description":"This article demonstrates how to automate the execution of IRI DarkShield data masking jobs from SSH commands run from within the AWS CodePipeline to","og_url":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/","og_site_name":"IRI","article_published_time":"2021-09-23T16:36:13+00:00","article_modified_time":"2024-09-23T17:48:03+00:00","og_image":[{"width":513,"height":300,"url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/development-circle-graphic-crop.png","type":"image\/png"}],"author":"Adam Lewis","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Adam Lewis","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#article","isPartOf":{"@id":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/"},"author":{"name":"Adam Lewis","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/37c0e5beab094bd61cc521902df2876e"},"headline":"Masked Test Data in an AWS CodePipeline","datePublished":"2021-09-23T16:36:13+00:00","dateModified":"2024-09-23T17:48:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/"},"wordCount":1320,"commentCount":0,"publisher":{"@id":"https:\/\/www.iri.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/development-circle-graphic-crop.png","keywords":["aws","AWS CodePipeline","CodePipeline","Darkshield API","data masking","DevOps","IRI DarkShield","MongoDB","Pipeline","SSH"],"articleSection":["Data Masking\/Protection","Test Data"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/","url":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/","name":"Masked Test Data in an AWS CodePipeline - IRI","isPartOf":{"@id":"https:\/\/www.iri.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#primaryimage"},"image":{"@id":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/development-circle-graphic-crop.png","datePublished":"2021-09-23T16:36:13+00:00","dateModified":"2024-09-23T17:48:03+00:00","description":"This article demonstrates how to automate the execution of IRI DarkShield data masking jobs from SSH commands run from within the AWS CodePipeline to","breadcrumb":{"@id":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#primaryimage","url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/development-circle-graphic-crop.png","contentUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/development-circle-graphic-crop.png","width":513,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/www.iri.com\/blog\/data-protection\/masked-test-data-in-an-aws-codepipeline\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.iri.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Masked Test Data in an AWS CodePipeline"}]},{"@type":"WebSite","@id":"https:\/\/www.iri.com\/blog\/#website","url":"https:\/\/www.iri.com\/blog\/","name":"IRI","description":"Total Data Management Blog","publisher":{"@id":"https:\/\/www.iri.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.iri.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.iri.com\/blog\/#organization","name":"IRI","url":"https:\/\/www.iri.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png","contentUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png","width":750,"height":206,"caption":"IRI"},"image":{"@id":"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/37c0e5beab094bd61cc521902df2876e","name":"Adam Lewis","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/087667d0c75d33bb6fab6e734bd89333?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/087667d0c75d33bb6fab6e734bd89333?s=96&d=blank&r=g","caption":"Adam Lewis"},"url":"https:\/\/www.iri.com\/blog\/author\/adaml\/"}]}},"jetpack_featured_media_url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2021\/11\/development-circle-graphic-crop.png","_links":{"self":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/15131"}],"collection":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/users\/152"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/comments?post=15131"}],"version-history":[{"count":9,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/15131\/revisions"}],"predecessor-version":[{"id":15860,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/15131\/revisions\/15860"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/media\/15141"}],"wp:attachment":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/media?parent=15131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/categories?post=15131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/tags?post=15131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}