【社内勉強会】
パラメータストアとは
AWS事業本部
2019年2月26日
中山順博
1
2はじめに
最新情報が反映されていなくても
許してください
3
あと、皆さんの意見や
持っている課題を聞きたいです!
4アジェンダ
1. パラメーターストアとは?
2. 使いどころ
3. サポートされているサービス
4. 管理
5. その他
5パラメーターストアとは?
パラメーターを保存する機能
6
Fin.
7
もうちっとだけ続くんじゃ
8パラメーターストア
◼ 設定値やパスワードを集中的に管理する階層型ストレージ
◼ アクセス制御/暗号化が可能
◼ 他のサービスからの参照が容易(後半に詳述)
◼ AMI IDなど、AWSが提供する値もあり
◼ バージョン管理が可能
◼ ラベリングが可能
9階層型ストレージ
名前を階層的に表現
• S3と同じ感じ
• 15階層までOK
• 複数行の文字列もOK
• 例
• /prod/web-server/app1/password
• /prod/app-server/app1/dbconnectionstring
• /stg/web-server/app1/password
• /stg/app-server/app1/dbconnectionstring
• 名前はどのようにアクセス制御したいかを想定して命名すべし
10アクセス制御
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:DescribeParameters"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssm:GetParameters"
],
"Resource": "arn:aws:ssm:us-east-2:123456123:parameter/prod/*"
}
]
}
11AMI ID
AWSが管理するパブリックなパラメータ
• 以下のOSの最新AMIのIDを取得可能(たぶん)
• Windows Server
• https://dev.classmethod.jp/cloud/aws/latest-windows-ami-from-parameter-
store/
• Amazon Linux
• ECS-Optimized AMI (Amazon Linux)
• https://dev.classmethod.jp/cloud/aws/latest-ecs-optimized-ami-id-public-
parameter-store/
12AMI ID(Windows Serverの場合)
{
"InvalidParameters": [],
"Parameters": [
{
"Type": "String",
"Name": "/aws/service/ami-windows-latest/Windows_Server-2016-Japanese-Full-Base",
"Value": "ami-8127f8e7"
}
]
}
$ aws ssm get-parameters ¥
--names /aws/service/ami-windows-latest/Windows_Server-2016-Japanese-Full-Base
13バージョン管理
バージョン管理が可能
デフォルト(バージョン指定なし)では最新版が参照される
過去のバージョンを参照可能
14ラベリング
各バージョンの意味を識別するためのラベルを付与できる
15タグ付け
パラメーターにタグ付け可能
アクセス制御に利用可能
16
使いどころ
17
設定情報/機密情報の管理
18設定情報/機密情報の具体例
設定情報
環境変数
機密情報
ユーザー名/パスワード、データベースへの接続情報
ライセンスコード
Webhook URL
19
なぜ、パラメータストア?
20
疎結合にするため
21
なぜ、疎結合にするのか?
22こんなことありませんか?
 設定ファイルに対して環境固有の値を手作業で設定
 設定ファイルにパスワード/認証情報をハードコード
