[PYTHON] Passer des informations confidentielles de SSM à ECS avec CloudFormation

Infomation Source Il a été publié il y a quelque temps, mais cela fait moins d'un an, alors je vais écrire de quel type de mise à jour il s'agit.

CloudFormation Release List 2019/6/13 Release Features

AWS::ECS::TaskDefinition Les propriétés suivantes sont disponibles pour le type de propriété ContainerDefinition: --Utilisez la propriété Secrets pour spécifier les secrets à transmettre au conteneur. Utilisez la propriété Tags pour l'appliquer à votre définition de tâche afin de vous aider à classer et organiser vos métadonnées.

What's new?

Mise à jour de la façon d'obtenir des informations sensibles à partir du secret Secrets Manager ou du magasin de paramètres SSM dans les définitions de tâches ECS

Before

Ne peut être défini qu'à partir de JSON ou de la console Web

After

Peut également être défini dans CloudFormation

↓ En d'autres termes

Complet avec CloudFormation, y compris les définitions de tâches ainsi que les définitions de cluster et de service

\ Je suis heureux /

How

Si vous extrayez uniquement la partie pertinente, cela ressemblera à ceci

sample1.yml


Resources:
  taskDefinition:
    Properties:
      ContainerDefinitions:
          Secrets:
            - Name: HOGE
              ValueFrom: hoge

Toute la définition de la tâche ressemble à ceci

sample2.yml


AWSTemplateFormatVersion: 2010-09-09
Parameters:
Abréviation

Resources:
  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      RequiresCompatibilities:
        - FARGATE
      Cpu: 256
      Memory: 512
      ExecutionRoleArn: ecsTaskExecutionRole
      Family: !Ref TaskFamilyName
      NetworkMode: awsvpc
      ContainerDefinitions:
        - Name: !Ref TaskFamilyName
          Image: !Sub ${AWS::AccountId}.dkr.ecr.ap-northeast-1.amazonaws.com/hoge
          Command: !Ref TaskCommand
          MemoryReservation: 128
          ReadonlyRootFilesystem: true
          Secrets:
            - Name: SECURE_TEST_STRING
              ValueFrom: secure_test_string
          LogConfiguration:
            LogDriver: awslogs
            Options:
              awslogs-group: !Ref TaskLogsGroup
              awslogs-region: ap-northeast-1
              awslogs-stream-prefix: ecs

Try

Enregistrez secure_test_string et sa valeur dans le magasin de paramètres SSM. image.png

Et par exemple, si vous écrivez du code python à exécuter sur ECS comme celui-ci, vous pouvez recevoir la valeur.

sample3.py


from logging import getLogger
from os import environ as env

logger = getLogger(__name__)

logger.info('hoge / ' + env['SECURE_TEST_STRING'])

Résultat du déploiement et de l'exécution ↓ image.png

Vous pouvez l'obtenir: tada:

FYI https://aws.amazon.com/jp/blogs/news/securing-credentials-using-aws-secrets-manager-with-aws-fargate/ https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-secret.html

Recommended Posts

Passer des informations confidentielles de SSM à ECS avec CloudFormation
Collecter des informations sur Twitter avec Python (API Twitter)
Convertir de PDF en CSV avec pdfplumber
Collecter des informations depuis Twitter avec Python (construction de l'environnement)
Sauvegarde de QNAP vers Linux avec rsync
De la construction d'environnement Python à la construction d'environnement virtuel avec anaconda
Sélectionnez PDFMiner pour extraire les informations textuelles du PDF
Script Python pour obtenir des informations de note avec REAPER
Parfois, vous souhaitez accéder aux informations de vue depuis Serializer avec DRF (Django REST Framework)