<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DevOps Archives | Cloudar</title>
	<atom:link href="https://cloudar.be/category/devops/feed/" rel="self" type="application/rss+xml" />
	<link>https://cloudar.be/category/devops/</link>
	<description>100% Focus On AWS // 100% Customer Obsession</description>
	<lastBuildDate>Mon, 26 Jan 2026 11:37:47 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>AWS Secrets Management: Protecting Your Digital Keys in the Cloud</title>
		<link>https://cloudar.be/awsblog/aws-secrets-management-protecting-your-digital-keys-in-the-cloud/</link>
		
		<dc:creator><![CDATA[Bart Coddens]]></dc:creator>
		<pubDate>Mon, 26 Jan 2026 09:53:12 +0000</pubDate>
				<category><![CDATA[Compliance]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Security & Compliance]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://cloudar.be/?p=22648</guid>

					<description><![CDATA[<p>Introduction Creating and managing secrets is perhaps as old as humans interacting with each other. Yet despite their critical importance, secrets remain one of the most vulnerable aspects of AWS infrastructure today. In our practice as Dev(Sec)Ops Engineers, we see these challenges daily accross our client environments. To start, the question needs to be asked: [&#8230;]</p>
<p>The post <a href="https://cloudar.be/awsblog/aws-secrets-management-protecting-your-digital-keys-in-the-cloud/">AWS Secrets Management: Protecting Your Digital Keys in the Cloud</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Creating and managing secrets is perhaps as old as humans interacting with each other. Yet despite their critical importance, secrets remain one of the most vulnerable aspects of AWS infrastructure today. In our practice as Dev(Sec)Ops Engineers, we see these challenges daily accross our client environments.</p>
<p>To start, the question needs to be asked: “What exactly is a secret?”  In AWS and Cloud environments in general, a secret is anything used to access systems and/or data. These digital keys unlock potentially critical systems and must be protected from unauthorized access at all costs.</p>
<p>&nbsp;</p>
<p>As Dev(Sec)Ops Engineers working in AWS, you are responsible for managing an extensive arry of secrets:</p>
<p>&nbsp;</p>
<ul>
<li>RDS database usernames and passwords</li>
<li>API keys for AWS services and third-party integrations</li>
<li>CodeDeploy and deployment system credentials</li>
<li>KMS encryption keys for data protection</li>
<li>Private keys for SSL/TLS certificates and secure communications</li>
<li>EC2 SSH keys and key pairs</li>
<li>IAM user credentials for developers, QA, and operations teams</li>
<li>Application service accounts and roles</li>
<li>Any username/password combinations</li>
<li>Sensitive configuration data that could aid attackers</li>
</ul>
<p>&nbsp;</p>
<p>The challenge is not just the volume … it&#8217;s the complexity of securing these secrets across multiple AWS accounts and other environments while maintaining operational efficiency.</p>
<p>&nbsp;</p>
<h2>The Hidden Dangers: How Secrets Get Compromised in AWS</h2>
<h3> The Configuration File Trap</h3>
<p>Storing secrets in configuration files is convenient but dangerous, especially in AWS environments where these files often end up in S3 buckets or EC2 instances. This risk was nicely illustrated in the RSA conference presentation &#8220;Red Team vs Blue Team on AWS&#8221; by Kolby Allen and Teri Radichel: <a href="https://www.youtube.com/watch?v=pnwNtlwFYus" target="_blank" rel="noopener">Link to video</a></p>
<p>In the video Kolby deployed AWS resources using sample code found easily on the Internet.  Teri, simulating an attacker, conducted a penetration test and discovered a Lambda function’s configuration file stored in a S3 bucket (for convenience) complete with REDS database credentials in plain tekst.</p>
<p>&nbsp;</p>
<p>If you must use configuration files in AWS:</p>
<ul>
<li>Maintain separate files for development, QA, and production AWS accounts</li>
<li>NEVER commit these files to source control systems (GitHub, GitLab, Bitbucket)</li>
<li>Use S3 bucket policies and encryption, but understand this is still suboptimal</li>
<li>Consider AWS Systems Manager Parameter Store as a minimum improvement</li>
</ul>
<p>&nbsp;</p>
<p>This vulnerability is so important that it’s formally recognized in the MITRE attack framework:  [CWE-200: Exposure of Sensitive Information] (<a href="https://cwe.mitre.org/data/definitions/200.html" target="_blank" rel="noopener">link</a>)</p>
<p>&nbsp;</p>
<h2>Public Source Control: A Goldmine for AWS Account Takeovers</h2>
<p>The most devastating secrets management failures occur when AWS credentials are committed to public repositories. The scale of this problem is staggering.</p>
<p>The people at TruffleHog constructed a live scanner for this:</p>
<p><a href="https://forager.trufflesecurity.com/explore">https://forager.trufflesecurity.com/explore</a></p>
<p>This scanner continuously detects AWS access keys, secrets keys and other credentials in public Github commits, revealing the massive and constant stream of exposed AWS and other secrets.</p>
<p>&nbsp;</p>
<p>This has a widespread impact: TruffleHog researchers discovered approximately 4,500 secrets among the top 1 million websites, many of which were AWS credentials, as detailed in their comprehensive analysis:</p>
<p><a href="https://trufflesecurity.com/blog/4500-of-the-top-1-million-websites-leaked-source-code-secrets">https://trufflesecurity.com/blog/4500-of-the-top-1-million-websites-leaked-source-code-secrets</a></p>
<p>&nbsp;</p>
<p>Leaking these secrets can have far reaching financial consequences:</p>
<p>&nbsp;</p>
<p>A Reddit user faced a 26.000 $ bill after IAM was compromised to execute crypto miners:</p>
<p><a href="https://www.reddit.com/r/aws/comments/17p3v1e/account_got_hacked_and_get_26000k_bill/">https://www.reddit.com/r/aws/comments/17p3v1e/account_got_hacked_and_get_26000k_bill/</a></p>
<p>&nbsp;</p>
<p>A Developper was billed 14.000 $ on AWS following similar exposure:</p>
<p><a href="https://dev.to/juanmanuelramallo/i-was-billed-for-14k-usd-on-amazon-web-services-17fn">https://dev.to/juanmanuelramallo/i-was-billed-for-14k-usd-on-amazon-web-services-17fn</a></p>
<p>&nbsp;</p>
<p>AWS responded on these massive bills and is now actively scanning GitHub respositories through their AWS Credentials Exposed program and automatically disables discovery IAM access keys, but the frequency of these incidents remains alarmingly high as shown by the Trufflehog data.</p>
<p>&nbsp;</p>
<h2>Internal Systems: The False Security Blanket in AWS</h2>
<p>Private repositories and internal systems create a dangerous illusion of security, even within AWS environments. The 2020 Twitter breach perfectly illustrates this vulnerability:</p>
<p>&nbsp;</p>
<p>Attackers breached the perimeter, accessed internal Slack channels where developers had stored AWS credentials and other secrets, and used these to compromise infrastructure in a widely publicized incident:</p>
<p><a href="https://www.zdnet.com/article/twitter-says-hackers-accessed-dms-for-36-users-in-last-weeks-hack">https://www.zdnet.com/article/twitter-says-hackers-accessed-dms-for-36-users-in-last-weeks-hack</a></p>
<p>&nbsp;</p>
<p>Secrets embedded in code even in fully private AWS services, proliferate across AWS services and do appear in:</p>
<ul>
<li>CloudWatch logs from Lambda functions and EC2 instances</li>
<li>S3 bucket access logs</li>
<li>CloudTrail event data</li>
<li>Application Load Balancer logs</li>
<li>Systems Manager Session Manager history</li>
</ul>
<p>As such they do create additional attack vectors within your AWS environment.</p>
<p>&nbsp;</p>
<h2>Runtime Exposure: Secrets in AWS Production Workloads</h2>
<p>Running AWS applications create numerous opportunities for secret exposure:</p>
<ul>
<li>Configuration files within EC2 instances or container images</li>
<li>Environment variables visible in ECS task definitions or Lambda configurations</li>
<li>Memory dumps from EC2 instances containing sensitive data</li>
<li>Application caches in ElastiCache storing credentials</li>
<li>CloudWatch logs revealing secrets in error messages</li>
<li>EC2 instance metadata (IMDSv1) exposing IAM credentials</li>
<li>Unencrypted S3 bucket metadata and tags</li>
<li>AWS CloudShell command history</li>
<li>Bash history on EC2 instances</li>
<li>Container image layers in ECR with embedded secrets</li>
</ul>
<p>This non-exhaustive list demonstrates how secrets can leak from multiple AWS vectors without proper handling.</p>
<p>&nbsp;</p>
<h2>What does AWS offer to fight this battle ? AWS Native Secrets Management</h2>
<h3>Adopt Just-in-Time Secret Retrieval with AWS Services</h3>
<p>Core Principle: Store secrets in AWS-native management systems and retrieve them only when needed.</p>
<p>Instead of embedding secrets in configuration files, implement this AWS-secure workflow:</p>
<ol>
<li>Store secrets in AWS Secrets Manager or Systems Manager Parameter Store</li>
<li>Retrieve secrets programmatically using AWS SDKs at runtime</li>
<li>Use IAM roles and policies for access control</li>
<li>Clear secrets from memory when no longer needed</li>
</ol>
<p>&nbsp;</p>
<h3>AWS Access Control: Implement least-privilege IAM principles</h3>
<ul>
<li>Developers cannot access production secrets via IAM policies</li>
<li>Applications use IAM roles to retrieve only their required secrets</li>
<li>Cross-account access is controlled via resource-based policies</li>
</ul>
<p>&nbsp;</p>
<h3>AWS-Native Secrets Management Solutions</h3>
<ul>
<li>AWS Systems Manager Parameter Store</li>
<li>AWS Secrets Manager (Recommended for Production)</li>
<li style="list-style-type: none;"></li>
</ul>
<p>&nbsp;</p>
<p>As an MSSP, we recommend AWS Secrets Manager as the gold standard for AWS environments.</p>
<p>&nbsp;</p>
<h3>Why Secrets Manager over Parameter Store?</h3>
<ul>
<li>Enhanced security controls with fine-grained IAM integration</li>
<li>Automatic secret rotation for RDS, DocumentDB, and Redshift</li>
<li>Cross-account access capabilities essential for multi-account AWS strategies</li>
<li>Comprehensive audit trails via CloudTrail integration</li>
<li>No CloudFormation exposure risks unlike Parameter Store</li>
<li>Encryption at rest using AWS KMS by default</li>
</ul>
<p>As such we recommend the AWS Secrets Manager for Production workloads, the Encrypted Parameter Store can be used as a configuration store to fetch certain parameters.</p>
<p>&nbsp;</p>
<p>How to use this in code ?</p>
<p>&nbsp;</p>
<h3>Python with boto3:</h3>
<p>&nbsp;</p>
<pre><code>
import boto3
import json

# Using IAM role-based authentication (recommended)
client = boto3.client(&#039;secretsmanager&#039;, region_name=&#039;us-east-1&#039;)

try:
    secret_response = client.get_secret_value(SecretId=&#039;prod/rds/mysql-credentials&#039;)
    secret_dict = json.loads(secret_response[&#039;SecretString&#039;])
    
    # Use the secret
    db_username = secret_dict[&#039;username&#039;]
    db_password = secret_dict[&#039;password&#039;]
    
except ClientError as e:
    # Handle AWS-specific errors
    if e.response[&#039;Error&#039;][&#039;Code&#039;] == &#039;DecryptionFailureException&#039;:
        # Secrets Manager can&#039;t decrypt the protected secret text using the provided KMS key
        raise e
    elif e.response[&#039;Error&#039;][&#039;Code&#039;] == &#039;InternalServiceErrorException&#039;:
        # An error occurred on the server side
        raise e
    elif e.response[&#039;Error&#039;][&#039;Code&#039;] == &#039;InvalidParameterException&#039;:
        # Invalid parameter value
        raise e
    elif e.response[&#039;Error&#039;][&#039;Code&#039;] == &#039;InvalidRequestException&#039;:
        # Parameter value is not valid for the current state of the resource
        raise e
    elif e.response[&#039;Error&#039;][&#039;Code&#039;] == &#039;ResourceNotFoundException&#039;:
        # Can&#039;t find the resource that you asked for
        raise e


</code></pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>Via Infrastructure as Code:</h3>
<ul>
<li>Cloudformation:
<ul>
<li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-secret.html">https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-secret.html</a></li>
</ul>
</li>
<li>Terraform:
<ul>
<li><a href="https://docs.aws.amazon.com/prescriptive-guidance/latest/secure-sensitive-data-secrets-manager-terraform/using-secrets-manager-and-terraform.html">https://docs.aws.amazon.com/prescriptive-guidance/latest/secure-sensitive-data-secrets-manager-terraform/using-secrets-manager-and-terraform.html</a></li>
</ul>
</li>
<li>AWS CDK:
<ul>
<li><a href="https://docs.aws.amazon.com/secretsmanager/latest/userguide/cdk.html">https://docs.aws.amazon.com/secretsmanager/latest/userguide/cdk.html</a></li>
</ul>
</li>
<li>Pulumi:
<ul>
<li><a href="https://www.pulumi.com/registry/packages/aws/api-docs/secretsmanager/secret/">https://www.pulumi.com/registry/packages/aws/api-docs/secretsmanager/secret/</a></li>
</ul>
</li>
</ul>
<p>&nbsp;</p>
<h2>AWS Key Management Service (KMS)</h2>
<p>AWS KMS provides dedicated encryption key management, solving the &#8220;where to store the encryption key&#8221; problem for AWS environments. KMS integrates seamlessly with Secrets Manager and most AWS services.</p>
<p>&nbsp;</p>
<p>KMS Best Practices for Secrets:</p>
<ul>
<li>Use customer-managed KMS keys for production secrets</li>
<li>Implement key rotation policies</li>
<li>Use separate KMS keys per environment/account</li>
<li>Leverage KMS key policies for fine-grained access control</li>
</ul>
<p>&nbsp;</p>
<h2>AWS Systems Manager Parameter Store</h2>
<p>While we recommend Secrets Manager for sensitive data, **Parameter Store** works well for:</p>
<ul>
<li>Non-sensitive configuration data</li>
<li>Cost-conscious environments (free tier available)</li>
<li>Simple use cases without rotation requirements</li>
</ul>
<p>&nbsp;</p>
<h2>Multi-Account AWS Strategies</h2>
<p>For AWS Organizations with multiple accounts (our recommended approach), consider:</p>
<h3>Cross-Account Secrets Access:</h3>
<p>&nbsp;</p>
<pre><code>
{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [
    {
      &quot;Effect&quot;: &quot;Allow&quot;,
      &quot;Principal&quot;: {
        &quot;AWS&quot;: &quot;arn:aws:iam::PROD-ACCOUNT-ID:role/ApplicationRole&quot;
      },
      &quot;Action&quot;: &quot;secretsmanager:GetSecretValue&quot;,
      &quot;Resource&quot;: &quot;*&quot;,
      &quot;Condition&quot;: {
        &quot;StringEquals&quot;: {
          &quot;secretsmanager:ResourceTag/Environment&quot;: &quot;production&quot;
        }
      }
    }
  ]
}
</code></pre>
<p>&nbsp;</p>
<h3>Multi-Region Considerations:</h3>
<ul>
<li>Replicate critical secrets across AWS regions</li>
<li>Use AWS Secrets Manager automatic replication</li>
<li>Consider data residency requirements</li>
</ul>
<p>&nbsp;</p>
<h2>AWS Implementation Best Practices from Our MSSP Experience</h2>
<h3>Security Architecture Considerations</h3>
<ul>
<li>Design secure AWS deployment pipelines** using CodePipeline, CodeBuild, Github Actions with ci-cd plugins like trufflehog : <a href="https://undercodetesting.com/how-to-hunt-for-sensitive-credentials-using-trufflehog">https://undercodetesting.com/how-to-hunt-for-sensitive-credentials-using-trufflehog</a></li>
<li>Implement comprehensive IAM access management with least-privilege principles</li>
<li>Establish governance policies using AWS Config and AWS Organizations SCPs/RCPs</li>
<li>Plan for secret rotation using AWS Secrets Manager automation</li>
<li>Monitor and audit secret access via CloudTrail and CloudWatch</li>
</ul>
<p>&nbsp;</p>
<h3>Operational Excellence in AWS</h3>
<ul>
<li>Automate secret provisioning using AWS Lambda and CloudFormation/Terraform/…</li>
<li>Implement emergency access procedures via AWS SSO and break-glass roles</li>
<li>Establish incident response for compromised secrets using AWS Security Hub or other CSPM/CNAPP</li>
<li>Regular security assessments using AWS Inspector and third-party tools</li>
<li>Cost optimization by right-sizing Secrets Manager usage vs. Parameter Store</li>
</ul>
<p>&nbsp;</p>
<h3>AWS-Specific Monitoring and Alerting</h3>
<p>Set up CloudWatch alarms for:</p>
<ul>
<li>Unusual Secrets Manager API calls</li>
<li>Failed secret retrievals</li>
<li>Cross-account secret access</li>
<li>KMS key usage anomalies</li>
</ul>
<p>&nbsp;</p>
<h2>Conclusion</h2>
<p>Effective AWS secrets management is not just about choosing the right AWS service it&#8217;s about implementing a comprehensive security strategy that leverages AWS-native capabilities while addressing the entire lifecycle of sensitive data. The examples and breaches discussed here represent real financial and reputational risks that AWS customers face daily.</p>
<p>&nbsp;</p>
<h3>Key AWS Takeaways:</h3>
<ol>
<li>Never store secrets in configuration files, S3 buckets, or source control</li>
<li>Use AWS Secrets Manager for production secrets management</li>
<li>Implement just-in-time secret retrieval with AWS SDKs</li>
<li>Apply least-privilege IAM policies and roles</li>
<li>Leverage AWS KMS for encryption key management</li>
<li>Plan for multi-account and multi-region secret strategies</li>
</ol>
<p>The post <a href="https://cloudar.be/awsblog/aws-secrets-management-protecting-your-digital-keys-in-the-cloud/">AWS Secrets Management: Protecting Your Digital Keys in the Cloud</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Quickly Start Monitoring Your Workloads with the Amazon CloudWatch Agent</title>
		<link>https://cloudar.be/awsblog/quickly-start-monitoring-your-workloads-with-the-amazon-cloudwatch-agent/</link>
		
		<dc:creator><![CDATA[Johan Ripoll]]></dc:creator>
		<pubDate>Thu, 21 Mar 2024 08:49:11 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<guid isPermaLink="false">https://cloudar.be/?p=22017</guid>

					<description><![CDATA[<p>Quickly Start Monitoring Your Workloads with the Amazon CloudWatch Agent &#160; In the dynamic world of cloud computing, effective and swift monitoring of your system’s health and performance is essential. The Amazon CloudWatch Agent stands out as a robust solution that empowers you to track custom metrics with ease. An important reason to use the [&#8230;]</p>
<p>The post <a href="https://cloudar.be/awsblog/quickly-start-monitoring-your-workloads-with-the-amazon-cloudwatch-agent/">Quickly Start Monitoring Your Workloads with the Amazon CloudWatch Agent</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Quickly Start Monitoring Your Workloads with the Amazon CloudWatch Agent</h1>
<p>&nbsp;</p>
<p>In the dynamic world of cloud computing, effective and swift monitoring of your system’s health and performance is essential. The Amazon CloudWatch Agent stands out as a robust solution that empowers you to track custom metrics with ease. An important reason to use the agent, instead of just using CloudWatch agentless, is to collect additional metrics. A typical metric would be memory usage, but you can also monitor Windows WMI performance counters or Linux metrics from the /proc/stat file. While some organizations may lean towards specialized third-party monitoring solutions for their comprehensive features and dedicated support, the CloudWatch Agent presents a streamlined and cost-effective alternative, all within your AWS environment.</p>
<p>The CloudWatch agent simplifies the monitoring process and integrates seamlessly with your existing AWS ecosystem. However, before running the agent on any servers, it’s crucial to create a CloudWatch agent configuration file. Otherwise, no additional metrics beyond the default EC2 metrics that are being sent to CloudWatch will be monitored. Utilizing the provided CloudFormation template, you can initiate your monitoring capabilities without the complexities typically associated with setup and configuration.</p>
<p>We use CloudFormation because it automates and simplifies the process of managing related AWS resources, helping us to build and replicate infrastructure in a predictable and controlled manner.</p>
<p>Let’s look at how this solution works in detail.</p>
<p><img fetchpriority="high" decoding="async" class="alignnone wp-image-22021 size-full" src="https://cloudar.be/wp-content/uploads/2024/03/highlevel-arch-blog.png" alt="High Level Architecture" width="1112" height="1143" srcset="https://cloudar.be/wp-content/uploads/2024/03/highlevel-arch-blog.png 1112w, https://cloudar.be/wp-content/uploads/2024/03/highlevel-arch-blog-768x789.png 768w, https://cloudar.be/wp-content/uploads/2024/03/highlevel-arch-blog-700x720.png 700w" sizes="(max-width: 1112px) 100vw, 1112px" /></p>
<ul>
<li>The template can be downloaded from the Cloudar GitHub repository here: <a href="https://github.com/WeAreCloudar/cloudformation-samples/blob/main/templates/cloudwatch-agent/cloudwatch.yaml">cloudwatch.yaml</a></li>
</ul>
<p>The CloudFormation template includes the following resources:</p>
<ul>
<li><strong>SSMDocumentCloudWatchAgent</strong>: an SSM document that combines the <code>AWS-ConfigureAWSPackage</code> with the <code>AmazonCloudWatchAgent</code> and <code>AmazonCloudWatch-ManageAgent</code> to install and configure the CloudWatch agent.</li>
<li><strong>AgentConfigLinuxParameter</strong> and <strong>AgentConfigWinParameter</strong>: SSM parameters that store the configuration for Linux and Windows environments, respectively.</li>
<li><strong>CWAgentLinuxAssociation</strong> and <strong>CWAgentWinAssociation</strong>: SSM associations that ensure the execution of the CloudWatch agent installation and configuration.</li>
<li><strong>IAMPolicySSMParameter</strong>: an IAM policy that grants the necessary permissions for SSM and CloudWatch agent operations.</li>
<li><strong>IAMRoleforSSM</strong> and <strong>InstanceProfileforSSM</strong>: IAM role and instance profile that provide the required policies for SSM, CloudWatch agent, and access to the SSM parameters.</li>
</ul>
<p>Deploying this template will create an SSM document, which is the result of merging two managed AWS SSM documents: AWS-ConfigureAWSPackage with AmazonCloudWatchAgent and AmazonCloudWatch-ManageAgent. This document will install the CloudWatch agent using the specified configuration.<br />
The SSM associations will enforce the execution of this document to install and configure the CloudWatch agent. It will check the EC2 instances’ tags for the OS key (a dedicated OS tag is necessary for detecting the required configuration, an SSM association doesn&#8217;t explicitly detect OS details through e.g. metadata) and, depending on its value, will use either the Linux or Windows SSM parameter as its configuration. The created IAM resources are the preferred instance role, containing the necessary policies for SSM, the CloudWatch agent, and access to the SSM parameters that will be used.</p>
<p>The essential managed AWS policy for the CloudWatch agent is identified by the ARN:  <code>arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy</code></p>
<p>We are using SSM State Manager associations for better control, flexibility, and ease of management compared to manual installation or embedding in userdata fields.</p>
<p>The provided CloudWatch agent configurations are examples to help you get started quickly. We recommend you review and adapt them to better suit your requirements.</p>
<p>Once the CloudFormation template is deployed in your environment, the following process occurs:</p>
<ul>
<li>When an instance starts or is already running, SSM performs these steps:
<ol>
<li><strong>Discovery &amp; Association Evaluation </strong>: SSM identifies the instance based on the OS tag, as specified in our two associations which contains the installation and CloudWatch agent configuration.</li>
<li><strong>Execution</strong>: If the instance meets the criteria, SSM executes the association document and installs the CloudWatch agent.</li>
<li><strong>Configuration Application</strong>: As the final step, the relevant agent configuration is applied. (Windows or Linux).</li>
</ol>
</li>
</ul>
<p>If everything proceeds as expected, CloudWatch will begin collecting custom metrics from your instances.</p>
<p><img decoding="async" class="alignnone size-full wp-image-22026" src="https://cloudar.be/wp-content/uploads/2024/03/cw-metrics.png" alt="CloudWatch metrics" width="605" height="237" /></p>
<p>&nbsp;</p>
<p>With the additional metrics now available in Amazon CloudWatch, you’ve taken a significant step toward monitoring and optimizing your environment. But don’t stop there! The next logical move is to implement CloudWatch alarms. These alarms allow you to proactively respond to critical events, ensuring the health and performance of your AWS resources. So go ahead, set up those alarms, and gain even more control over your AWS infrastructure! 🚀</p>
<p>The post <a href="https://cloudar.be/awsblog/quickly-start-monitoring-your-workloads-with-the-amazon-cloudwatch-agent/">Quickly Start Monitoring Your Workloads with the Amazon CloudWatch Agent</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Cloud cost optimization? Say hello to the FinOps Program Manager</title>
		<link>https://cloudar.be/awsblog/cloud-cost-optimization-say-hello-to-the-finops-program-manager/</link>
		
		<dc:creator><![CDATA[Team Cloudar]]></dc:creator>
		<pubDate>Wed, 15 Feb 2023 08:25:29 +0000</pubDate>
				<category><![CDATA[AWS Blog]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[FinOps]]></category>
		<guid isPermaLink="false">https://cloudar.be/?p=20553</guid>

					<description><![CDATA[<p>FinOps has gained a solid foothold in the cloud space over the past year. While we used to have to champion cloud financial management, the need for expertise on the intricacies of cloud billing is becoming more and more obvious to companies that have moved to the cloud. Now the question is, who is responsible [&#8230;]</p>
<p>The post <a href="https://cloudar.be/awsblog/cloud-cost-optimization-say-hello-to-the-finops-program-manager/">Cloud cost optimization? Say hello to the FinOps Program Manager</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>FinOps has gained a solid foothold in the cloud space over the past year. While we used to have to champion cloud financial management, the need for expertise on the intricacies of cloud billing is becoming more and more obvious to companies that have moved to the cloud. Now the question is, who is responsible for cost efficiency of the cloud? Enter the FinOps Program Manager.</strong></p>
<p>Getting people to include Cloud financial management and FinOps principles in their daily operation of the cloud is what FinOps professionals like me have been striving for. With FinOps principles integrated more and more into standard cloud practice, an interesting question arises: should the FinOps engineer and the cloud engineer be two separate roles?</p>
<p>If we take DevOps as a precedent, we could argue that there is no way to do cloud engineering without being knowledgeable about DevOps principles and practices. The same could be said of FinOps: It is impossible to do quality cloud engineering without being aware of FinOps principles and best practices.</p>
<p>But wait, isn’t there a <a href="https://finopsalliance.com/blog/finops-shared-responsibility-model/">shared responsibility model for FinOps</a> too? If we take that shared responsibility model, we can add the “cost efficiency in the cloud” to the responsibilities of the cloud engineers. That leaves us with the “cost efficiency of the cloud”, which surely means FinOps is here to stay? Yes and no. While the knowledge to properly ensure cost efficiency of the cloud is highly specific, the role filling up this layer of the FinOps shared responsibility model is akin to that of a program manager. Say hello to the FinOps Program Manager!</p>
<p>As FinOps becomes more of a tool in the toolbox of Cloud engineers rather than a separate practice (as should be the case), we need Program Managers to maintain and manage FinOps as a program within organizations. FinOps Program Managers are responsible for distributing knowledge, enabling managers and engineers in their access to the right information and making sure the organization has a clear way forward in developing FinOps.</p>
<p>In essence, FinOps becomes a knowledge space or practice utilized by cloud engineers and the program to ensure the cloud is adopted properly within the organization’s tech landscape. A dedicated FinOps profile is responsible for gathering and maintaining that knowledge. In practice, we often see this person and the FinOps Program Manager being one and the same. They are the driving force in gathering and maintaining cloud billing and cost optimization knowledge and supporting FinOps program management efforts within the organization. Based on their efforts, managers and cloud engineers can make informed decisions and have productive conversations on how to improve their cost efficiency in the cloud.</p>
<p>The bottom line: For FinOps to succeed in an organization, there is a strong need for a FinOps Program Manager who can lead up and down the chain of command and steer the course to keeping the shared responsibility model for FinOps in place.</p>
<p><strong>Want some support to help your company get the most out of the cloud? </strong><a href="https://cloudar.be/"><strong>Reach out</strong></a><strong> to us!</strong></p>
<p>The post <a href="https://cloudar.be/awsblog/cloud-cost-optimization-say-hello-to-the-finops-program-manager/">Cloud cost optimization? Say hello to the FinOps Program Manager</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Options for migrating between Amazon Cognito User Pools</title>
		<link>https://cloudar.be/awsblog/options-for-migrating-between-amazon-cognito-user-pools/</link>
		
		<dc:creator><![CDATA[Ben Bridts]]></dc:creator>
		<pubDate>Thu, 18 Aug 2022 09:35:22 +0000</pubDate>
				<category><![CDATA[AWS Blog]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Security & Compliance]]></category>
		<guid isPermaLink="false">https://cloudar.be/?p=20380</guid>

					<description><![CDATA[<p>Sometimes we run into questions that seem simple, but that have a very complex answer. In this blog post we will explain why &#8220;Can I migrate between two Amazon Cognito User Pools&#8221; is one of those question, and why it usually leads to a new set of questions, like: Where do your users exist (do [&#8230;]</p>
<p>The post <a href="https://cloudar.be/awsblog/options-for-migrating-between-amazon-cognito-user-pools/">Options for migrating between Amazon Cognito User Pools</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="answer-body-detail user-formatted-content">
<p>Sometimes we run into questions that seem simple, but that have a very complex answer. In this blog post we will explain why &#8220;Can I migrate between two Amazon Cognito User Pools&#8221; is one of those question, and why it usually leads to a new set of questions, like:</p>
<ul>
<li>Where do your users exist (do they federate from a different Identity Provider (IdP), or are they in the User Pool?)</li>
<li>Are you using MFA in Cognito</li>
<li>Which configuration settings can you change?</li>
<li>Are you okay with a migration process in the application?</li>
<li>Will all users sign in during a certain timeframe?</li>
<li>Do you want to keep your endpoints and identifiers, or are new endpoints okay?</li>
</ul>
<p>Lets look at why we are asking those questions, and which Cognito components are tricky to deal with.</p>
<h1>Configuration</h1>
<p>The configuration of a User Pool can be described by the API, or managed in an Infrastructure as Code tool. This makes it easy to recreate with the same settings. However, besides the new endpoints and ids (see below), <a href="https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html" target="_blank" rel="noopener">you will have to update the federation settings</a> (of you are using sign in through a third party).</p>
<p>Eg. If you are federating users from Active Directory (AD) using SAML, you will have to set up a new integration on the AD side as well, so that user can sign in via AD/SAML. This is the same process as setting up this IdP for the first time.</p>
<h1>Endpoints and Ids</h1>
<p>If you create a new user pool, it will get a new id. This means that the following things will change. Usually this is not a problem, as these are expected changes (if you migrate to a different product, similar things will change).</p>
<ul>
<li>The User Pool Id</li>
<li>The App Client Ids and Secrets (you also create new App Clients)</li>
<li>The domain used for the hosted UI. Technically you can move it, but this will include downtime. Using a new domain will always be easier (and give you more control about step-by-step updates and rollbacks)</li>
<li>The User Pool Id and App Client Id are also part of the Tokens that Cognito returns. <a href="https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html#amazon-cognito-user-pools-using-tokens-step-3">If you&#8217;re verifying them in your application (which you should)</a>, or are using a managed integration between an AWS service and Cognito (eg. Api Gateway), you will have to update these too.</li>
</ul>
<h1>Users and Groups</h1>
<p>This is the difficult part: while there are APIs to list/describe users and groups, there is no way to export the password (hash) or the MFA (seed) of a user. This means that in the worst case scenario you have to disable MFA and all users will have to reset their password before they can log in again. There are a few solutions, but none of them are ideal.</p>
<h2>Problem: You are using MFA in Cognito</h2>
<p>This is the worst case scenario for a migration. There is no way to export or set MFA seeds in Cognito, and usually disabling MFA for everyone is not going to be an option</p>
<h2>Problem: You are using the sub attribute in your application</h2>
<p>The sub attribute is an unique identifier for every user, and migrating users will create a new identifier. To work around this, you could use a different (custom) attribute to safe an identifier in, and update your application to use that. Filling that attribute comes with its own complexities, though.</p>
<h2>Option 1: You are using federation / sign in through a third party</h2>
<p>You&#8217;re in luck! Since the user and their password exist in the other system, you can setup a new federation and users will still be able to sign in (but  make sure you&#8217;ve read the &#8220;Configuration&#8221; section above).</p>
<p>If you want to go this route to make migration (and failover) easier, there are third party IdPs that you can use via SAML/OIDC. Although in some cases it might make more sense to integrate directly with them (either in Cognito Identity Pools or in the application) instead of putting User Pools in between. One reason to keep Cognito, is that you can create multiple App Clients (and thus applications) on one pool (and this can be done with the IaC tool you are already using). Whereas if you integrate directly, you have to configure everything in the external service (and depending on the protocol you are using, this can be hard to debug)</p>
<p>If you are also using groups, you still have to export and recreate those. Take a look at the <a href="https://aws.amazon.com/solutions/implementations/cognito-user-profiles-export-reference-architecture/" target="_blank" rel="noopener">AWS Solution mentioned in option 2</a>,  and its<a href="https://docs.aws.amazon.com/solutions/latest/cognito-user-profiles-export-reference-architecture/solution-components.html#limitations" target="_blank" rel="noopener"> limitations</a> for an example of doing that.</p>
<h2>Option 2: You don&#8217;t mind resetting all passwords.</h2>
<p>This is also doable, you can export all users, import them in the new pool and make them set a new password to sign in (if this is a limited set of internal users, you could also set a password for them, but you&#8217;d want them to pick their own either way)</p>
<p><a href="https://aws.amazon.com/solutions/implementations/cognito-user-profiles-export-reference-architecture/">There is even an AWS solution (read: Open Source software that you have to manage yourself) that can be used to do the export once or on a schedule</a> (eg. to create backups). Make sure to also check the <a href="https://docs.aws.amazon.com/solutions/latest/cognito-user-profiles-export-reference-architecture/solution-components.html#limitations" target="_blank" rel="noopener">limitations</a>.</p>
<h2>Option 3: Migrating on first sign-in</h2>
<p><a href="https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-migrate-user.html">You can add a Lambda Function to the new User Pool (there is example code, but you&#8217;d have to manage this yourself)</a>. This function will get the username and password, and can check the original pool and write the existing password to the new pool if the password is correct. Docs:</p>
<p>This has some downsides:</p>
<ul>
<li>The old User Pool needs to stay around until the migration is complete (you pay for active users, so this does not have to be a cost problem)</li>
<li>This can take a long time, and potential never finish (if you have users that don&#8217;t sign in regularly)</li>
</ul>
</div>
<h1>Conclusion</h1>
<div class="answer-body-detail user-formatted-content">
<p>There is a lot of complexity to deal with, so the short answer to our original question is &#8220;it depends&#8221;.</p>
<p>If you have a workload where this question is relevant, you probably also want to give feedback to AWS (eg. via your Account Manager). If the service would provide a way to export and import Users and Groups, this would be a lot easier. Not being able to export password-hashes and MFA-seeds (even in a way that only Cognito can read them), is currently limiting multiple solutions.</p>
</div>
<p>The post <a href="https://cloudar.be/awsblog/options-for-migrating-between-amazon-cognito-user-pools/">Options for migrating between Amazon Cognito User Pools</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The deal with DevOps: How AWS helps you deliver faster</title>
		<link>https://cloudar.be/awsblog/the-deal-with-devops-how-aws-helps-you-deliver-faster/</link>
		
		<dc:creator><![CDATA[Senne Vaeyens]]></dc:creator>
		<pubDate>Tue, 05 Jul 2022 13:32:51 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<guid isPermaLink="false">https://cloudar.be/?p=20367</guid>

					<description><![CDATA[<p>In today’s constantly changing business landscape, businesses need to be able to shift gears quickly to deliver new products, features and services. The DevOps approach helps companies leverage the power of AWS to automate infrastructure tasks and accelerate production and deployment. What is DevOps in Managed Services? Let’s start with a quick review of what [&#8230;]</p>
<p>The post <a href="https://cloudar.be/awsblog/the-deal-with-devops-how-aws-helps-you-deliver-faster/">The deal with DevOps: How AWS helps you deliver faster</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>In today’s constantly changing business landscape, businesses need to be able to shift gears quickly to deliver new products, features and services. The DevOps approach helps companies leverage the power of AWS to automate infrastructure tasks and accelerate production and deployment.</strong></p>
<h2><strong>What is DevOps in Managed Services?</strong></h2>
<p>Let’s start with a quick review of what DevOps is. The word DevOps combines development and operations, reflecting the idea that it automates and integrate the processes between software development and IT teams. DevOps is a broad term for a combination of culture, practice and tools that accelerate an organization’s abilities to deliver applications and services. DevOps involves adjusting and reiteration products at fast pace. It is often visualized as a continuous loop, embodying the idea of automation and continuous improvement resulting from the seamless cooperation of developers and operators.</p>
<p>DevOps Managed Services helps enterprises implement changes to their digital products faster. It does this through continuous integration and continuous delivery or continuous deployment (CI/CD) tools, which helps monitor, update, and track updates. AWS gives you a set of flexible services that simplify provisioning and managing infrastructure, deploying application code, automating software release processes, and monitoring your application and infrastructure performance.</p>
<h2><strong>The DevOps advantage </strong></h2>
<p>The DevOps advantage comes down to speed while maintaining quality. The velocity of AWS DevOps helps organizations to better serve their customers and compete more effectively in the market by proving the following benefits:</p>
<ul>
<li><strong>Speed:</strong> Get on the market faster and get ahead of competitors. With AWS services there is no infrastructure setup required or software to install, so you can focus on your core product.</li>
<li><strong>Reliability:</strong> Practices like continuous integration and continuous delivery test that each change is functional and safe. This lets you reliably deliver faster while ensuring the quality of updates and changes while keeping your users happy.</li>
<li><strong>Automation:</strong> AWS helps automate processes such as deployments, development &amp; test workflows, container and configuration management. This also cuts down the budget for the deployment and support of IT infrastructure significantly.</li>
<li><strong>Scale:</strong> Automation and consistency help you manage changing systems more efficiently with reduced risk while scaling up.</li>
<li><strong>Flexibility:</strong> Making changes as you go instead of rebuilding your existing infrastructure from scratch lets businesses respond faster to customer and market needs.</li>
</ul>
<h2><strong>AWS DevOps best practices </strong></h2>
<p>At Cloudar we put DevOps into practice, working with developers or application engineers throughout the entire project life-cycle. Together we decide on deployment strategies, application design optimization, CI/CD pipelines and monitoring requirements using both AWS native services and third party solutions. All developers have to do is write code, and the pipeline takes care of the rest.</p>
<p>We also provision, configure, and manage your AWS infrastructure resources using code and templates, known as infrastructure as code. This helps you manage your development, testing, and production environments in way that is more repeatable and efficient. We build templates monitoring and enforcing infrastructure compliance so clients can easily keep building and tearing down environments. Everything we set up adheres to AWS the AWS Well Architected Framework guidelines and can be fully managed in our Managed Services offering.</p>
<p><strong>Ready to put DevOps into practice to accelerate your success? We enable your teams to focus on software while automating code deployments, infrastructure, security and systems management. </strong><a href="https://cloudar.be/services-solutions"><strong>Reach out to us</strong></a><strong>! </strong></p>
<p>The post <a href="https://cloudar.be/awsblog/the-deal-with-devops-how-aws-helps-you-deliver-faster/">The deal with DevOps: How AWS helps you deliver faster</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>#CloudartotheRescue: DO use AWS CloudFormation (a response)</title>
		<link>https://cloudar.be/awsblog/do-use-aws-cloudformation-a-response/</link>
		
		<dc:creator><![CDATA[Ben Bridts]]></dc:creator>
		<pubDate>Tue, 14 Dec 2021 15:43:04 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Well-Architected]]></category>
		<guid isPermaLink="false">https://www.cloudar.be/?p=19792</guid>

					<description><![CDATA[<p>Over the past few months I’ve seen the article “Do not use AWS CloudFormation” by Greg Swallow make the rounds a couple of times. While there are some valid reasons you could prefer Terraform, I don’t agree with many of the issues Greg has with CloudFormation. Some of the weaknesses he identifies, I’d even count [&#8230;]</p>
<p>The post <a href="https://cloudar.be/awsblog/do-use-aws-cloudformation-a-response/">#CloudartotheRescue: DO use AWS CloudFormation (a response)</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Over the past few months I’ve seen the article “Do not use AWS CloudFormation” by Greg Swallow make the rounds a couple of times. While there are some valid reasons you could prefer Terraform, I don’t agree with many of the issues Greg has with CloudFormation. Some of the weaknesses he identifies, I’d even count as strengths! So here I’m going to go through and counter his points, following the structure of his piece. All quotes (in italics) are from Greg’s blog to provide context.</strong></p>
<h3>Indirection</h3>
<p><em>With Terraform […] no intermediary sits between you and the service you’re controlling. Want an RDS instance? Terraform will make calls directly to the RDS API.</em></p>
<p>First of all, both Terraform and CloudFormation provide some level of indirection. CloudFormation converts a YAML or JSON template to a set of API calls. Terraform does the same, starting from an HCL template.</p>
<p>Having that transformation in the cloud can make it harder to see the underlying API responses, but that’s not because of the conversion between template and API. The same APIs are still getting called, and they will raise the same errors when there is something wrong with the requests. If you look in CloudTrail, you will see these requests together with the entire error message.</p>
<p>The way CloudFormation implements that translation layer (for newer resources) can add a second step after an API call fails. However, it also allows for standardized errors in other cases, like “Resource Already Exists” or “Only configurable when creating a resource”.</p>
<p><em>The prerequisite steps you have to take to use CloudFormation [StackSets] across multiple accounts </em>also <em>must be taken just to have CloudFormation spin up resources in multiple regions </em>within the same account<em>.</em></p>
<p>I’d argue that StackSets (and Service Catalog) are benefits of using CloudFormation. However, if they are too much overhead for a project, you can still deploy to multiple regions by adding a &#8211;region parameter to your deployment command. Although, by not using StackSets, you’d lose some convenience features, like being able to update multiple regions in parallel easily.</p>
<h3>Logic</h3>
<p><em>Terraform offers a rich set of data sources and transforming data with Terraform is a breeze.</em></p>
<p>I agree that CloudFormation could use more intrinsic functions, but that does not mean it’s severely lacking in functionality. In many cases, you can replace the missing functions by being stricter about the acceptable inputs.</p>
<h3>Speed</h3>
<p><em>AWS CloudFormation is S-L-O-W.</em></p>
<p>CloudFormation can seem slow because it tries very hard not to get into a state where your infrastructure is broken. Both CloudFormation and Terraform try to execute as much in parallel as possible (keeping dependencies between resources in mind). However, CloudFormation will not start deleting resources until every creation and update has been completed. On top of that, CloudFormation will validate that all actions (deletes included) finish before it considers the deployment complete.</p>
<h3>Sync vs Async</h3>
<p><em>Wrapping CI/CD tooling around AWS CloudFormation is […] a difficult matter of polling stack updates until the right stack state bubbles up from an aws cloudformation CLI query.</em></p>
<p>Here Greg argues that Terraform is better because polling for changes can be challenging to do. However, if you’re okay with executing a command-line tool (like Terraform), you can AWS CloudFormation deploy, and the AWS CLI will do all that for you.</p>
<p>Even without the CLI, running async comes with some significant advantages:</p>
<ul>
<li>You don’t have to worry about the build tool (or your laptop) crashing or losing internet connectivity</li>
<li>Everyone with access to the AWS account can see when an update is in progress and poll independently for changes</li>
<li>You don’t need a process that keeps running during the change. The deployment will keep running until it’s done.</li>
</ul>
<p>Running 100% as a managed service also includes the following advantages:</p>
<ul>
<li>You don’t need to execute any code on your machine</li>
<li>You don’t need to worry about different tool versions and upgrades between them</li>
<li>You don’t need an access key with full admin permissions</li>
<li>You get state management included by default (instead of having to configure it yourself).</li>
</ul>
<p>That safer approach has the potential of doubling the time it takes to execute a change (assuming that a create/update takes as long as a delete), but having automatic rollbacks is frequently worth the extra time.</p>
<h3>Portability</h3>
<p><em>If you learn AWS CloudFormation, then guess what: you can’t take your skills with you. If you put forth the effort to learn Terraform, then you can take your skills to any other cloud.</em></p>
<p>While the workflow might stay the same, the resources that you create are going to be vastly different between clouds. The primary skill that you should learn (independently from the tool) is how AWS works. This will make your skills transferable between tools instead of between clouds. You wouldn’t expect carpenters to list their experience with a hammer (even if it’s useful for all kinds of projects): instead you want to know what they can build.</p>
<h3>Importing existing resources</h3>
<p><em>I can’t even begin to tell you how to import resources with AWS CloudFormation, and neither can AWS’s engineers.</em></p>
<p>This is pure hyperbole. Importing resources into CloudFormation is documented, and the console has a basic wizard.</p>
<p>If we ignore the exaggeration, there is indeed still room for improvement. While all new resource types should support importing, there is still a long tail of old resources that are not yet supported. “All resources should support resource import” is a valid point. However, CloudFormation was usable before the introduction of this feature. Whether this is a dealbreaker will depend on how frequently you expect to import unsupported resources.</p>
<h3>Service Quotas</h3>
<p><em>The list of quotas for the AWS CloudFormation service is just hilarious.</em></p>
<p>I don’t think that documented limitations are necessarily a bad thing, and I wonder how many of those quotas people actually run into. It’s been a long time since I had to look at that page.</p>
<h3>TL;DR</h3>
<p>CloudFormation makes different trade-offs than Terraform. Looking at its sharp edges without considering the advantages they bring is unfair.</p>
<p>Use the tool that matches your requirements. If you want safe deployments, tight integration within AWS, and minimal operational overhead, CloudFormation will probably fit the bill.</p>
<p>&nbsp;</p>
<p>The post <a href="https://cloudar.be/awsblog/do-use-aws-cloudformation-a-response/">#CloudartotheRescue: DO use AWS CloudFormation (a response)</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How machine learning can drastically limit your downtime</title>
		<link>https://cloudar.be/awsblog/how-machine-learning-can-drastically-limit-your-downtime/</link>
		
		<dc:creator><![CDATA[Tom De Blende]]></dc:creator>
		<pubDate>Wed, 02 Jun 2021 10:00:12 +0000</pubDate>
				<category><![CDATA[AWS Blog]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Managed Services]]></category>
		<category><![CDATA[MSP]]></category>
		<guid isPermaLink="false">https://www.cloudar.be/?p=19012</guid>

					<description><![CDATA[<p>Did you know that the first gasoline-fueled cars were built at the end of the 19th century? At the time, there was no way of knowing when you were about to run out of fuel. If you wanted to know how much gas you had left, you had to turn off the engine, get out [&#8230;]</p>
<p>The post <a href="https://cloudar.be/awsblog/how-machine-learning-can-drastically-limit-your-downtime/">How machine learning can drastically limit your downtime</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Did you know that the first gasoline-fueled cars were built at the end of the 19th century? At the time, there was no way of knowing when you were about to run out of fuel. If you wanted to know how much gas you had left, you had to turn off the engine, get out of the car, pop open the hood, and insert a dipstick to measure the tank’s fuel level. Can you even imagine the hassle? The first dashboard fuel gauges were introduced in cars in the 1920s, but it wasn’t until 1983 that the low fuel indicator made its debut. And then, it took many more years for cars to be equipped with the mileage predictors we know today.  Now, while mileage prediction isn’t quite powered by machine learning, the two do have a couple of things in common. How? Easy. The technology used to predict your mileage takes several factors into account. If you are suffering from a severe case of lead foot, for example, your mileage prediction will plummet.</strong></p>
<h2><b>From fuel gauge to disk space alert</b></h2>
<p><span style="font-weight: 400;">Let’s use this trip down memory lane as a stepping stone. Imagine your car is a simple EC2 instance. How would you feel if you had to log onto your server and open up Explorer or run a <em>df</em> just to find out how much disk space you had left on your system drive? What would you think of having to check your dashboards every day? Would you be content with a virtual dipstick, as it were? </span></p>
<p><span style="font-weight: 400;">Thankfully, this is not our reality today. Even traditional monitoring systems have long been capable of providing threshold-based alerts. Think of them as configurable low fuel indicator alerts for your systems. </span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"><br />
</span><b></b></p>
<h2><b>Threshold-based alerts: a solid start</b></h2>
<p><span style="font-weight: 400;">The question we need to ask ourselves is whether we are content with threshold-based alerts. A single gigabyte of free disk space might be plenty on one server and impending doom on the next. How do we fix this? </span><span style="font-weight: 400;">Percentage-based thresholds are an interesting option, but they also come with a few caveats. While 5% might be ample free space for a 20TB file server, it would be problematic for a build server.</span></p>
<p><span style="font-weight: 400;">So you need to differentiate. And guess. Can you predict your system needs based on historical events and best practices?</span></p>
<p><span style="font-weight: 400;">Now, if there is one thing computers are better at than humans, it’s spotting patterns. They can learn from those patterns and deduce when things are “not normal”. Then, they will kindly alert you when there is cause for alarm. Much like the “miles to empty” feature in your car.</span></p>
<h2><b>Putting machine learning to good use</b></h2>
<p><span style="font-weight: 400;">And that is exactly what <strong>AWS DevOps Guru</strong> will do for you. The service uses machine learning techniques to spot anomalies in your environment and alert you before accidents happen. </span><span style="font-weight: 400;">DevOps Guru uses machine learning models that were nurtured by years of Amazon.com and AWS operational excellence. You can use these models to identify anomalous application behavior (e.g. increased latency, error rates, resource constraints, etc.) and surface critical issues that could cause potential outages or service disruptions.</span></p>
<p><img decoding="async" class="alignnone size-medium wp-image-19240" src="https://cloudar.be/wp-content/uploads/2021/05/Screenshot-2021-05-31-at-10.13.38-650x433.png" alt="" width="650" height="433" srcset="https://cloudar.be/wp-content/uploads/2021/05/Screenshot-2021-05-31-at-10.13.38-650x433.png 650w, https://cloudar.be/wp-content/uploads/2021/05/Screenshot-2021-05-31-at-10.13.38-1300x867.png 1300w, https://cloudar.be/wp-content/uploads/2021/05/Screenshot-2021-05-31-at-10.13.38-325x217.png 325w" sizes="(max-width: 650px) 100vw, 650px" /></p>
<p><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;">As an official AWS Managed Service Provider, Cloudar is constantly looking for ways to improve customer service. We help our customers to reach the highest levels of uptime. Or more specifically: the lowest levels of unplanned downtime, which is different, but I digress.</span> <span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;">And while we still use traditional threshold-based monitoring tools (which do a great job in their own respect), using ML-based predictive monitoring and anomaly detection is something we have been doing for a while. With, I must admit, mixed feelings…</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"><br />
</span><b></b></p>
<h2><b>The predictive monitoring trap</b></h2>
<p><span style="font-weight: 400;">Let’s circle back to our story about fuel. Imagine your car yelling at you to stop for gas every few hundred miles, only for you to arrive at the gas station and learn that the tank is half full. That is exactly the issue with a lot of tools that provide anomaly detection: false positives. </span></p>
<p><span style="font-weight: 400;">At first glance, false positives don’t seem too bad. But trust me, they are. I would even argue that they can be as bad as missing a true alert. Any on-call engineer will tell you what happens when you receive too many false positives: you stop paying attention. </span><span style="font-weight: 400;"><br />
</span></p>
<p><img loading="lazy" decoding="async" class="size-medium wp-image-19015 alignleft" src="https://cloudar.be/wp-content/uploads/2021/05/Chart1-650x240.jpg" alt="" width="650" height="240" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;">So yes, there is a lot of complexity in building an ML-based monitoring tool. And our experience as a launch partner (</span><a href="https://aws.amazon.com/devops-guru/customers/"><span style="font-weight: 400;">bragging rights here</span></a><span style="font-weight: 400;">) is that DevOps Guru does a good job when it comes to limiting false positives. But of course, we are looking forward to seeing the tool grow even more. </span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"><br />
</span><i><span style="font-weight: 400;">Did my blog post spark your interest? Cloudar is hosting an EMEA DevOps Immersion Day on June 22 with a strong focus on DevOps Guru. The Immersion Days in the US were a big success and we are organizing this EMEA session with AWS to accommodate EMEA timezones. Sign up </span></i><a href="https://cloudar.zohobackstage.com/AWSDevOpsImmersionDay#/"><i><span style="font-weight: 400;">here</span></i></a><i><span style="font-weight: 400;">.</span></i></p>
<p>The post <a href="https://cloudar.be/awsblog/how-machine-learning-can-drastically-limit-your-downtime/">How machine learning can drastically limit your downtime</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AWS CloudFormation Modules: A first look</title>
		<link>https://cloudar.be/awsblog/aws-cloudformation-modules-a-first-look/</link>
		
		<dc:creator><![CDATA[Ben Bridts]]></dc:creator>
		<pubDate>Wed, 25 Nov 2020 00:31:22 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<guid isPermaLink="false">https://www.cloudar.be/?p=18126</guid>

					<description><![CDATA[<p>AWS just released a new feature for CloudFormation, &#8220;CloudFormation Modules&#8220;. Of course, we immediately had to try it out. In this blog post, you can follow along with our exploration. Installation To use this new feature, you need the latest version of the CloudFormation cli. You can install this with pip install cloudformation-cli (tip: you [&#8230;]</p>
<p>The post <a href="https://cloudar.be/awsblog/aws-cloudformation-modules-a-first-look/">AWS CloudFormation Modules: A first look</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>AWS just released a new feature for CloudFormation, &#8220;<a href="https://aws.amazon.com/blogs/mt/introducing-aws-cloudformation-modules/">CloudFormation Modules</a>&#8220;. Of course, we immediately had to try it out. In this blog post, you can follow along with our exploration.</p>
<h2>Installation</h2>
<p>To use this new feature, you need the latest version of the CloudFormation cli. You can install this with <code>pip install cloudformation-cli</code> (tip: you can use <a href="https://github.com/pipxproject/pipx">pipx</a> to keep your python environment clean). If you already had an older version installed, run <code>pip install --upgrade cloudformation-cli</code></p>
<h2>Starting a new project</h2>
<p>To create a new module, we follow a similar process as with Resource Providers. For this post, we&#8217;re going to create a module to set up an S3 Bucket and a CloudFront Distribution for static website hosting.</p>
<p>We first create a new directory, after that we run <code>cfn init</code>. This will ask us for input, and we can specify that we want to create a module for our generic static website</p>
<pre>~$ cfn init
Initializing new project
Do you want to develop a new resource(r) or a module(m)?.
&gt;&gt; m
What is the name of your module type?
(&lt;Organization&gt;::&lt;Service&gt;::&lt;Name&gt;::MODULE)
&gt;&gt; Cloudar::Generic::StaticWebsite::MODULE
Directory /cloudar_generic_staticwebsite/fragments Created
Initialized a new project in /cloudar_generic_staticwebsite
</pre>
<h2>Writing our module</h2>
<p>We already had a generic CloudFormation template that was doing a similar thing. So we deleted <code>sample.json</code> and replaced it with our own <code>website.yaml</code>. Officially, only json is supported, but in our test yaml worked fine. Since this is a test, we&#8217;re okay with taking the unsupported path. For use in a production environment, we can use <a href="https://github.com/awslabs/aws-cfn-template-flip">cfn-flip</a> to convert our template to json.</p>
<p>Depending on your template, you might not have to change anything. Going over the resources to make sure they have clear names and running <a href="https://github.com/aws-cloudformation/cfn-python-lint">cfn-lint</a> isn&#8217;t a bad idea though. <a href="https://github.com/WeAreCloudar/cloudformation-samples/tree/master/modules/cloudar_generic_staticwebsite">You can see the template we created on GitHub</a>.</p>
<h2>Deploying our module</h2>
<p>We already had our AWS credentials configured for the AWS cli. Which meant that the only thing we had to do for our deployment was running <code>cfn submit --region us-east-1</code>. If you are submitting multiple times, you can add <code>--set-default</code> to change the default version after submitting it.</p>
<p>You can see the deployed version, with all its properties in the CloudFormation console. This is also a great place to see all the resources our module will create</p>
<h2><img loading="lazy" decoding="async" class="alignnone wp-image-18132 size-medium" src="https://cloudar.be/wp-content/uploads/2020/11/Screenshot-2020-11-24-at-23.44.40-650x433.png" alt="Screenshot of our module in the CloudFormation Console. One of the tabs has a list of resources the module will create." width="650" height="433" srcset="https://cloudar.be/wp-content/uploads/2020/11/Screenshot-2020-11-24-at-23.44.40-650x433.png 650w, https://cloudar.be/wp-content/uploads/2020/11/Screenshot-2020-11-24-at-23.44.40-1300x867.png 1300w, https://cloudar.be/wp-content/uploads/2020/11/Screenshot-2020-11-24-at-23.44.40-325x217.png 325w" sizes="auto, (max-width: 650px) 100vw, 650px" /></h2>
<h2>Using our module</h2>
<p>This is where it gets really interesting, we are going to use the module we created. We made a template with one resource (<a href="https://github.com/WeAreCloudar/cloudformation-samples/blob/master/modules/cloudar_generic_staticwebsite/example-template.yaml">see Github for the full template</a>):</p>
<pre>Resources:
  StaticWebsite:
    Type: "Cloudar::Generic::StaticWebsite::MODULE"
    Properties:
      DomainName: !Ref DomainName
      HostedZoneId: !Ref HostedZoneId

</pre>
<p>CloudFormation will expand that for us, and put every resource that we defined in our module in our processed template.</p>
<p>After waiting for our deployment to finish, we can see all created resources and both our original and the processed template in the CloudFormation console.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-18133" src="https://cloudar.be/wp-content/uploads/2020/11/Screenshot-2020-11-24-at-23.52.03-650x433.png" alt="Screenshot of the CloudFormation Console with the processed template visible" width="650" height="433" srcset="https://cloudar.be/wp-content/uploads/2020/11/Screenshot-2020-11-24-at-23.52.03-650x433.png 650w, https://cloudar.be/wp-content/uploads/2020/11/Screenshot-2020-11-24-at-23.52.03-1300x867.png 1300w, https://cloudar.be/wp-content/uploads/2020/11/Screenshot-2020-11-24-at-23.52.03-325x217.png 325w" sizes="auto, (max-width: 650px) 100vw, 650px" /></p>
<h2>Next steps</h2>
<p>We&#8217;re very excited about this new release and are looking forward to seeing where this might lead. We also have a list of things we think might improve this even more (like an AWS::ModuleName pseudo-parameter), and will probably start conversations about that on the <a href="https://github.com/aws-cloudformation/aws-cloudformation-coverage-roadmap">roadmap</a> or <a href="https://github.com/aws-cloudformation/cloudformation-cli/issues">issue tracker</a> soon.</p>
<p>The post <a href="https://cloudar.be/awsblog/aws-cloudformation-modules-a-first-look/">AWS CloudFormation Modules: A first look</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Level up your CloudFormation usage with these 4 tips</title>
		<link>https://cloudar.be/awsblog/level-up-your-cloudformation-usage-with-these-4-tips/</link>
		
		<dc:creator><![CDATA[Ben Bridts]]></dc:creator>
		<pubDate>Mon, 26 Oct 2020 11:22:33 +0000</pubDate>
				<category><![CDATA[AWS Blog]]></category>
		<category><![CDATA[DevOps]]></category>
		<guid isPermaLink="false">https://www.cloudar.be/?p=18087</guid>

					<description><![CDATA[<p>If you have been building on AWS, you are probably familiar with CloudFormation. It can be an extensive service to learn thoroughly, so even when you&#8217;re familiar with writing templates, there might still be some features you didn&#8217;t use yet. This blog post will highlight something you might not know yet in four different domains: [&#8230;]</p>
<p>The post <a href="https://cloudar.be/awsblog/level-up-your-cloudformation-usage-with-these-4-tips/">Level up your CloudFormation usage with these 4 tips</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>If you have been building on AWS, you are probably familiar with CloudFormation. It can be an extensive service to learn thoroughly, so even when you&#8217;re familiar with writing templates, there might still be some features you didn&#8217;t use yet.</p>
<p>This blog post will highlight something you might not know yet in four different domains: writing templates, securing deployments, usability, and extensibility. Hopefully, this allows you to do even more with CloudFormation</p>
<h3>CloudFormation Linting</h3>
<p>One of the best ways to increase your CloudFormation productivity is to minimize the time you&#8217;re waiting on a stack that failed to deploy. A great way to do that is to use <a href="https://github.com/aws-cloudformation/cfn-python-lint">cfn-lint</a> to make sure you don&#8217;t start the deploy if there are errors in your template.</p>
<p>Other tools like <a href="https://github.com/stelligent/cfn_nag">cfn-nag</a>, <a href="https://github.com/aws-cloudformation/cloudformation-guard">cfn-guard</a>, or <a href="https://github.com/aws-quickstart/taskcat">taskcat</a> will help you write secure, compliant, and region-independent templates, respectively. Cfn-lint is the one that will save you the most time when authoring templates by flagging misconfigurations, invalid properties, and misformatted templates. It also is easy to integrate into your IDE, <a href="https://pre-commit.com/">pre-commit</a>, or a CI/CD pipeline.</p>
<p>If you&#8217;re already using it, I don&#8217;t need to convince you of its value. I do, however, have some tips for getting the most out of it.</p>
<ul>
<li>You can include experimental rules with <code>--include-experimental</code>.</li>
<li>You can add your own checks (written in python) with <code>--append-rules</code></li>
<li>You can enable more built-in rules with <code>--include-checks I</code>. The I stands for info. One of these informational checks that I find very useful is a warning if a resource that might contain state has no <code>UpdateReplacePolicy</code>/<code>DeletionPolicy</code>.</li>
</ul>
<p>Another cool feature is that the linter can create a resource graph from your template. This is used by the tool to indicate when you write a circular dependency. It&#8217;s just as useful to resolve those circles or create a visual representation of your template.</p>
<h3>IAM Integration</h3>
<p>There are also some features of CloudFormation itself that I want to highlight. The first is how you can leverage its integration with IAM to prevent people from skipping the infrastructure-as-code step without completely locking down the account.</p>
<p>One way to accomplish that is to use a CloudFormation Service Role tied to your stack. This way, you can give minimal permission to your users and more broad permissions to CloudFormation. If you&#8217;re using ServiceCatalog to deploy infrastructure, you&#8217;re probably doing something very similar. This solution comes with some IAM complexity. The person creating the stack needs the <code>iam:PassRole</code> permission, but once set up, everyone who can update the stack will do so with that Role assumed by CloudFormation (whether you want that depends on your use case).</p>
<p>If you do not want to think about the effects of <code>iam:PassRole</code>, you can use the <code>aws:CalledVia</code> IAM condition in the IAM policy of the person using CloudFormation. Being an IAM condition comes with its own set of challenges, but you might be more familiar with those.</p>
<p>You use this method by specifying that certain actions are only allowed if the <code>aws:CalledVia</code> key is present and set to CloudFormation, and IAM will deny every request going directly to the service. <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia">The documentation has a helpful diagram</a><br />
.</p>
<h3>Parameter Validation</h3>
<p>When using CloudFormation to deploy infrastructure, you can make it easier to put in the right parameters by using <code>AllowedPattern</code> and <code>AllowedValues</code>. Both of these only consider one parameter at a time. There is a way to validate Parameters that have a relationship with other parameters, though. Because you might want to validate that two parameters are mutually exclusive or that if one parameter is set, another parameter also has to have a value.</p>
<p>This is probably the most hidden CloudFormation feature because it&#8217;s <a href="https://docs.aws.amazon.com/servicecatalog/latest/adminguide/reference-template_constraint_rules.html">documented in the Service Catalog documentation</a>. And even though the Rules section seems to be a Service Catalog feature, you can use it directly in CloudFormation too. <a href="https://cloudar.be/awsblog/undocumented-feature-using-template-constraint-rules-in-cloudformation/">I wrote more about that in a previous blog post</a>.</p>
<h3>Resource Providers</h3>
<p>And this blogpost would not be complete without mentioning resource providers. Giving a full example of writing one would be <a href="https://cloudar.be/awsblog/writing-an-aws-cloudformation-resource-provider-in-python-step-by-step/">its own post</a>. Still, I&#8217;d like to show how this successor to custom resources has a lot of potential.</p>
<p>Resource Providers work similar to Custom Resources, and you will not see a big difference in your templates. They should be easier to manage, though (once they can be deployed with CloudFormation &#8211; <a href="https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation">the CloudFormation team is actively working on that</a>). When you write your own Resource Provider, you also implement and expose a Read and List handler. This new approach gives you almost the same capabilities as a native CloudFormation resource.</p>
<p>By creating resource providers, modern features like <a href="https://aws.amazon.com/about-aws/whats-new/2020/10/aws-cloudformation-drift-detection-supports-cloudformation-registry-resource-types/">drift detection</a> and <a href="https://aws.amazon.com/about-aws/whats-new/2020/06/aws-cloudformation-resource-import-supports-cloudformation-registry-types/">resource import</a> work with your own resources – and will work with every new resource that AWS releases support for.</p>
<p>There is also <a href="https://aws.amazon.com/about-aws/whats-new/2020/06/aws-config-integrates-aws-cloudformation-registry/">an integration with AWS Config</a> for your Resource Providers, and AWS is <a href="https://github.com/search?q=topic%3Aaws-resources+org%3Aaws-cloudformation&amp;type=Repositories">developing more and more resource providers in the open</a>.</p>
<h3>Go build</h3>
<p>We looked at 4 different ways to improve your CloudFormation experience, and I&#8217;m looking forward to hearing your favorite tips and tricks. Good luck making things!</p>
<p>The post <a href="https://cloudar.be/awsblog/level-up-your-cloudformation-usage-with-these-4-tips/">Level up your CloudFormation usage with these 4 tips</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Infrastructure as Code : CloudFormation in practice (webinar recording)</title>
		<link>https://cloudar.be/awsblog/infrastructure-as-code-cloudformation-in-practice-webinar-recording/</link>
		
		<dc:creator><![CDATA[Ben Bridts]]></dc:creator>
		<pubDate>Tue, 02 Jun 2020 11:55:07 +0000</pubDate>
				<category><![CDATA[AWS Blog]]></category>
		<category><![CDATA[DevOps]]></category>
		<guid isPermaLink="false">https://www.cloudar.be/?p=17977</guid>

					<description><![CDATA[<p>Here at Cloudar we&#8217;ve been working with and writing about CloudFormation since we started deploying things on AWS. Recently we teamed up with Patrick Sard, a Solutions Architect at AWS, to give a webinar about how to get the most out of this Infrastructure as Code service.  The recording of that webinar is now available [&#8230;]</p>
<p>The post <a href="https://cloudar.be/awsblog/infrastructure-as-code-cloudformation-in-practice-webinar-recording/">Infrastructure as Code : CloudFormation in practice (webinar recording)</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Here at Cloudar we&#8217;ve been working with and writing about CloudFormation since we started deploying things on AWS. Recently we teamed up with Patrick Sard, a Solutions Architect at AWS, to give a webinar about how to get the most out of this Infrastructure as Code service.  The recording of that webinar is now available and you can watch it here:</p>
<p><iframe loading="lazy" src="https://www.youtube.com/embed/aVLJEkSPmvw" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>The post <a href="https://cloudar.be/awsblog/infrastructure-as-code-cloudformation-in-practice-webinar-recording/">Infrastructure as Code : CloudFormation in practice (webinar recording)</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
