Maison  >  Article  >  développement back-end  >  Stratégie correcte pour obtenir des secrets sur une application Go locale

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

WBOY
WBOYavant
2024-02-08 22:42:081100parcourir

在本地 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)
}

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

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>"
        }
    ]
}

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,
}))

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"
            ]
        }
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer