Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Parameter store 20190226

2,237 views

Published on

Internal Study Group for AWS in Classmethod, Inc.
2019/2/26
Parameter Store in AWS Systems Manager

Published in: Software
  • Be the first to comment

Parameter store 20190226

  1. 1. 【社内勉強会】 パラメータストアとは AWS事業本部 2019年2月26日 中山順博 1
  2. 2. 2はじめに 最新情報が反映されていなくても 許してください
  3. 3. 3 あと、皆さんの意見や 持っている課題を聞きたいです!
  4. 4. 4アジェンダ 1. パラメーターストアとは? 2. 使いどころ 3. サポートされているサービス 4. 管理 5. その他
  5. 5. 5パラメーターストアとは? パラメーターを保存する機能
  6. 6. 6 Fin.
  7. 7. 7 もうちっとだけ続くんじゃ
  8. 8. 8パラメーターストア ◼ 設定値やパスワードを集中的に管理する階層型ストレージ ◼ アクセス制御/暗号化が可能 ◼ 他のサービスからの参照が容易(後半に詳述) ◼ AMI IDなど、AWSが提供する値もあり ◼ バージョン管理が可能 ◼ ラベリングが可能
  9. 9. 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. 10. 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/*" } ] }
  11. 11. 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/
  12. 12. 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. 13. 13バージョン管理 バージョン管理が可能 デフォルト(バージョン指定なし)では最新版が参照される 過去のバージョンを参照可能
  14. 14. 14ラベリング 各バージョンの意味を識別するためのラベルを付与できる
  15. 15. 15タグ付け パラメーターにタグ付け可能 アクセス制御に利用可能
  16. 16. 16 使いどころ
  17. 17. 17 設定情報/機密情報の管理
  18. 18. 18設定情報/機密情報の具体例 設定情報 環境変数 機密情報 ユーザー名/パスワード、データベースへの接続情報 ライセンスコード Webhook URL
  19. 19. 19 なぜ、パラメータストア?
  20. 20. 20 疎結合にするため
  21. 21. 21 なぜ、疎結合にするのか?
  22. 22. 22こんなことありませんか?  設定ファイルに対して環境固有の値を手作業で設定  設定ファイルにパスワード/認証情報をハードコード
  23. 23. 23Well Architected ? “設定ファイルに対して環境固有の値を手作業で設定”がYESの 場合 • 同じ環境をデプロイするためにどのくらい時間かかりますか? (効率性) • 同じ環境を再現できますか? (信頼性) • デプロイをどのくらいの頻度で実施する必要がありますか? (事業へのインパクト) ここが小さければ、がんばる意義はあまりない
  24. 24. 24Well Architected ? “設定ファイルにパスワード/認証情報をハードコード” • 認証情報が漏洩しないように環境を管理できてますか? →「それ、今すぐOSSにできる?」 (機密性)
  25. 25. 25どうしたらいいのか? この手の問題への対処は、 答えはTwelve-Factor Appにあり?
  26. 26. 26The Twelve-Factor Appとは? “Software as a Serviceを作り上げるための方法論” • セットアップ自動化のために 宣言的な フォーマットを使い、プロ ジェクトに新しく加わった開発者が要する時間とコストを最小化 する。 • 下層のOSへの 依存関係を明確化 し、実行環境間での 移植性を最 大化 する。 • モダンな クラウドプラットフォーム 上への デプロイ に適してお り、サーバー管理やシステム管理を不要なものにする。 • 開発環境と本番環境の 差異を最小限 にし、アジリティを最大化す る 継続的デプロイ を可能にする。 • ツール、アーキテクチャ、開発プラクティスを大幅に変更するこ となく スケールアップ できる。
  27. 27. 27The Twelve Factors I. コードベース バージョン管理されている1つのコードベースと複数のデプロイ II. 依存関係 依存関係を明示的に宣言し分離する III.設定 設定を環境変数に格納する IV. バックエンドサービス バックエンドサービスをアタッチされたリソースとして扱う V. ビルド、リリース、実行 ビルド、リリース、実行の3つのステージを厳密に分離する VI. プロセス アプリケーションを1つもしくは複数のステートレスなプロセスと して実行する VII.ポートバインディング ポートバインディングを通してサービスを公開する VIII.並行性 プロセスモデルによってスケールアウトする IX. 廃棄容易性 高速な起動とグレースフルシャットダウンで堅牢性を最大化する X. 開発/本番一致 開発、ステージング、本番環境をできるだけ一致させた状態を保つ XI. ログ ログをイベントストリームとして扱う XII.管理プロセス 管理タスクを1回限りのプロセスとして実行する
  28. 28. 28 https://12factor.net/ja/
  29. 29. 29 パラメータストアを使えば?
  30. 30. 30パラメーターストア(再掲) ◼ 設定値やパスワードを集中的に管理する階層型ストレージ ◼ アクセス制御/暗号化が可能 ◼ 他のサービスからの参照が容易(後半に詳述) ◼ AMI IDなど、AWSが提供する値もあり ◼ バージョン管理が可能 ◼ ラベリングが可能
  31. 31. 31 いくつかのFactorには対応できそう!?
  32. 32. 32 サポートされているサービス
  33. 33. 33サポートしているサービス Amazon EC2 Amazon Elastic Container Service AWS Lambda AWS CloudFormation AWS CodeBuild AWS CodeDeploy Systems Manager(の他の機能)
  34. 34. 34Amazon EC2 様々なタイミングでパラメーターを取得 インスタンスの起動時(ユーザーデータ) プロセスの起動時(AMI作り込み/デプロイ時に設定) その他(アプリケーションで任意のタイミングに) 権限はIAM Role(インスタンスプロファイル)経由で付与
  35. 35. 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/
  36. 36. 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
  37. 37. 37AWS Lambda 任意のタイミングで取得 今はLambda関数に環境変数がある 集中管理したい場合はパラメーターストアを引き続き利用 (Lambda関数が多い場合など) 権限はIAM Role経由で付与
  38. 38. 38AWS CloudFormation パラメーターストアの値を動的に参照 権限は(以下略)
  39. 39. 39AWS CloudFormation(例) MyS3Bucket: Type: 'AWS::S3::Bucket' Properties: AccessControl: '{{resolve:ssm:S3AccessControl:2}}'
  40. 40. 40AWS CodeBuild BuildSpec.yml内のスクリプトで取得 権限(略 参考情報 Using Parameter Store with AWS CodePipeline https://stelligent.com/2017/03/09/using-parameter-store-with-aws- codepipeline/
  41. 41. 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/
  42. 42. 42The Twelve Factors(再掲) I. コードベース バージョン管理されている1つのコードベースと複数のデプロイ II. 依存関係 依存関係を明示的に宣言し分離する III.設定 設定を環境変数に格納する IV. バックエンドサービス バックエンドサービスをアタッチされたリソースとして扱う V. ビルド、リリース、実行 ビルド、リリース、実行の3つのステージを厳密に分離する VI. プロセス アプリケーションを1つもしくは複数のステートレスなプロセスと して実行する VII.ポートバインディング ポートバインディングを通してサービスを公開する VIII.並行性 プロセスモデルによってスケールアウトする IX. 廃棄容易性 高速な起動とグレースフルシャットダウンで堅牢性を最大化する X. 開発/本番一致 開発、ステージング、本番環境をできるだけ一致させた状態を保つ XI. ログ ログをイベントストリームとして扱う XII.管理プロセス 管理タスクを1回限りのプロセスとして実行する
  43. 43. 43 パラメターストアで どのFactorに対応できそうでしょうか? 考えてみましょう。
  44. 44. 44 管理
  45. 45. 45 AWS KMS KMSによる暗号化が可能(参照には復号の権限が必要) Amazon SNS / Amazon CloudWatch Events パラメターの変更を通知できる Amazon CloudWatch CloudWatch Agentのウィザードにより生成した設定値を保存 AWS CloudTrail 操作の証跡を取得可能 Systems Managerの全てのAPIコールがロギングの対象
  46. 46. 46 その他
  47. 47. 47Secret Managerとの違いは? Secret Managerは • ローテーションできる • ランダム文字列の生成ができる パラメーターストアはSecret Managerのパススルーサービ スとして機能する • “/aws/reference/secretsmanager”を名前の先頭に付与すると、 SecretManagerを参照する • パラメータストアを利用するようにアプリを作り込んでいる場合 でも、名前を修正すれば移行は比較的容易
  48. 48. 48 まとめ
  49. 49. 49まとめ パラメーターストアによる、設定/機密情報の集中管理 各種サービスからの参照が可能 パラメーターストアの存在意義 (疎結合なアプリケーションへ)
  50. 50. 50 パラメーターストアはいいぞ
  51. 51. 51 Fin.
  52. 52. 52

×