Comment puis-je configurer un compartiment Amazon S3 central pour la journalisation de Session Manager à partir de plusieurs comptes ?

Lecture de 8 minute(s)
0

Je souhaite configurer la journalisation centralisée Amazon Simple Storage Service (Amazon S3) pour Session Manager, une fonctionnalité d'AWS Systems Manager, pour mes comptes AWS.

Brève description

Dans Systems Manager, vous pouvez identifier et configurer la journalisation Amazon S3 pour Session Manager. 

Pour commencer

AWS Systems Manager Agent (SSM Agent) utilise le même rôle AWS Identity and Access Management (IAM) pour s'activer et charger les journaux vers Amazon S3. Vous pouvez utiliser un profil d'instance IAM associé à une instance Amazon Elastic Compute Cloud (Amazon EC2) ou le rôle IAM configuré pour la configuration de gestion des hôtes par défaut.

Vous devez disposer des autorisations suivantes pour effectuer la configuration :

  • Le compte propriétaire du principal IAM utilisé pour les autorisations doit accorder des autorisations à Amazon S3 par le biais d'une politique IAM.
  • Le propriétaire du compartiment S3 doit également accorder des autorisations à tous les comptes par le biais d'une politique de compartiment ou d'une liste de contrôle d'accès (ACL).
  • Si le compartiment est chiffré à l'aide d'une clé AWS Key Management Service (AWS KMS), vous devez créer et utiliser une politique IAM.

Remarque :

  • vous devez associer la politique IAM au rôle qui accorde les autorisations à l'agent SSM.
  • La clé KMS utilisée pour chiffrer le compartiment doit également accorder l'autorisation par le biais de la politique de clé KMS.

Pour configurer la journalisation centralisée du compartiment Amazon S3 pour Session Manager, identifiez d'abord le compte principal propriétaire de votre compartiment S3 centralisé. Dans l'exemple suivant, le compte A est propriétaire du compartiment centralisé.

Ensuite, procédez comme suit :

  1. Dans le compte A, créez une ou deux clés AWS KMS personnalisées et une politique KMS personnalisée.
  2. Dans le compte A, créez un compartiment S3 pour la journalisation de Session Manager.
  3. Dans le compte A, créez la politique de ressources pour le compartiment S3.
  4. Dans un autre compte, créez une politique IAM pour accorder des autorisations au compartiment S3 et aux deux clés KMS.
  5. (Facultatif) Utilisez les profils shell de Session Manager pour créer et configurer la journalisation.
  6. Vérifiez que la journalisation de Session Manager est configurée pour les compartiments de destination et qu'elle utilise la clé KMS.
  7. Vérifiez que les journaux sont générés dans le compartiment.

Résolution

Remarque : pour étendre les autorisations, l'exemple de processus suivant utilise des clés de condition pour les rôles et AWS Organizations. Si vous avez besoin d'un contrôle supplémentaire des autorisations, il est recommandé d'utiliser les rôles principaux dans Session Manager.

Ce processus utilise les autorisations clés suivantes :

  • La politique IAM gérée par AWS AmazonSSMManagedInstanceCore pour fournir des autorisations de Systems Manager.
  • L'autorisation s3:GetEncryptionConfiguration pour décrire la configuration de chiffrement sur le compartiment S3.
  • Les autorisations s3:PutObject et s3:PutObjectAcl pour placer des objets chiffrés dans le compartiment S3.
  • Les autorisations kms:Decrypt et kms:GenerateDataKey permettent d'accéder aux clés KMS lors de l'accès aux compartiments et à Session Manager.
  • L'autorisation aws:PrincipalOrgID: o-xxxxxxx pour autoriser un accès restreint à tout responsable ne correspondant pas à l'identifiant des organisations.

Prérequis

Vous devez être connecté aux points de terminaison pour les services suivants :

  • Amazon S3
  • AWS KMS
  • Systems Manager et les messages Systems Manager
  • Messages Amazon EC2

Création des clés KMS