23Well Architected ?
“設定ファイルに対して環境固有の値を手作業で設定”がYESの
場合
• 同じ環境をデプロイするためにどのくらい時間かかりますか?
(効率性)
• 同じ環境を再現できますか?
(信頼性)
• デプロイをどのくらいの頻度で実施する必要がありますか?
(事業へのインパクト)
ここが小さければ、がんばる意義はあまりない
24Well Architected ?
“設定ファイルにパスワード/認証情報をハードコード”
• 認証情報が漏洩しないように環境を管理できてますか?
→「それ、今すぐOSSにできる?」
(機密性)
25どうしたらいいのか?
この手の問題への対処は、
答えはTwelve-Factor Appにあり?
26The Twelve-Factor Appとは?
“Software as a Serviceを作り上げるための方法論”
• セットアップ自動化のために 宣言的な フォーマットを使い、プロ
ジェクトに新しく加わった開発者が要する時間とコストを最小化
する。
• 下層のOSへの 依存関係を明確化 し、実行環境間での 移植性を最
大化 する。
• モダンな クラウドプラットフォーム 上への デプロイ に適してお
り、サーバー管理やシステム管理を不要なものにする。
• 開発環境と本番環境の 差異を最小限 にし、アジリティを最大化す
る 継続的デプロイ を可能にする。
• ツール、アーキテクチャ、開発プラクティスを大幅に変更するこ
となく スケールアップ できる。
27The Twelve Factors
I. コードベース
バージョン管理されている1つのコードベースと複数のデプロイ
II. 依存関係
依存関係を明示的に宣言し分離する
III.設定
設定を環境変数に格納する
IV. バックエンドサービス
バックエンドサービスをアタッチされたリソースとして扱う
V. ビルド、リリース、実行
ビルド、リリース、実行の3つのステージを厳密に分離する
VI. プロセス
アプリケーションを1つもしくは複数のステートレスなプロセスと
して実行する
VII.ポートバインディング
ポートバインディングを通してサービスを公開する
VIII.並行性
プロセスモデルによってスケールアウトする
IX. 廃棄容易性
高速な起動とグレースフルシャットダウンで堅牢性を最大化する
X. 開発/本番一致
開発、ステージング、本番環境をできるだけ一致させた状態を保つ
XI. ログ
ログをイベントストリームとして扱う
XII.管理プロセス
管理タスクを1回限りのプロセスとして実行する
28
https://12factor.net/ja/
29
パラメータストアを使えば?
30パラメーターストア(再掲)
◼ 設定値やパスワードを集中的に管理する階層型ストレージ
◼ アクセス制御/暗号化が可能
◼ 他のサービスからの参照が容易(後半に詳述)
◼ AMI IDなど、AWSが提供する値もあり
◼ バージョン管理が可能
◼ ラベリングが可能
31
いくつかのFactorには対応できそう!?
32
サポートされているサービス
33サポートしているサービス
Amazon EC2
Amazon Elastic Container Service
AWS Lambda
AWS CloudFormation
AWS CodeBuild
AWS CodeDeploy
Systems Manager(の他の機能)
34Amazon EC2
様々なタイミングでパラメーターを取得
インスタンスの起動時(ユーザーデータ)
プロセスの起動時(AMI作り込み/デプロイ時に設定)
その他(アプリケーションで任意のタイミングに)
権限はIAM Role(インスタンスプロファイル)経由で付与
35Amazon Elastic Container Service
タスク定義に設定するコマンド内や任意のタイミングで取得
権限はIAM Role(タスクロール)経由で付与
参考情報
Managing Secrets for Amazon ECS Applications Using
Parameter Store and IAM Roles for Tasks
https://aws.amazon.com/jp/blogs/compute/managing-secrets-for-
amazon-ecs-applications-using-parameter-store-and-iam-roles-for-
tasks/
36Amazon Elastic Container Service
環境変数としてパラメーターストアを指定可能
権限はIAM Role(タスクロール)経由で付与
参考情報
AWS Launches Secrets Support for Amazon Elastic Container Service
https://aws.amazon.com/jp/about-aws/whats-new/2018/11/aws-launches-
secrets-support-for-amazon-elastic-container-servic/
AWS Systems Manager パラメータストア パラメータを参照するタスク定
義の作成
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/specifyi
ng-sensitive-data.html#secrets-create-taskdefinition
New
37AWS Lambda
任意のタイミングで取得
今はLambda関数に環境変数がある
集中管理したい場合はパラメーターストアを引き続き利用
(Lambda関数が多い場合など)
権限はIAM Role経由で付与
38AWS CloudFormation
パラメーターストアの値を動的に参照
権限は(以下略)
39AWS CloudFormation(例)
MyS3Bucket:
Type: 'AWS::S3::Bucket'
Properties:
AccessControl: '{{resolve:ssm:S3AccessControl:2}}'
40AWS CodeBuild
BuildSpec.yml内のスクリプトで取得
権限(略
参考情報
Using Parameter Store with AWS CodePipeline
https://stelligent.com/2017/03/09/using-parameter-store-with-aws-
codepipeline/
41AWS CodeDeploy
AppSpec.yml内のスクリプトで取得
権(ry
参考情報
Use Parameter Store to Securely Access Secrets and Config
Data in AWS CodeDeploy
https://aws.amazon.com/jp/blogs/mt/use-parameter-store-to-
securely-access-secrets-and-config-data-in-aws-codedeploy/
42The Twelve Factors(再掲)
I. コードベース
バージョン管理されている1つのコードベースと複数のデプロイ
II. 依存関係
依存関係を明示的に宣言し分離する
III.設定
設定を環境変数に格納する
IV. バックエンドサービス
バックエンドサービスをアタッチされたリソースとして扱う
V. ビルド、リリース、実行
ビルド、リリース、実行の3つのステージを厳密に分離する
VI. プロセス
アプリケーションを1つもしくは複数のステートレスなプロセスと
して実行する
VII.ポートバインディング
ポートバインディングを通してサービスを公開する
VIII.並行性
プロセスモデルによってスケールアウトする
IX. 廃棄容易性
高速な起動とグレースフルシャットダウンで堅牢性を最大化する
X. 開発/本番一致
開発、ステージング、本番環境をできるだけ一致させた状態を保つ
XI. ログ
ログをイベントストリームとして扱う
XII.管理プロセス
管理タスクを1回限りのプロセスとして実行する
43
パラメターストアで
どのFactorに対応できそうでしょうか?
考えてみましょう。
44
管理
45
AWS KMS
KMSによる暗号化が可能(参照には復号の権限が必要)
Amazon SNS / Amazon CloudWatch Events
パラメターの変更を通知できる
Amazon CloudWatch
CloudWatch Agentのウィザードにより生成した設定値を保存
AWS CloudTrail
操作の証跡を取得可能
Systems Managerの全てのAPIコールがロギングの対象
46
その他
47Secret Managerとの違いは?
Secret Managerは
• ローテーションできる
• ランダム文字列の生成ができる
パラメーターストアはSecret Managerのパススルーサービ
スとして機能する
• “/aws/reference/secretsmanager”を名前の先頭に付与すると、
SecretManagerを参照する
• パラメータストアを利用するようにアプリを作り込んでいる場合
でも、名前を修正すれば移行は比較的容易
48
まとめ
49まとめ
パラメーターストアによる、設定/機密情報の集中管理
各種サービスからの参照が可能
パラメーターストアの存在意義
(疎結合なアプリケーションへ)
50
パラメーターストアはいいぞ
51
Fin.
52

Parameter store 20190226