Clause de non-responsabilité: Toutes les vues et opinions exprimées dans le blog appartiennent uniquement à l’auteur et pas nécessairement à l’employeur de l’auteur ou à tout autre groupe ou individu. Il ne s’agit pas d’une promotion d’un service, d’une fonctionnalité ou d’une plate-forme.
Dans mon article précédent sur l’observabilité inter-comptes CloudWatch(CW) pour AWS Organization, j’ai fourni un guide étape par étape sur la configuration de la visibilité et de l’observabilité multi-comptes à l’aide d’une nouvelle fonctionnalité appelée observabilité inter-comptes CloudWatch à l’aide d’AWS. Console. Dans cet article, je fournirai un guide étape par étape sur la façon dont vous pouvez automatiser l’observabilité entre comptes CloudWatch pour votre organisation AWS à l’aide de Terraform et d’un modèle CloudFormation.
Veuillez vous référer à mon article précédent sur ce sujet pour une meilleure compréhension des concepts tels que les comptes de surveillance et les comptes sources.
Surveillance de la configuration du compte
Pour surveiller la configuration du compte, une combinaison de Terraform et CloudFormation est choisie comme aws_oam_sink et aws_oam_link. Les ressources ne sont pas encore disponibles dans terraform-provider-aws au 26 février 2023. Veuillez vous référer au problème GitHub.
De plus, le terraform-provider-awscc a un bogue ouvert (au 26 février 2023) qui échoue lors de l’application de la politique Sink. Veuillez vous référer au lien du problème GitHub pour plus de détails.
Code Terraform qui crée le récepteur OAM dans le compte AWS de surveillance
N’hésitez pas à personnaliser le code pour modifier les fournisseurs et les balises ou modifier les conventions de dénomination selon les normes de votre organisation.
fournisseur.tf
N’hésitez pas à modifier le fournisseur AWS en fonction de votre compte AWS, de votre région et de vos besoins d’authentification/autorisation. Reportez-vous à la documentation du fournisseur AWS pour plus de détails sur la configuration du fournisseur pour la plate-forme AWS.
provider "aws" {
region = "us-east-1"
assume_role {
role_arn = "arn:aws:iam::MONITORING-ACCOUNT-NUMBER:role/YOUR-IAM-ROLE-NAME"
}
}
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.53.0"
}
}
}
main.tf
/*
AWS Cloudformation stack resource that runs CFT - oam-sink-cft.yaml
The stack creates a OAM Sink in the current account & region as per provider configuration
Please create the AWS provider configuration as per your environment.
For AWS provider configuration, please refer to https://registry.terraform.io/providers/hashicorp/aws/2.43.0/docs
*/
resource "aws_cloudformation_stack" "cw_sink_stack" {
name = "example"
template_body = file("${path.module}/oam-sink-cft.yaml")
parameters = {
OrgPath = var.org_path
}
tags = var.tags
}
/*
SSM parameter resource puts the CloudWatch Cross Account Observability Sink ARN in the parameter store,
So that the Sink arn can be used from the source account while creating the Link
*/
resource "aws_ssm_parameter" "cw_sink_arn" {
name = "cw-sink-arn"
description = "CloudWatch Cross Account Observability Sink identifier"
type = "SecureString"
value = aws_cloudformation_stack.cw_sink_stack.outputs["ObservabilityAccessManagerSinkArn"]
tags = var.tags
}
variable.tf
variable "tags" {
description = "Custom tags for AWS resources"
type = map(string)
default = {}
}
variable "org_path" {
description = "AWS Organization path that will be allowed to send Metric and Log data to the monitoring account"
type = string
}
Modèle AWS CloudFormation utilisé dans la ressource Terraform « AWS_cloudformation_stack »
Le modèle CloudFormation ci-dessous crée la ressource OAM Sink dans le compte Monitoring. Ce modèle sera utilisé pour créer la CloudFormation Stack dans le compte Monitoring. Assurez-vous de placer le modèle et les fichiers terraform dans le même répertoire.
oam-évier-cft.yaml
AWSTemplateFormatVersion: 2010-09-09
Description: 'AWS CloudFormation Template to
creates or updates a sink in the current account, so that it can be used as a monitoring account in CloudWatch cross-account observability.
A sink is a resource that represents an attachment point in a monitoring account, which source accounts can link to to be able to send observability data.'
Parameters:
OrgPath:
Type: String
Description: 'Complete AWS Organization path for source account configuration for Metric data'
Resources:
ObservabilityAccessManagerSink:
Type: 'AWS::Oam::Sink'
Properties:
Name: "observability-access-manager-sink"
Policy:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal: "*"
Resource: "*"
Action:
- "oam:CreateLink"
- "oam:UpdateLink"
Condition:
ForAnyValue:StringLike:
aws:PrincipalOrgPaths:
- !Ref OrgPath
ForAllValues:StringEquals:
oam:ResourceTypes:
- "AWS::CloudWatch::Metric"
- "AWS::Logs::LogGroup"
Outputs:
ObservabilityAccessManagerSinkArn:
Value: !GetAtt ObservabilityAccessManagerSink.Arn
Export:
Name: ObservabilityAccessManagerSinkArn
Appliquer les modifications dans la plateforme de fournisseur AWS
Une fois que vous avez placé tous les fichiers de modèle terraform et CloudFormation ci-dessus dans le même répertoire, exécutez terraform init
pour installer le fournisseur et les dépendances, puis terraform plan
ou terraform apply
selon que vous souhaitez afficher uniquement les modifications ou afficher et appliquer les modifications dans votre compte AWS. Veuillez consulter le site Web de Hashicorp pour plus de détails sur les commandes terraform.
Quand tu cours terraform apply
ou terraform plan
commande, vous devez saisir la org_path
valeur. Assurez-vous de fournir le chemin d’accès complet de l’organisation AWS pour permettre au(x) compte(s) AWS sous ce chemin d’envoyer les données de métrique et de journal au compte de surveillance. Par exemple, si vous souhaitez autoriser tous les comptes AWS à envoyer les données de métrique et de journal au compte de surveillance sous l’unité d’organisation (OU) ou-0dsf-dasd67asd
(en supposant que l’unité d’organisation se trouve directement sous le compte racine dans la hiérarchie de l’organisation), la valeur org_path devrait ressembler à ORGANIZATION_ID/ROOT_ID/ou-0dsf-dasd67asd/*
. Pour plus d’informations sur la façon de définir le chemin de l’organisation, veuillez vous reporter à la documentation AWS.
Une fois la org_path
la valeur est fournie (vous pouvez également utiliser le fichier tfvars pour fournir les valeurs des variables), et terraform apply
réussit, vous devriez voir que le compte AWS est désigné comme compte de surveillance en accédant aux paramètres CloudWatch dans la console CloudWatch.
Configuration du compte source
Pour la configuration du compte source, nous pouvons utiliser le terraform-provider-awscc
car la ressource de lien fonctionne parfaitement. Également aws_oam_sink
et aws_oam_link
les ressources ne sont pas encore disponibles dans le terraform-provider-aws
au 26 février 2023. Veuillez vous référer au problème GitHub.
Code Terraform qui crée le lien OAM dans le compte AWS source
N’hésitez pas à personnaliser le code pour modifier le fournisseur et les balises ou modifier les conventions de dénomination selon les normes de votre organisation.
fournisseur.tf
N’hésitez pas à modifier le fournisseur AWSCC en fonction de votre compte AWS, de votre région et de vos besoins d’authentification/autorisation. Reportez-vous à la documentation du fournisseur AWSCC pour plus de détails sur la configuration du fournisseur.
provider "aws" {
region = "us-east-1"
assume_role {
role_arn = "arn:aws:iam::MONITORING-ACCOUNT-NUMBER:role/IAM-ROLE-NAME"
}
}
provider "awscc" {
region = "us-east-1"
assume_role = {
role_arn = "arn:aws:iam::SOURCE-ACCOUNT-NUMBER:role/IAM-ROLE-NAME"
}
}
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.53.0"
}
awscc = {
source = "hashicorp/awscc"
version = "0.45.0"
}
}
}
main.tf
/*
Link resource to create the link between the source account and the sink in the monitoring account
*/
resource "awscc_oam_link" "cw_link" {
provider = awscc
label_template = "$AccountName"
resource_types = ["AWS::CloudWatch::Metric", "AWS::Logs::LogGroup"]
sink_identifier = data.aws_ssm_parameter.cw_sink_arn.value
}
/*
SSM parameter data block retrieves the CloudWatch Cross Account Observability Sink ARN from the parameter store,
So that the Sink arn can be associated with the source account while creating the Link
*/
data "aws_ssm_parameter" "cw_sink_arn" {
provider = aws
name = "cw-sink-arn"
}
Placez les deux fichiers terraform dans le même répertoire et exécutez le terraform init
et puis terraform apply
commandes pour créer le lien entre les comptes source et de surveillance.
Étapes pour valider les modifications d’observabilité entre comptes CloudWatch
Maintenant que les modifications sont appliquées dans les comptes source et de surveillance, il est temps de valider que les groupes de journaux et les données de métrique CloudWatch s’affichent dans le compte de surveillance.
Aller vers Console CloudWatch > Paramètres > Gérer comptes sources dans le compte de surveillance. Vous devriez voir que le nouveau compte source est répertorié et que le journal et la métrique CloudWatch sont partagés avec le compte de surveillance.
Si vous accédez aux groupes de journaux CloudWatch dans le compte de surveillance, vous devriez maintenant voir certains des groupes de journaux du compte source.
De plus, si vous naviguez vers CloudWatch Métriques > Toutes les métriques dans le compte de surveillance, vous devriez maintenant voir certaines des données de métrique du compte source.