Tout d'abord, créez une ou deux clés.

  • Si vous créez une clé, utilisez-là (clé 1) pour le chiffrement S3 dans le compartiment de journalisation de Session Manager et le chiffrement KMS des préférences de Session Manager.
  • Si vous créez deux clés, utilisez la première clé KMS (clé 1) pour chiffrer le compartiment S3 à des fins de journalisation. Utilisez la deuxième clé KMS (clé 2) pour chiffrer le flux de Session Manager vers le compartiment Amazon S3.

Puis, créez la clé Sid pour chaque clé. Veillez à ajouter l'élément Sid à votre politique KMS pour chaque clé.

Pour permettre à Session Manager de chiffrer la session, ajoutez les autorisations suivantes aux organisations :

**Remarque :**remplacez la valeur aws:PrincipalOrgID par l'identifiant de votre organisation et l'ARN principal.

{  
    "Effect": "Allow",  
    "Principal": {  
        "AWS": "*"  
    },  
    "Action": [  
        "kms:Decrypt",  
        "kms:GenerateDataKey"  
    ],  
    "Resource": "*",  
    "Condition": {  
        "StringEquals": {  
            "aws:PrincipalOrgID": "o-xxxxxxx"  
        }  
    }  
}

Créer un compartiment S3 pour vous connecter au compte A

Créez un compartiment Amazon S3 pour enregistrer les données de Session Manager dans le compte A. Assurez-vous de nommer le compartiment, par exemple, customer_session_manager_logging_bucket. Lorsque vous choisissez le chiffrement, utilisez la clé 1.

Créer la politique de ressources pour le compartiment S3

Appliquez la politique de ressources suivante au compartiment que vous utilisez pour enregistrer vos sessions.

Pour utiliser une clé de condition pour PrincipalOrgId afin de restreindre l'accès au compartiment S3, ajoutez la politique de ressources suivante à votre compartiment S3 :

Remarque : cette politique rejette les demandes d'accès émanant d'un responsable extérieur à votre organisation.

{  
    "Version": "2012-10-17",  
    "Statement": [  
        {  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": "*"  
            },  
            "Action": "s3:GetEncryptionConfiguration",  
            "Resource": "arn:aws:s3:::customer_session_manager_logging_bucket",  
            "Condition": {  
                "StringEquals": {  
                    "aws:PrincipalOrgID": "o-xxxxxxxxxxxxxx"  
                }  
            }  
        },  
        {  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": "*"  
            },  
            "Action": [  
                "s3:PutObject",  
                "s3:PutObjectAcl"  
            ],  
            "Resource": "arn:aws:s3:::customer_session_manager_logging_bucket/*",  
            "Condition": {  
                "StringEquals": {  
                    "aws:PrincipalOrgID": "o-xxxxxxxxxxxxx"  
                }  
            }  
        }  
    ]  
}

Créer une politique IAM

Tout d'abord, créez une politique IAM pour accorder des autorisations au compartiment S3 et aux clés.

Associez l'exemple de politique suivant à votre profil d'instance à utiliser sur les comptes que vous souhaitez connecter. Vous pouvez utiliser une politique intégrée ou une politique gérée par le client pour joindre la politique :

{  
    "Version": "2012-10-17",  
    "Statement": [  
        {  
            "Sid": "PutObjectsBucket",  
            "Action": [  
                "s3:PutObject",  
                "s3:PutObjectAcl"  
            ],  
            "Effect": "Allow",  
            "Resource": "arn:aws:s3:::customer_session_manager_logging_bucket/*"  
        },  
        {  
            "Sid": "ListBucketAndEncryptionConfig",  
            "Action": [  
                "s3:GetEncryptionConfiguration"  
            ],  
            "Effect": "Allow",  
            "Resource": "arn:aws:s3:::customer_session_manager_logging_bucket"  
        },  
        {  
            "Sid": "S3KMSSessionManagerKMS",  
            "Effect": "Allow",  
            "Action": [  
                "kms:Decrypt",  
                "kms:GenerateDataKey*"  
            ],  
            "Resource": [  
                "arn:aws:kms:us-east-1:ACCOUNTId:key/YOUR-KMS-FOR-SessionManagerEncryption",  
                "arn:aws:kms:us-east-1:ACCOUNTID:key/YOUR-KMS-FOR-S3BucketEncryption"  
            ]  
        }  
    ]  
}

