# DO - 基本情報

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

## 基本情報

DigitalOceanは、**ユーザーにさまざまなサービスを提供するクラウドコンピューティングプラットフォーム**であり、仮想プライベートサーバー（VPS）やアプリケーションの構築、展開、管理のための他のリソースを含みます。**DigitalOceanのサービスはシンプルで使いやすく設計されており、**開発者や小規模ビジネスの間で**人気があります**。

DigitalOceanの主な機能には以下が含まれます：

- **仮想プライベートサーバー（VPS）**：DigitalOceanは、ウェブサイトやアプリケーションをホストするために使用できるVPSを提供します。これらのVPSはシンプルさと使いやすさで知られており、さまざまな事前構築された「ドロップレット」やカスタム構成を使用して迅速かつ簡単に展開できます。
- **ストレージ**：DigitalOceanは、オブジェクトストレージ、ブロックストレージ、管理されたデータベースなど、ウェブサイトやアプリケーションのデータを保存および管理するために使用できるさまざまなストレージオプションを提供します。
- **開発および展開ツール**：DigitalOceanは、APIや事前構築されたドロップレットを含む、アプリケーションを構築、展開、管理するために使用できるさまざまなツールを提供します。
- **セキュリティ**：DigitalOceanはセキュリティに強い重点を置いており、ユーザーがデータやアプリケーションを安全に保つためのさまざまなツールや機能を提供しています。これには暗号化、バックアップ、その他のセキュリティ対策が含まれます。

全体として、DigitalOceanは、ユーザーがクラウドでアプリケーションを構築、展開、管理するために必要なツールとリソースを提供するクラウドコンピューティングプラットフォームです。そのサービスはシンプルで使いやすく設計されており、開発者や小規模ビジネスの間で人気があります。

### AWSとの主な違い

DigitalOceanとAWSの主な違いの1つは、**提供するサービスの範囲**です。**DigitalOceanはシンプルで**使いやすい仮想プライベートサーバー（VPS）、ストレージ、開発および展開ツールの提供に焦点を当てています。**一方、AWSは、VPS、ストレージ、データベース、機械学習、分析、その他多くのサービスを含む**はるかに広範なサービスを提供しています。これにより、AWSは複雑なエンタープライズレベルのアプリケーションにより適しているのに対し、DigitalOceanは小規模ビジネスや開発者により適しています。

もう1つの重要な違いは、**価格構造**です。**DigitalOceanの価格は一般的によりシンプルで理解しやすく、**使用するドロップレットやその他のリソースの数に基づいたさまざまな価格プランがあります。一方、AWSは、使用するリソースの種類や量など、さまざまな要因に基づいたより複雑な価格構造を持っています。これにより、AWSを使用する際のコスト予測が難しくなることがあります。

## 階層

### ユーザー

ユーザーは、あなたが期待する通りのユーザーです。彼は**チームを作成**し、**異なるチームのメンバーになることができます。**

### **チーム**

チームは**ユーザーのグループ**です。ユーザーがチームを作成すると、彼はそのチームの**オーナーの役割を持ち**、最初に**請求情報を設定します**。**他の**ユーザーはそのチームに**招待**されることができます。

チーム内にはいくつかの**プロジェクト**が存在する場合があります。プロジェクトは単に**実行中のサービスのセット**です。これは、prod、staging、devなど、異なるインフラの段階を**分離するために使用できます**。

### プロジェクト

前述のように、プロジェクトはすべての**サービス**（ドロップレット、スペース、データベース、Kubernetesなど）が**一緒に実行されるコンテナ**です。\
Digital Oceanのプロジェクトは、IAMなしのGCPプロジェクトに非常に似ています。

## 権限

### チーム

基本的に、チームのすべてのメンバーは、**チーム内で作成されたすべてのプロジェクトのDOリソースにアクセスできます（特権の有無にかかわらず）。**

### 役割

チーム内の各**ユーザー**は、以下の3つの**役割**のいずれかを持つことができます：

| 役割       | 共有リソース | 請求情報 | チーム設定 |
| ---------- | ------------ | --------- | ---------- |
| **オーナー**  | フルアクセス  | フルアクセス | フルアクセス  |
| **ビラー** | アクセスなし  | フルアクセス | アクセスなし  |
| **メンバー** | フルアクセス  | アクセスなし  | アクセスなし  |

**オーナー**と**メンバーはユーザーをリストし**、彼らの**役割を確認できます**（ビラーはできません）。

## アクセス

### ユーザー名 + パスワード（MFA）

ほとんどのプラットフォームと同様に、GUIにアクセスするには、**有効なユーザー名とパスワードのセット**を使用して**クラウドリソースにアクセス**できます。ログインすると、[https://cloud.digitalocean.com/account/profile](https://cloud.digitalocean.com/account/profile)で**参加しているすべてのチーム**を見ることができます。\
また、[https://cloud.digitalocean.com/account/activity](https://cloud.digitalocean.com/account/activity)で自分の活動をすべて見ることができます。

**MFA**はユーザーに**有効化**でき、チーム内のすべてのユーザーがチームにアクセスするために**強制**されることがあります。

### APIキー

APIを使用するために、ユーザーは**APIキーを生成**できます。これらは常に読み取り権限が付与されますが、**書き込み権限はオプションです**。\
APIキーは次のようになります：
```
dop_v1_1946a92309d6240274519275875bb3cb03c1695f60d47eaa1532916502361836
```
CLIツールは[**doctl**](https://github.com/digitalocean/doctl#installing-doctl)です。これを初期化します（トークンが必要です）:
```bash
doctl auth init # Asks for the token
doctl auth init --context my-context # Login with a different token
doctl auth list # List accounts
```
デフォルトでは、このトークンはMacの`/Users/<username>/Library/Application Support/doctl/config.yaml`に平文で書き込まれます。

### Spacesアクセスキー

これらは**Spacesへのアクセス**を提供するキーです（AWSのS3やGCPのStorageのように）。

それらは**名前**、**keyid**、および**secret**で構成されています。例としては次のようになります：
```
Name: key-example
Keyid: DO00ZW4FABSGZHAABGFX
Secret: 2JJ0CcQZ56qeFzAJ5GFUeeR4Dckarsh6EQSLm87MKlM
```
### OAuthアプリケーション

OAuthアプリケーションは**Digital Oceanへのアクセスを許可**されることがあります。

[https://cloud.digitalocean.com/account/api/applications](https://cloud.digitalocean.com/account/api/applications)で**OAuthアプリケーションを作成**し、[https://cloud.digitalocean.com/account/api/access](https://cloud.digitalocean.com/account/api/access)で全ての**許可されたOAuthアプリケーション**を確認できます。

### SSHキー

[https://cloud.digitalocean.com/account/security](https://cloud.digitalocean.com/account/security)の**コンソール**から**Digital OceanチームにSSHキーを追加**することができます。

このようにして、**新しいドロップレットを作成すると、SSHキーが設定され**、パスワードなしで**SSH経由でログイン**できるようになります（新しく[アップロードされたSSHキーはセキュリティ上の理由から既存のドロップレットには設定されません](https://docs.digitalocean.com/products/droplets/how-to/add-ssh-keys/to-existing-droplet/)）。

### 関数認証トークン

**REST API経由で関数をトリガーする方法**（常に有効で、cliが使用する方法）は、**認証トークン**を使ってリクエストをトリガーすることです。
```bash
curl -X POST "https://faas-lon1-129376a7.doserverless.co/api/v1/namespaces/fn-c100c012-65bf-4040-1230-2183764b7c23/actions/functionname?blocking=true&result=true" \
-H "Content-Type: application/json" \
-H "Authorization: Basic MGU0NTczZGQtNjNiYS00MjZlLWI2YjctODk0N2MyYTA2NGQ4OkhwVEllQ2t4djNZN2x6YjJiRmFGc1FERXBySVlWa1lEbUxtRE1aRTludXA1UUNlU2VpV0ZGNjNqWnVhYVdrTFg="
```
## ログ

### ユーザーログ

**ユーザーのログ**は[**https://cloud.digitalocean.com/account/activity**](https://cloud.digitalocean.com/account/activity)にあります。

### チームログ

**チームのログ**は[**https://cloud.digitalocean.com/account/security**](https://cloud.digitalocean.com/account/security)にあります。

## 参考文献

- [https://docs.digitalocean.com/products/teams/how-to/manage-membership/](https://docs.digitalocean.com/products/teams/how-to/manage-membership/)

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