AWS学習記録 ①クラウドサービスモデル/AWSの責任共有モデル

# AWS学習記録 ①クラウドサービスモデル/AWSの責任共有モデル

## はじめに

1/23(日)に、@KurokawaKouhei さんの運営する[「AWS CloudTech」](https://kws-cloud-tech.com/)に入会しました。
AWSを基礎から学び直すための学習記録として、Qiitaに学習内容を投稿していきます。

## クラウドサービスモデルとは

クラウドサービスの提供形態のこと。
以下の記事にわかりやすい分類付けがされている。
[参考|初心者でもわかりやすい！クラウドサービスの3つの種類](https://dream.jp/cloud/tips_c/cloud02.html)

### SaaS(Software as a Service)

ユーザが利用するアプリケーションをWebサービスとして提供している形態のこと。
代表的なSaaSとして、以下のようなものがある。

- Gmail(メールサービス)
- DropBox(ストレージサービス)
- Slack(チャットサービス)
- Microsoft365(Office製品)

これらはすべてWeb上で利用することができ、コンピュータにソフトウェアをインストールする必要がない。
また、インターネットに繋がっていれば、異なる端末間でのデータの共有なども安易に行える。

デメリットとして、アプリケーションサービスとして提供されているため、後述のSaaSやIaaSに比べるとユーザ個々でカスタマイズできる範囲が薄くなる。

### PaaS(Platform as a Service)

ユーザがアプリケーションやサービスを開発するための環境を提供する形態のこと。
代表的なPaaSとして、以下のようなものがある。
- Heroku(Salesforce社)
- Vercel(Vercel社)
- kintone(サイボウズ社)

開発環境が提供されるため、ユーザは細かなインフラの設定を意識することなく、アプリケーションの開発に専念できる。

デメリットとして、OSレイヤー以下を触ることができないため、クラウドサービスの制約を意識して利用する必要がある。
また、開発環境を提供する形態であるため、一般のアプリケーション利用者への提供には向かない。
※昨今では、kintoneなどのエンドユーザでもノーコードでアプリケーションを開発できるPaaSも広がりつつある。

### IaaS(Infrastructure as a service)

OSや記憶装置、ネットワーク機器などをインターネットを介して提供する形態のこと。
サービス提供形態の特性上、特定の製品というよりは、クラウドサービスが包括的に提供していることが多い。
代表的なものは以下。

- EC2(AWSの仮想サーバサービス)
- Amazon VPC(AWSの仮想ネットワーキングサービス)
- EBS(AWSの仮想ストレージサービス)

IaaSはSaaSやPaaSに比べ、OSやミドルウェアの種類、仮想環境の性能に至るまで、決められた範囲内で自由度高く設定することができる。
ハードウェアレベルより上位のレイヤーを独自にカスタマイズすることができるため、カスタマイズ性の高さが最大の売りと言える。

デメリットとして、OSレイヤ以上の部分はすべてユーザが責任をもつ必要があるため、システム構築には高度なコンピュータの知識が必要となる。

### サービスモデルごとの責任範囲

#### SaaS
![cloudservice_layer_saas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272886/f8a2eecc-5c3a-652c-72f9-9a944411b01c.png)


#### PaaS
![cloudservice_layer_paas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272886/73983dce-6df3-23b1-e13a-a2d46084791d.png)

#### IaaS
![cloudservice_layer_iaas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272886/2224bc10-971d-fd82-158a-530b48f7b074.png)


### その他のサービスモデル

#### MBaaS(Mobile Backend as a Service)

モバイルアプリケーションのバックエンドに採用される機能を詰め合わせて提供する形態のこと。
代表的なMBaaSとして以下のようなものがある。

- Firebase(Google)
- ニフクラ(富士通)

その名の通り、モバイルアプリケーションの開発に必要な主要な機能(ユーザ管理、ソーシャルメディアとの連携、データ保管、プッシュ通知など)が提供されており、これらの機能の実装を効率的に行うことができる。

PaaSよりも機能限定的に提供されている形態であるため、モバイルアプリに限らず、システムの一部分のみMBaaSを採用するなどのユースケースも考えられる。

[参考|MBaaS（エムバース）とは？メリット・デメリット - モバイルアプリ開発サービスの特徴](https://boxil.jp/mag/a3651/)

#### FaaS(Function as a Service)

サーバレスな環境でコードを実行できる環境を提供する形態のこと。
代表的なFaaSとして以下のようなものがある。

- AWS Lambda(Amazon Web Service)
- Google Cloud Function(Google)
- IBM Cloud Function(IBM)

サーバ管理が不要で、コードの実行環境のみが提供される。
PaaSはアプリケーションの構築に集中するためのものであるのに対し、FaaSは関数(一つの機能)の実装に集中するために提供される。
多くのFaaSは、コードの実行時間に対して料金が発生する。
イベント駆動型の機能の実装において進化を発揮する。

[参考|Function-as-a-Service (FaaS) とは](https://www.redhat.com/ja/topics/cloud-native-apps/what-is-faas)

#### IDaaS(Identity as a Service)

従業員や会員といった、「人」を一意に特定するための情報(Identity)を管理するプラットフォームを提供する形態のこと。
代表的なIDaaSとして、以下のようなものがある。

- OneLogin(サイバネット)
- Okta(Hitachi)

SaaSやPaaSはアプリケーションに着目しているのに対し、IDaaSはセキュリティに着目している。
代表的な機能として、シングルサインオンや多要素認証(MFA)といったユーザの認証や、クラウドサービス間でのID連携、ActiveDirectoryとの連携などが可能であり、ID管理の煩雑さ、リスク軽減に効果が期待できる。

[参考|IDaaS（Identity as a Service）とは](https://www.cybernet.co.jp/onelogin/product/idaas/)

## AWSの責任共有モデル

[公式ドキュメント](https://aws.amazon.com/jp/compliance/shared-responsibility-model/)にて、ユーザとAWSとの責任の区分けが明確化されている。

下記の図は公式ドキュメントより拝借。EC2を利用する場合の責任の区分を表している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272886/576ae434-92ad-a698-270e-2ad76b22bdd8.png)

具体例を2点挙げる。

- ケース1) SSHに接続可能なEC2を構築しており、接続に使用する秘密鍵が流出し、その鍵を利用して悪意あるユーザが不正にアクセスをしてきた場合
    - ユーザの設定不備となるため、AWSは責任を持たない。
- ケース2) 未曾有の災害により、東京リージョンのとあるAZ(アベイラビリティゾーン)に障害が発生し、東京リージョンに構築したEC2への接続ができなくなってしまった場合
    - AWSのグローバルインフラストラクチャの障害となるため、AWSが責任を持つ。



## まとめ
- クラウドサービスにはいくつかの提供形態がある
    - SaaS
    - PaaS
    - IaaS
    - 他にも、MBaaS、FaaS、IDaaSといった提供形態もある
- 提供形態ごとにユーザ管理する範囲と、サービス提供者が管理する範囲が分かれている
- AWSでは、責任共有モデルという名称で明確化している


## おわりに
この記事はAWS初学者を導く体系的な動画学習サービス
「CloudTech」の課題カリキュラムで作成しました。
https://kws-cloud-tech.com