連載 [第4回] :
今日からはじめる Pulumiでカンタン インフラ運用・管理SecretもPulumiで使いこなしたい! PulumiのSecurityを試してみよう
2023年5月26日(金)
第4回となる今回は、PulumiのSecurityについて解説し、ハンズオンではPulumiによる暗号化処理を行い、AWS SecretManagerを利用したRDS接続する流れを実践していきます。
【ハンズオン】Pulumiによる認証情報の暗号化とRDS接続
ハンズオンの流れ
今回のハンズオンの流れと関連するサービス/リソースの全体象は以下のとおりです。ハンズオン実施前には「事前準備」、ハンズオン完了後は後述の「クリーンアップ作業」を行います。
- Project/Stack(secret.dev/network.dev/compute.dev)を新規で作成する
- Pulumi Stack(secret.dev)設定ファイルにDBパスワードを設定する
- SecretリソースのProgramを更新してStackをデプロイする
- NetworkリソースのProgramを更新してStackをデプロイする
- ComputeリソースのProgramを更新してStackをデプロイする
- EC2からRDS接続の動作確認をする
また、ハンズオン実施時の最終的なディレクトリ構成は以下のようになります。
pulumi-security/ ├── compute/ │ ├── Pulumi.compute.dev.yaml │ ├── Pulumi.yaml │ ├── __main__.py │ ├── venv/ │ └── requirements.txt ├── network/ │ ├── Pulumi.network.dev.yaml │ ├── Pulumi.yaml │ ├── __main__.py │ ├── venv/ │ └── requirements.txt └── secret/ ├── Pulumi.secret.dev.yaml ├── Pulumi.yaml ├── __main__.py ├── venv/ └── requirements.txt
前提
- ハンズオンを実施する上で必要なAWSのアクセス権限を有する
- VPC/サブネット/セキュリティグループ/インターネットゲートウェイ/ルートテーブルなど、ひと通りのネットワーク関連のリソースを作成できる権限
- EC2インスタンス/RDSインスタンスを作成できる権限
- PCにPythonを導入済み(version 3.7以上)
事前準備
Pulumiを利用したAWSリソースデプロイのハンズオンを実施するには、事前に以下の作業が実施済みである必要があります。事前準備の手順は第2回で解説しているので、まだ実施されていない方はそちらを確認してください。
- Pulumi CLIのインストール
- Pulumiアカウント新規作成
- AWSアカウントへのPulumiアクセス設定
Pulumi Project/Stackの新規作成
Pulumi CLIを用いて、新規でPulumi ProjectとStackを作成します。
- Pulumi Project用のディレクトリを作成します。
$ mkdir pulumi-security && cd pulumi-security
- AWSのリソース種別に応じたディレクトリを作成します。
$ mkdir secret $ mkdir network $ mkdir compute $ ls -F compute/ network/ secret/
- Pulumi Project作成コマンド「pulumi new <テンプレート名>」を実行します。今回はpythonでAWSリソースを作成するため、テンプレート名は「aws-python」になります。
$ cd secret $ pulumi new aws-python This command will walk you through creating a new Pulumi project. Enter a value or leave blank to accept the (default), and press <ENTER>. Press ^C at any time to quit.
- 「pulumi new <テンプレート名>」コマンド実行後は「Pulumi Project名(project name)」「Pulumi Projectの説明(project description)」「Pulumi Stack名(stack name)」「AWSのデフォルトリージョン(aws:region)」をプロンプトに従って設定していきます。各項目右の括弧内の値は、特に指定がない場合のデフォルト値を示します。今回はPulumi Project名(project name)には「pulumi-security」を入力します。Pulumi Projectの説明(project description)はデフォルト値を設定するため、そのまま<ENTER>を押下します。Pulumi Stack名(stack name)は「secret.dev」を入力します。AWSのデフォルトリージョン(aws:region)は「アジアパシフィック(東京)」に設定するため、「ap-northeast-1」を設定してから<ENTER>を押下しました。
$ pulumi new aws-python This command will walk you through creating a new Pulumi project. Enter a value or leave blank to accept the (default), and press <ENTER>. Press ^C at any time to quit. project name: (secret) pulumi-security project description: (A minimal AWS Python Pulumi program) Created project 'pulumi-security' Please enter your desired stack name. To create a stack in an organization, use the format <org-name>/<stack-name> (e.g. `acmecorp/dev`). stack name: (dev) secret.dev Created stack 'secret.dev' aws:region: The AWS region to deploy into: (us-east-1) ls ap-northeast-1 Saved config
以降は、自動的にPulumiの実行に必要なファイルやpythonのdependenciesなどが自動的にインストール/作成され、Pulumi ProjectおよびStackの作成が完了します。Installing dependencies... Creating virtual environment... Finished creating virtual environment Updating pip, setuptools, and wheel in virtual environment... Requirement already satisfied: pip in ./venv/lib/python3.10/site-packages (22.2.2) Collecting pip ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 7.8 MB/s eta 0:00:00 ~~(略)~~ Successfully installed arpeggio-2.0.0 attrs-23.1.0 dill-0.3.6 grpcio-1.51.3 parver-0.4 protobuf-4.23.0 pulumi-3.66.0 pulumi-aws-5.40.0 pyyaml-6.0 semver-2.13.0 six-1.16.0 Finished installing dependencies Finished installing dependencies Your new project is ready to go! ✨ To perform an initial deployment, run `pulumi up`
この時点で「Pulumi.yaml(Pulumi Projectのメタデータが記述されたファイル)」「Pulumi.dev.yaml(Pulumi Stackのkey-value形式の設定ファイル、dev環境用)」「__main__.py(Python用のPulumi Program)」「requirements.txt / venv(開発言語(runtime)特有のファイル/ディレクトリ)」が生成されます。$ pwd /***/pulumi-security/secret $ ls -F Pulumi.secret.dev.yaml Pulumi.yaml __main__.py requirements.txt venv/
- 生成したPulumi関連ファイルを他のディレクトリ(network、compute)に全てコピーします。
$ cp -R ./* ../network $ cp -R ./* ../compute
- 「network」ディレクトリでStack設定ファイルの名前をディレクトリ名に合わせて修正します。修正後「network.dev」Stackを新規作成します。
$ cd ../network $ mv Pulumi.secret.dev.yaml Pulumi.network.dev.yaml $ pwd /***/pulumi-security/network $ ls -F Pulumi.network.dev.yaml __main__.py requirements.txt Pulumi.yaml __pycache__/ venv/ $ pulumi stack init network.dev Created stack 'network.dev'
- 「compute」ディレクトリも同様に、Stack設定ファイルの名前をディレクトリ名に合わせて修正します。修正後「compute.dev」Stackを新規作成します。
$ cd ../compute $ mv Pulumi.secret.dev.yaml Pulumi.compute.dev.yaml $ pwd /***/pulumi-security/compute $ ls -F Pulumi.compute.dev.yaml __main__.py requirements.txt Pulumi.yaml __pycache__/ venv/ $ pulumi stack init compute.dev Created stack 'compute.dev'
最終的に3つのStackが作成された状態です。$ pulumi stack ls NAME LAST UPDATE RESOURCE COUNT URL compute.dev* n/a n/a https://app.pulumi.com/***/pulumi-security/compute.dev network.dev n/a n/a https://app.pulumi.com/***/pulumi-security/network.dev secret.dev n/a n/a https://app.pulumi.com/***/pulumi-security/secret.dev
Pulumi Stackのパスワード設定
「secret.dev」のStack設定ファイルに、AWSリソースのsecretmanager versionの作成で利用するパスワードを設定します。
- 「secret」ディレクトリに移動し、Stackを「secret.dev」に切り替えます。
$ cd ../secret $ pwd /***/pulumi-security/secret $ pulumi stack select secret.dev $ pulumi stack ls NAME LAST UPDATE RESOURCE COUNT URL compute.dev n/a n/a https://app.pulumi.com/***/pulumi-security/compute.dev network.dev n/a n/a https://app.pulumi.com/***/pulumi-security/network.dev secret.dev* n/a n/a https://app.pulumi.com/***/pulumi-security/secret.dev
- Pulumi CLIでStack設定ファイルにパスワードを設定します。ハンズオンでは、分かりやすいように「12345678」というパスワードを「my_password」という名前でStack設定ファイルに追加します。パスワードを暗号化して設定ファイルに追加するため「--secret」フラグをコマンドに追加します。
$ pulumi config set my_password 12345678 --secret
コマンド実行後にStack設定ファイルを確認すると、パスワードが暗号化されていることを確認できます。$ cat Pulumi.secret.dev.yaml config: aws:region: ap-northeast-1 pulumi-security:my_password: secure: AAABAMV83UJX+0QAPFnk0L8+8yfjPOqUDPRfaAcgsX+uq7yYivZI+A==
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。
全文検索エンジンによるおすすめ記事
- 「Pulumi Stack」とは ー Pulumiによるマルチステージ環境の構築方法
- Policy as Codeでインフラのコンプライアンスを自動実現! 「Pulumi CrossGuard」を活用してみよう
- PulumiでAWSリソースをデプロイしよう
- Pulumi Kubernetes Operatorを活用してPulumiのCI/CDを実現しよう
- 既に存在するリソースをPulumiで管理してみよう
- 「Pulumi Automation API」でPulumi CLIの機能をコード化しよう
- TerraformからPulumiへの移行
- マシン・イメージを自動構築し、作業効率を高めるPacker入門
- 「Terraform」のコードを自分で書けるようになろう
- インフラの構成管理を自動化するTerraform入門