0
0

More than 1 year has passed since last update.

AWS日記27 (AWS Secrets Manager)

Last updated at Posted at 2021-05-31

はじめに

今回は AWS Secrets Manager を試します。
パスワードを自動生成して Lambda 上で参照します。
[Lambda関数・SAMテンプレート]
(https://github.com/tanaka-takurou/serverless-secrets-manager-page-go)

準備

AWS SAM の準備をします

[AWS Secrets Managerの資料]
AWS Secrets Manager

AWS SAM テンプレート作成

AWS SAM テンプレートで API-Gateway , Lambda, AWS Secrets Manager の設定をします。

[参考資料]
AWS SAM テンプレートを作成する

AWS Secrets Managerの設定は以下の部分

  SampleSecret:
    Type: AWS::SecretsManager::Secret
    Properties:
      GenerateSecretString:
        GenerateStringKey: password
        PasswordLength: 32
        SecretStringTemplate: '{}'
        IncludeSpace: false
        ExcludeLowercase: false
        ExcludeUppercase: false
        ExcludeNumbers: false
        ExcludePunctuation: true

Lambda関数作成

※ Lambda関数は aws-lambda-go を利用しました。
AWS Secrets Manager の操作は aws-sdk-go-v2/service/secretsmanager を利用しました。

Secrets Manager のデータを取得するには GetSecretValue を使う

func getSecret(ctx context.Context)(string, error) {
	if secretsmanagerClient == nil {
		secretsmanagerClient = secretsmanager.NewFromConfig(getConfig(ctx))
	}
	input := &secretsmanager.GetSecretValueInput{
		SecretId: aws.String(os.Getenv("SECRET_ID")),
	}

	result, err := secretsmanagerClient.GetSecretValue(ctx, input)
	if err != nil {
		log.Print(err)
		return "", err
	}
	resultJson, err := json.Marshal(SecretData{
		SecretName: aws.ToString(result.Name),
		SecretString: aws.ToString(result.SecretString),
		CreatedDate: result.CreatedDate.Format(layout),
	})
	if err != nil {
		log.Print(err)
		return "", err
	}
	return string(resultJson), nil
}

終わりに

Secrets Manager のパスワードを自動生成し、Lambda上で参照出来るようにしました。

参考資料
[CloudFormationでパスワードを自動生成してテンプレート内で利用する](https://dev.classmethod.jp/articles/automatically-generate-a-password-with-cloudformation/)

【初心者】AWS Secrets Manager と AWS Systems Manager Parameter Store を使ってみる

AWS CloudFormation でのシークレット作成の自動化

GoでSecrets Managerに保存したSlackトークンを使ってSlackへメッセージ送る

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0