(Facultatif) Utiliser les profils shell de Session Manager pour créer et configurer la journalisation

Pour créer un profil shell personnalisé, créez d'abord un fichier. Enregistrez ensuite le fichier sous un nom de description, par exemple SessionManagerRunShell.json. Remplacez le contenu de ce fichier .json par l'exemple suivant :

Remarque : remplacez customer_session_manager_logging_bucket par le nom de votre compartiment et YOUR-KMS-FOR-SessionManagerEncryption par la clé que vous avez désignée pour Session Manager.

{  
"schemaVersion": "1.0",  
"description": "Document to hold regional settings for Session Manager",  
"sessionType": "Standard_Stream",  
"inputs": {  
"s3BucketName": "customer_session_manager_logging_bucket",  
"s3KeyPrefix": "",  
"s3EncryptionEnabled": true,  
"cloudWatchLogGroupName": "",  
"cloudWatchEncryptionEnabled": false,  
"cloudWatchStreamingEnabled": false,  
"kmsKeyId": "arn:aws:kms:REGION:ACCOUNTID:key/YOUR-KMS-FOR-SessionManagerEncryption",  
"runAsDefaultUser": "",  
"idleSessionTimeout": "20",  
"maxSessionDuration": "",  
"shellProfile": {"windows": "", "linux": ""}  
  }  
}

Exécutez les commandes suivantes pour enregistrer ce fichier en tant que document Session Manager par défaut :

aws ssm update-document --name "SSM-SessionManagerRunShell"   
--content "file://SessionManagerRunShell.json"   
--document-version "$LATEST"

Vérifier que la journalisation de Session Manager est configurée pour les compartiments de destination et qu'elle utilise la clé KMS

Ouvrez le compartiment S3 et vérifiez que Chiffrement du compartiment est activé. Vérifiez l'ARN KMS pour vous assurer que Session Manager utilise la clé 1.

Remarque : lors de la configuration de la journalisation intercompte de Session Manager, il est recommandé d'utiliser un préfixe correspondant à l'identifiant du compte. Cela vous permet de suivre les comptes et leurs journaux associés.

Pour vérifier les préférences de Session Manager, procédez comme suit :

  1. Ouvrez la console Session Manager, puis choisissez votre région AWS.
  2. Vérifiez que le chiffrement du compartiment S3 est activé, puis saisissez l'ARN de la clé 1 qui se trouve dans le compte A.
  3. Dans le compartiment S3, saisissez le nom du compartiment S3 qui se trouve dans le compte A.

Vérifier que les journaux sont générés dans le compartiment

Pour générer des journaux, utilisez Session Manager d'un autre compte pour vous connecter à votre instance.

Procédez comme suit :

  1. Ouvrez la console Session Manager, puis choisissez votre région.
  2. Vérifiez que la session est connectée et que le message suivant s'affiche : « Cette session est cryptée avec AWS KMS. »
  3. Saisissez quelques entrées de test pour générer les journaux, puis fermez votre session.
  4. Dans le compte A, accédez au compartiment S3 que vous avez créé pour la journalisation et recherchez les derniers journaux par heure.

Remarque : une fois la session déconnectée, le remplissage des journaux peut prendre au moins 30 secondes. Pour plus d'informations, reportez-vous à Journalisation des demandes à l'aide de la journalisation des accès au serveur.

Informations connexes

Protection des données grâce au chiffrement côté serveur

Actions, ressources et clés de condition pour Amazon S3

Exemples de politiques relatives aux compartiments

Directives relatives aux politiques d'accès

Autoriser un utilisateur à chiffrer et à déchiffrer avec des clés KMS spécifiques

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 10 mois