# GCP - App Engine Enum

{{#include ../../../banners/hacktricks-training.md}}

## 基本情報 <a href="#reviewing-app-engine-configurations" id="reviewing-app-engine-configurations"></a>

Google Cloud Platformの(GCP) App Engineは、**大規模なウェブアプリケーションの開発とホスティングのために特化した堅牢なサーバーレスプラットフォーム**です。このプラットフォームの設計は、開発プロセスの効率化とアプリケーションの管理性の向上に焦点を当てています。GCPのApp Engineの主な機能と利点は以下の通りです：

1. **サーバーレスアーキテクチャ**：App Engineは、サーバーのプロビジョニング、構成、スケーリングを含むインフラストラクチャを自動的に処理します。これにより、開発者は基盤となるハードウェアを気にせずにコードを書くことに集中できます。
2. **自動スケーリング**：App Engineは、受信するトラフィックの量に応じてアプリケーションを自動的にスケールできます。トラフィックが増加するとスケールアップし、トラフィックが減少するとスケールダウンすることで、コストとパフォーマンスの最適化を助けます。
3. **言語とランタイムのサポート**：Java、Python、Node.js、Go、Ruby、PHP、.NETなどの人気のあるプログラミング言語をサポートしています。アプリケーションは標準環境または柔軟環境で実行できます。標準環境は制約が多いですが、特定の言語に最適化されています。一方、柔軟環境はより多くのカスタマイズを可能にします。
4. **統合サービス**：App Engineは、Cloud SQL、Cloud Storage、Cloud Datastoreなどの他の多くのGCPサービスと統合されています。この統合により、クラウドベースのアプリケーションのアーキテクチャが簡素化されます。
5. **バージョン管理とトラフィックスプリッティング**：アプリケーションの複数のバージョンを簡単にデプロイし、A/Bテストや段階的なロールアウトのためにトラフィックを分割できます。
6. **アプリケーションインサイト**：App Engineは、ログ記録、ユーザー認証、アプリケーションの監視と管理のための開発者ツールのスイートなどの組み込みサービスを提供します。
7. **セキュリティ**：アプリケーションのバージョン管理、SSL/TLS証明書による安全な接続、アイデンティティとアクセス管理などの組み込みセキュリティ機能を提供します。

### ファイアウォール

アプリを実行しているインスタンスのために、以下のオプションでシンプルな**ファイアウォール**を構成できます：

<figure><img src="../../../images/image (246).png" alt=""><figcaption></figcaption></figure>

### SA

これらのアプリで使用されるデフォルトのサービスアカウントは、**`<proj-name>@appspot.gserviceaccount.com`**であり、プロジェクトに対して**Editor**ロールを持ち、APP Engineインスタンス内のSAは**cloud-platformスコープ（他のものの中で）で実行されます。**

### ストレージ

ソースコードとメタデータは、**`<proj-id>.appspot.com`**や**`staging.<proj-id>.appspot.com`**、**`<country>.<proj-id>.appspot.com`**などの名前のバケットに**自動的に保存されます**。

**アプリのすべてのファイル**は、**コンテンツのsha1をファイル名として**保存されます：

<figure><img src="../../../images/image (82).png" alt=""><figcaption></figcaption></figure>

**`staging.<proj-id>.appspot.com`**の**`ae`**フォルダー内には、**バージョンごとに1つのフォルダーが存在し**、**ソースコード**ファイルと**アプリのコンポーネントを説明する**`manifest.json`**ファイルがあります：
```json
{"requirements.txt":{"sourceUrl":"https://storage.googleapis.com/staging.onboarding-host-98efbf97812843.appspot.com/a270eedcbe2672c841251022b7105d340129d108","sha1Sum":"a270eedc_be2672c8_41251022_b7105d34_0129d108"},"main_test.py":{"sourceUrl":"https://storage.googleapis.com/staging.onboarding-host-98efbf97812843.appspot.com/0ca32fd70c953af94d02d8a36679153881943f32","sha1Sum":"0ca32fd7_0c953af9_4d02d8a ...
```
### コンテナ

ウェブアプリは最終的に**コンテナ内で実行され**、**Code Build**がコンテナをビルドするために使用されます。

### URLとリージョン

**デフォルト**のウェブページはURL**`<project-uniq-name>.appspot.com`**で公開されますが、古いバージョンのURLは少し異なり、例えば**`https://20240117t001540-dot-<project-uniq-name>.uc.r.appspot.com`**のようになります（最初のタイムスタンプに注意）。

1つのリージョンに対して1つのアプリエンジンウェブアプリケーションのみをデプロイできるように見えるかもしれませんが、**`app.yml`**に**`service: <servicename>`**を指定することで新しいサービス（新しいウェブ）を作成することが可能です。この新しいウェブのURLの形式は**`<servicename>-dot-<project-uniq-name>.appspot.com`**になります。

### 列挙

> [!CAUTION]
> アプリに新しいコードをアップロードするたびに、**新しいバージョンが作成されます**。**すべてのバージョンが保存され**、それらにアクセスするための**URLがあります**。したがって、古いバージョンのコードを変更することは**優れた持続技術**となる可能性があります。

Cloud Functionsと同様に、**アプリケーションが実行時に環境変数を介してアクセスされる秘密に依存している可能性があります**。これらの変数は**`app.yaml`**ファイルに保存されており、次のようにアクセスできます：
```bash
# List the apps
gcloud app services list
gcloud app services describe <app-name>
# Access via browser to the specified app
gcloud app services browse <app-name>

# Get App versions
gcloud app versions list
# Get all the info of the app and version, included specific verion URL and the env
gcloud app versions describe -s <app-name> <version-id>

# Logs
gcloud app logs tail -s <app-name>

# Instances
## This is only valid if a flexible environment is used and not a standard one
gcloud app instances list
gcloud app instances describe -s <app-name> --version <version-id> <ID>
## Connect to the instance via ssh
gcloud app instances ssh --service <app-name> --version <version-id> <ID>

# Firewalls
gcloud app firewall-rules list
gcloud app firewall-rules describe <num_fw>

# Get domains
gcloud app domain-mappings list
gcloud app domain-mappings describe <name>

# SSl certificates
gcloud app ssl-certificates list
gcloud app ssl-certificates describe <name>
```
### 権限昇格

{{#ref}}
../gcp-privilege-escalation/gcp-appengine-privesc.md
{{#endref}}

### 認証されていない列挙

{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-app-engine-unauthenticated-enum.md
{{#endref}}

### ポストエクスプロイト

{{#ref}}
../gcp-post-exploitation/gcp-app-engine-post-exploitation.md
{{#endref}}

### 永続性

{{#ref}}
../gcp-persistence/gcp-app-engine-persistence.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
