Maison > développement back-end > Golang > le corps du texte

Stratégie correcte pour obtenir des secrets sur une application Go locale

WBOY
Libérer: 2024-02-08 22:42:08
avant
1126 Les gens l'ont consulté

在本地 go 应用程序上获取机密的正确策略

l'éditeur php Banana vous propose un article sur la bonne stratégie pour obtenir des secrets dans les applications Go locales. Dans le développement d’applications modernes, la protection de la sécurité des informations sensibles est cruciale. Cet article partagera quelques stratégies efficaces pour aider les développeurs à obtenir et à utiliser correctement des informations confidentielles dans les applications Go natives afin de garantir la confidentialité et l'intégrité des données. Qu'il s'agisse de mots de passe de base de données, de clés API ou d'autres informations sensibles, une gestion et un stockage appropriés sont essentiels pour assurer la sécurité de votre application. Voyons comment gérer les informations confidentielles en toute sécurité !

Contenu de la question

Jeu d'un petit projet sur AWS :

  • application golang
  • Base de données rds/mysql
  • Gestionnaire secret
  • passerelle API et lambda

J'exécute l'application go localement pour vérifier l'interaction avec la base de données, mais je n'arrive pas à la faire fonctionner avec le gestionnaire de secrets.

Utilisez cet exemple de code :

func getcreds() {
    config, err := config.loaddefaultconfig(context.todo(), config.withregion(region))
    if err != nil {
        log.fatal(err)
    }

    svc := secretsmanager.newfromconfig(config)
    input := &secretsmanager.getsecretvalueinput{
        secretid:     aws.string(secretname),
        versionstage: aws.string("awscurrent"),
    }

    result, err := svc.getsecretvalue(context.todo(), input)
    if err != nil {
        log.fatal(err.error())
    }

    var secretstring string = *result.secretstring
    log.printf("pwd: %s", secretstring)
}
Copier après la connexion

Je comprends

operation error secrets manager: getsecretvalue, exceeded maximum number of attempts, 3, failed to sign request: failed to retrieve credentials: failed to refresh cached credentials, no ec2 imds role found, operation error ec2imds
Copier après la connexion

Si je comprends bien, je dois ajouter des autorisations à l'utilisateur/à la stratégie. Mais où ajouter cela ? Dans la console IAM ? Ou la console du gestionnaire de secrets ?

Que devrait-il être ?

L'application
{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Principal": {"AWS": "<what to add here>"},
            "Resource": "<and here>"
        }
    ]
}
Copier après la connexion

Workaround

go ne trouve pas les informations d'identification pour utiliser l'API AWS.

Selon (Configurer les informations d'identification), vous pouvez utiliser ce code pour utiliser automatiquement ~/.aws/config comme informations d'identification locales

sess := session.must(session.newsessionwithoptions(session.options{
    sharedconfigstate: session.sharedconfigenable,
}))
Copier après la connexion

Si vous fournissez une configuration personnalisée, vous devez fournir des informations d'identification. Il existe d'autres méthodes, choisissez celle qui vous convient. aws a proposé la méthode ci-dessus.

Cela inclut l'exécution avec vos utilisateurs. Pour l'exécution d'Aws, vous devez accorder à la fonction lambda l'accès à la clé :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes128-1a2b3c"
            ]
        }
}
Copier après la connexion

La stratégie ci-dessus doit être appliquée au rôle iam utilisé pour exécuter le lambda. Vous pouvez trouver les rôles aws console -> lambda -> votre lambda -> les autorisations d'exécution

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal