何がわかるか
シークレット情報などを保存するためのSSM Parameter StoreとSecrets Managerについて
AWSCLIでシークレットを作成し、RubyやRailsなどのアプリケーションで簡単に取得する方法を書きたいと思います。
ちなみにParameter Storeは条件付きで無料で使えて、Secrets Managerは最初から有料みたいです。
また、Parameter StoreはKMSを使用する場合は有料になります。
AWSのParameter StoreとSecrets Manager、結局どちらを使えばいいのか?比較
環境
Ruby: 2.5.7
aws-cli: 2.0.7
前提
- aws-cliをinstallしていること
- IAMユーザにParameter StoreとSecrets Managerの必要な権限(createとget)が備わっていること
SSM Parameter Store
gemを入れてbundle install
gem 'aws-sdk-ssm'
aws-cliでparameterを作成します
$ aws ssm put-parameter --name "<パラメータ名>" --type String --value "<パラメータの値>"
暗号化したい場合はtypeをSecureStringにしてください。--keyでkmsキーを指定することもできます。
あと、上書きしたい場合は--overwriteを付けるだけで大丈夫です。
moduleの作成
parameter_store.rb
require 'aws-sdk-ssm'
AWS_REGION = '<リージョンを入れる>'
module ParameterStore
def self.request(name)
client = Aws::SSM::Client.new(region: AWS_REGION)
# KMSで暗号化している場合はwith_decryption: true
client.get_parameter({ name: name, with_decryption: false })
end
end
後は取得するだけです
# 生rubyの場合
require 'parameter_store.rb'
parameter = ParameterStore.request('/hoge')
puts parameter
#=> "<値>"
Secrets Manager
gemを入れてbundle install
gem 'aws-sdk-secretsmanager'
aws-cliでsecretを作成します
$ aws secretsmanager create-secret --name "<シークレット名>" --description "<説明>" --secret-string "<シークレットの値>"
moduleの作成
secrets_manager.rb
require 'aws-sdk-secretsmanager'
AWS_REGION = '<リージョンを入れる>'
module SecretsManager
def self.request(secret_name)
client = Aws::SecretsManager::Client.new(region: AWS_REGION)
get_secret_value_response = client.get_secret_value(secret_id: secret_name)
get_secret_value_response.secret_string
end
end
後は取得するだけです
# 生rubyの場合
require 'secrets_manager.rb'
secret = SecretsManager.request('/hoge')
puts secret
#=> "<値>"
まとめ
簡単に導入できるので試してみてください!