Skip to content

Commit 3a83772

Browse files
committed
markdownlint fix 2023
1 parent 63280e5 commit 3a83772

File tree

148 files changed

+972
-948
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

148 files changed

+972
-948
lines changed

source/_posts/2023/20230105a_Python_Web_APIをAWS_Lambdaにデプロイ.md

+2-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ lede: "この記事はフューチャー Advent Calendar 2022の14日目の記
1414
---
1515
この記事は[フューチャー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/future)の14日目の記事です。
1616

17-
1817
# はじめに
1918

2019
こんにちは。TIG DXユニットの村上です。
@@ -27,7 +26,6 @@ PythonでWeb APIを構築する方法は[OpenAPI GeneratorでPython Web API構
2726

2827
<img src="/images/20230105a/image.png" alt="PythonアプリをDockerコンテナイメージビルド→ECR→Lambdaにデプロイする" width="778" height="495" loading="lazy">
2928

30-
3129
# Lambda起動用のモジュール
3230

3331
Lambdaでは起点となる関数とAPI Responseを返すreturn命令が必要になります。
@@ -54,6 +52,7 @@ def lambda_handler(event, context):
5452
# デプロイする方法
5553

5654
Lambdaにソースコードをデプロイする方法は2種類あります。
55+
5756
1. ソースコードとその依存ライブラリをZIPにアーカイブしてアップロードする
5857
2. ECRのコンテナイメージをアップロードする
5958

@@ -124,7 +123,7 @@ $ docker build \
124123
ビルドができたらECRにプッシュします。
125124

126125
```bash
127-
$ docker push <AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/<ECRリポジトリ名>:latest
126+
docker push <AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/<ECRリポジトリ名>:latest
128127
```
129128

130129
プッシュが完了したらECRからLambdaにアップロードします。

source/_posts/2023/20230113a_GKEでIdentity-Aware_Proxyを利用したWebアプリケーション認証.md

+23-14
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,22 @@ author: 渡邉光
1313
lede: "GKE を利用したWebアプリケーションのGoogleアカウント認証について記事を書きます。公式ドキュメントを引用します。IAP を使用すると、HTTPS によってアクセスされるアプリケーションの一元的な承認レイヤを確立できるため、ネットワーク レベルのファイアウォールに頼らずに、アプリケーション レベルのアクセス制御モデルを使用できます。"
1414
---
1515
# 初めに
16+
1617
明けましておめでとうございます!Future筋肉エンジニアの渡邉です。年も明けたことなので切り替えて減量に入りました。三月末までを目安に体を絞ろうと思っています。
1718

1819
私は現在Google Cloudを利用しているプロジェクトに所属しており、Google Cloudのスキルアップにいそしんでいます。今回はGKE (Google Kubernetes Engine)でCloud IAP (Identity-Aware Proxy)を利用したWebアプリケーションのGoogleアカウント認証について記事を書こうと思います。
1920

2021
# Identity-Aware Proxyとは
22+
2123
以下、[公式ドキュメント](https://cloud.google.com/iap/docs/concepts-overview?hl=ja)引用
2224
> IAP を使用すると、HTTPS によってアクセスされるアプリケーションの一元的な承認レイヤを確立できるため、ネットワーク レベルのファイアウォールに頼らずに、アプリケーション レベルのアクセス制御モデルを使用できます。
2325
2426
簡単に言うとGoogleアカウントとCloud IAMの仕組みを用いてWebアプリケーションの認証をすることができます。
2527

26-
2728
## 認証・承認フロー
2829

2930
<img src="/images/20230113a/authenticate-flow.drawio.png" alt="authenticate-flow.drawio.png" width="487" height="564" loading="lazy">
3031

31-
3232
[公式ドキュメント](https://cloud.google.com/iap/docs/concepts-overview?hl=ja)はこちら
3333

3434
- Google Cloudリソースへのリクエスト(Cloud Load Balancing)します。
@@ -39,15 +39,15 @@ lede: "GKE を利用したWebアプリケーションのGoogleアカウント認
3939
- 認証サーバはこのIDからユーザのIAMロールをチェックし、ユーザがリソースにアクセスできる権限(**IAP で保護されたウェブアプリ ユーザー**)を持っているかをチェックします
4040
- 権限を持っていれば、アクセスOKになり、なければNGになります。
4141

42-
43-
4442
# 全体アーキテクチャ図
43+
4544
以下が全体アーキテクチャ図になります。
4645
GKE/NetworkなどのGoogle Cloudのリソース構築に関しては慣れ親しんでいるTerraformを利用して作成しました。OAuth同意画面に関しては外部公開する場合は、APIから作成することはできない ([公式ドキュメント記載](https://cloud.google.com/iap/docs/programmatic-oauth-clients?hl=ja]))ので、コンソール画面から設定しました。
4746

4847
<img src="/images/20230113a/architecture.drawio.png" alt="architecture.drawio.png" width="1151" height="429" loading="lazy">
4948

5049
## Bastion初期設定
50+
5151
Public Subnetに作成したGCEインスタンスからGKEのコントロールプレーンに対してkubectlコマンドを実行したいので、
5252
kubectlコマンドや、google-cloud-sdk-gke-gcloud-auth-pluginなどをインストールします。
5353
以下、Bashスクリプトです。
@@ -89,11 +89,13 @@ kubectl get node
8989
```
9090

9191
## manifestファイル
92+
9293
また、manifestファイルは以下を用意してkubectlコマンドを実行しk8sリソースをGKEに対して作成しました。
9394

9495
ここまでの設定で事前準備は完了です。
9596

9697
### Deployment
98+
9799
NginxのPodを用意するため、Deploymentのmanifestを作成しました。
98100

99101
```yaml deployment.yaml
@@ -119,6 +121,7 @@ spec:
119121
```
120122
121123
### Service
124+
122125
IngressにはNodePortが必要になるので、Serviceのmanifestを作成しました。
123126
124127
```yaml service.yaml
@@ -137,6 +140,7 @@ spec:
137140
```
138141
139142
### ManagedCertificate
143+
140144
クライアントとIngressで構築するHTTP(S)ロードバランサ間をHTTPSでアクセスするようにしたいので、Googleマネージド証明書のmanifestを作成しました。
141145
domainsには、terraformで用意したHTTP(S)ロードバランサに設定したい外部IPアドレスにフリーなワイルドカードDNSサービスの[nip.io](https://nip.io/)を利用したものを設定します。
142146
@@ -151,6 +155,7 @@ spec:
151155
```
152156
153157
### Ingress
158+
154159
インターネット上にNginxを公開するためにIngressを構築するmanifestを作成しました。
155160
156161
```yaml ingress.yaml
@@ -180,15 +185,14 @@ spec:
180185
number: 80
181186
```
182187
183-
184-
185188
# Cloud IAPなしでのアクセス確認
189+
186190
まず、Cloud IAPなしでのアクセス確認を行います。
187191
Load Balancerに設定したドメインに対してアクセスを行うと、特に認証画面を経由することもなくアクセスすることができます。
188192
<img src="/images/20230113a/1-IAPなしでのアクセス確認.png" alt="1-IAPなしでのアクセス確認.png" width="956" height="525" loading="lazy">
189193
190-
191194
# Cloud IAPの設定を追加
195+
192196
上記の状態ではだれでもアクセスすることが可能なため、セキュアな状態ではありません。
193197
ここでCloud IAPの設定を追加してみましょう。
194198
@@ -214,6 +218,7 @@ OAuth同意画面はUser Typeを「外部」で作成します。
214218
<img src="/images/20230113a/2-OAuth同意画面④.png" alt="2-OAuth同意画面④.png" width="1200" height="844" loading="lazy">
215219
216220
## OAuth認証情報の作成
221+
217222
APIとサービスタブの「認証情報」をクリックします。
218223
認証情報の作成プルダウンリストからOAuthクライアントIDをクリックします。
219224
@@ -230,13 +235,15 @@ APIとサービスタブの「認証情報」をクリックします。
230235
<img src="/images/20230113a/3-OAuth認証情報③.png" alt="3-OAuth認証情報③.png" width="512" height="448" loading="lazy">
231236
232237
作成したOAuthクライアントを再度クリックし、承認済みリダイレクトURIをダウンロードしたOAuthクライアントID(CLIENT_ID)に修正して保存します。
238+
233239
```
234240
https://iap.googleapis.com/v1/oauth/clientIds/CLIENT_ID:handleRedirect
235241
```
236242

237243
<img src="/images/20230113a/3-OAuth認証情報④.png" alt="3-OAuth認証情報④.png" width="1200" height="795" loading="lazy">
238244

239245
## IAPアクセス権の設定
246+
240247
Google Cloud ConsoleのIdentity-Aware Proxyにアクセスします。
241248
アクセス権を付与するリソースの横にあるチェックボックスをオンにします。
242249

@@ -255,8 +262,8 @@ IAPアクセスを許可したいGoogleアカウント(メールアドレス
255262

256263
ここまででOAuthの設定は完了です。
257264

258-
259265
## Kubernetes Secretの作成
266+
260267
GKEでCloud IAPを適用するためには、Kubernetes Secretを作成してBackendConfigに適用する必要があります。
261268
先ほど作成してダウンロードしたOAuth認証情報のClient IDとClient Secretを指定してKubernetes Secretを作成します。
262269

@@ -266,6 +273,7 @@ kubectl create secret generic oauth-secret --from-literal=client_id=xxxxxxxxxxxx
266273
```
267274

268275
Kubernetes Secretが作成されていることを確認します。
276+
269277
```bash
270278
xxxxxxxxxxxxx@tky-bastion:~$ kubectl describe secret oauth-secret
271279
Name: oauth-secret
@@ -282,6 +290,7 @@ client_id: 73 bytes
282290
```
283291

284292
## BackendConfigの作成
293+
285294
Kubernetes Secretで作成したSecretをBackendConfigに設定することでCloud IAPを適用することができます。
286295
以下のmanifestファイルを用意します。
287296

@@ -299,11 +308,13 @@ spec:
299308
```
300309
301310
kubectlコマンドでBackendConfigを作成します。
311+
302312
```bash
303313
kubectl apply -f backendconfig.yaml
304314
```
305315

306316
BackendConfigが作成されていることを確認します。
317+
307318
```bash
308319
xxxxxxxxxxxxx@tky-bastion:~/manifest$ kubectl get backendconfig
309320
NAME AGE
@@ -336,31 +347,29 @@ kubectl apply -f service.yaml
336347

337348
以上で、Cloud IAPの設定は完了です。
338349

339-
340350
# Cloud IAPありでのアクセス確認
351+
341352
Cloud IAPの設定が完了したので、画面にアクセスしてCloud IAPが適用されているかを確認します。
342353

343354
## Cloud IAP認証対象外アカウントでのアクセス確認
355+
344356
Load Balancerに設定したドメインに対してアクセスを行うと、Cloud IAPによるGoogleアカウントログイン画面にリダイレクトされます。
345357

346358
<img src="/images/20230113a/5-IAPアクセスなし①.png" alt="5-IAPアクセスなし①.png" width="469" height="557" loading="lazy">
347359

348360
本GoogleアカウントはCloud IAPのアクセスできる権限(**IAP で保護されたウェブアプリ ユーザー**)を持っていないため、画面にアクセスすることはできません。
349361
<img src="/images/20230113a/5-IAPアクセスなし②.png" alt="5-IAPアクセスなし②.png" width="426" height="455" loading="lazy">
350362

351-
352-
353363
## Cloud IAP認証対象アカウントでのアクセス確認
364+
354365
Load Balancerに設定したドメインに対してアクセスを行うと、Cloud IAPによるGoogleアカウントログイン画面にリダイレクトされます。
355366

356367
<img src="/images/20230113a/6-IAPアクセスあり①.png" alt="6-IAPアクセスあり①.png" width="529" height="565" loading="lazy">
357368

358369
本GoogleアカウントはCloud IAPのアクセスできる権限(**IAP で保護されたウェブアプリ ユーザー**)を持っているため、画面にアクセスすることができました。
359370
<img src="/images/20230113a/6-IAPアクセスあり②.png" alt="6-IAPアクセスあり②.png" width="908" height="299" loading="lazy">
360371

361-
362-
363372
# 最後に
373+
364374
今回はGKE (Google Kubernetes Engine)でCloud IAP (Identity-Aware Proxy)を利用したGoogleアカウント認証について記事を書きました。
365375
Google Cloudを利用していて、特定のGoogleアカウントにのみアクセスを許可したいケースはあるかと思いますので、その時にでも参考にしていただければ幸いです。
366-

source/_posts/2023/20230119a_VPC_Service_ControlでGoogle_Cloud環境をガッチリ守る.md

-6
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ VPC Service Controlsを利用することによって、Google Cloudのリソー
3535

3636
<img src="/images/20230119a/a864e1b2-7cd3-c69c-bf63-fe2b21622b6d.png" alt="" width="1200" height="640" loading="lazy">
3737

38-
3938
こちらの画像のように、境界(Service Perimeter)内に存在するBigQueryは認証されたVPC、VM(GCE)からのみアクセス可能となり、認証されていないリソースからは境界内へのアクセス・境界外へのアクセス共に制限されることになります。
4039

4140
現在、VPC Service Controlsがサポートしているリソースの一覧はこちらになります。
@@ -51,7 +50,6 @@ VPC Service Controlsはそれに加えて、境界全体への上り(Ingress
5150

5251
どちらが良い・悪いというのは無く、併用することでより強固なセキュリティを築くことが可能となります。
5352

54-
5553
## BigQueryを使って挙動を確認
5654

5755
### Organizationの設定が必要
@@ -91,7 +89,6 @@ ID制御を行ってみます。
9189

9290
<img src="/images/20230119a/755d759c-cde1-42d1-c0c4-e62dc1425a89.png" alt="" width="930" height="348" loading="lazy">
9391

94-
9592
#### アクセスレベルを作成する
9693

9794
[アクセスレベル](https://cloud.google.com/access-context-manager/docs/overview#access-levels)ではリソースへのアクセスを許可する条件を定義します。
@@ -119,7 +116,6 @@ resource "google_access_context_manager_access_level" "id" {
119116

120117
```
121118

122-
123119
#### サービス境界を作成する
124120

125121
VPC Service Controlsの主役です。指定したサービスのリソースに対して外部アクセスから保護するための境界を作ります。
@@ -267,7 +263,6 @@ resource "google_access_context_manager_access_level" "id_and_ip" {
267263
268264
<img src="/images/20230119a/9de770bd-ea00-9238-2464-906a4bc2561a.png" alt="" width="795" height="320" loading="lazy">
269265
270-
271266
次に指定されたIPアドレスのVMに認証済みのアカウントで`gcloud auth login`してから`bq`コマンドを打ってみます。
272267
273268
```bash
@@ -324,7 +319,6 @@ bq query --use_legacy_sql=false --project_id <YOUR_PROJECT_ID> 'select worker_i
324319
325320
<img src="/images/20230119a/34000be3-c373-0fe1-47b6-fdae7b41ec73.png" alt="" width="1078" height="374" loading="lazy">
326321
327-
328322
ではこの時、どのようにIngree/Egressを設定すればよいのでしょうか?
329323
正解は以下のようになります。
330324

source/_posts/2023/20230120a_MailSlurperを使って6桁のコードの送信コードのテストをする.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ services:
8686
あとは起動するだけです。 http://localhost:8080 にアクセスして管理画面にアクセスできることを確認しましょう。
8787
8888
```bash
89-
$ docker compose up
89+
docker compose up
9090
```
9191

9292
<img src="/images/20230120a/スクリーンショット_2023-01-16_1.41.30.png" alt="スクリーンショット_2023-01-16_1.41.30.png" width="1200" height="684" loading="lazy">
@@ -307,5 +307,3 @@ func TestMain(m *testing.M) {
307307
これで実SMTPサーバーを使ったコードを書いて、それをMailSlurperを使ってテストする方法を学びました。REST APIのおかげで、ヘルパーさえ用意してしまえば、テストを書くのは簡単です。
308308

309309
これだけ使いやすいとなると、非同期通信系は全部SMTPに寄せたくなってくる気もします。まあ本番環境の安定稼働を考えると実際にやることはないですが、MailSlurperは送信結果を見るのもできて、開発体験はかなり良いです。
310-
311-

0 commit comments

Comments
 (0)