AWS再入門ブログリレー2022 AWS CloudShell 編

弊社コンサルティング部による『AWS 再入門ブログリレー 2022』の6日目のエントリでテーマはAWS CloudShellです。凄くお手軽なサービスなのですが、意外と使ったことないという方はいらっしゃるのではないでしょうか?この記事をきっかけに触って頂ければ幸いです。
2022.02.08

こんにちは、コンサルティング部のべこみんです。

当エントリは弊社コンサルティング部による『AWS 再入門ブログリレー 2022』の6日目のエントリです。

このブログリレーの企画は、普段 AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

AWSをこれから学ぼう!という方にとっては文字通りの入門記事として、またすでにAWSを活用されている方にとってもAWSサービスの再発見や2022年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。

では、さっそくいってみましょう。6日目のテーマはAWS CloudShellです。

無料で使える超お手軽サービスですが、意外と使ったことが無いという方も多いのではないでしょうか?
本記事では公式のチュートリアルもご紹介していますので、是非本記事をきっかけにAWS CloudShellを触ってみて下さい。

AWS CloudShellについて

AWS公式ドキュメントをもとに、AWS CloudShellについてまとめてみました。

AWS CloudShellってどういうサービス?

AWS CloudShellは、Webブラウザ(AWSマネージメントコンソール)上からお手軽にシェルを実行出来るサービスです。
シェル(Bash, PowerShell, Z Shell)やAWS CLIがプリインストールされているため、各コマンドラインツールがすぐに利用可能です。

2022/02/08時点でAWS CloudShellが利用可能なリージョンは以下の通りです。

リージョン名 リージョン
米国東部 (オハイオ) us-east-2
米国東部(バージニア北部) us-east-1
米国西部 (オレゴン) us-west-2
アジアパシフィック (ムンバイ) ap-south-1
アジアパシフィック (シドニー) ap-southeast-2
アジアパシフィック (東京) ap-northeast-1
欧州 (フランクフルト) eu-central-1
欧州 (アイルランド) eu-west-1

また、2022/02/08時点でサポートされているWebブラウザは以下の通りです。

ブラウザ バージョン
Google Chrome 最新の3つのメジャーバージョン
Mozilla Firefox 最新の3つのメジャーバージョン
Microsoft Edge 最新の3つのメジャーバージョン
MacOS版 Apple Safari 最新の2つのメジャーバージョン

料金

AWS CloudShell自体の料金は無料です。
また、リージョン毎に1GBの永続ストレージ($HOME)が付いていますが、このストレージも無料で利用可能です。

使い方

CloudShellの起動は、マネージメントコンソールの画面上部にあるコンソールナビゲーションバーより、下記の2通りのいずれかで行います。
起動に数十秒かかることもありますが、これだけですぐに利用可能です。

  • AWS CloudShellアイコンをクリックする。
  • 検索ボックスに「cloudshell」と入力し、サービス「CloudShell」をクリックする。

想定されるユースケース

  • 簡単なAWS CLIコマンドを実行したい場合
  • 気軽にシェルコマンドを実行したい場合
  • アクセスキーを使うことなく、AWSサービスにCLI経由で安全にアクセスしたい場合
  • SLを走らせたい場合

利用可能なアクション

Tabs Layout

  • New Tab
    • 新規タブを追加
    • 最大で20個まで展開可能
  • Split into rows
    • 画面を上下に分割し、下側に新規タブを追加
  • Split into columns
    • 画面を左右に分割し、右側に新規タブを追加

Files

  • Download file
    • AWS CloudShell環境にある任意のファイルをローカル環境にダウンロード出来ます。
  • Upload file
    • ローカル環境にあるサイズが1GBまでの任意のファイルをAWS CloudShell環境にアップロード出来ます。

Restart AWS CloudShell

現在のセッションを終了し、新しくセッションを開始します。
セッションを終了する際、永続ディレクトリであるホームディレクトリ($HOME)以外のディレクトリ内のデータが削除されることに注意して下さい。

Delete AWS CloudShell home directory

現在の環境が削除され、新しくデフォルト設定のAWS CloudShell環境が作成されます。
この操作は不可逆の操作ですので、利用の検討は慎重に行いましょう。

利用可能なオプション

  • フォントサイズ(Font size)
    • 5段階
  • テーマ(AWS CloudShell theme)
    • Light
    • Dark
  • セーフペースト機能の有効化(Enable Safe Paste)
    • 複数行のテキストをペーストする際に事前確認ダイアログを出してくれる機能
    • デフォルトではONで、OFFにすることも可能

利用上の注意点

  • 月間使用制限
    • 公式ドキュメントに詳細な時間は明記されていませんが、AWS CloudShellにはリージョン毎に利用時間の月間制限があるようです。
  • セッションについて
    • 無操作状態が続いた場合、約20分でセッションが終了します。(たとえプロセスが実行されていたとしても、キーボードやポインタの操作が無い限りは無操作状態と判断されます。)
    • 約12時間連続で実行されているセッションは、操作状態が続いていても自動的に終了します。
  • 同時実行数
    • 1つのリージョン内で同時に実行出来るシェルの上限数は10個です。

権限

まず、AWS CloudShellを起動するには最低限いくつかのIAMポリシーが必要です。
起動そのものに使わないポリシーも含まれていますが、AWS CloudShellに用意されている各機能を利用するためにも、起動ユーザーには「AWS CloudShellFullAccess」というAWS管理ポリシーをアタッチしておきましょう。
さらに、AWS CLIなどを使用してAWS CloudShellからAWSサービスを利用する場合、AWS CloudShellを起動したユーザーに該当のサービスを扱う権限が付与されている必要があります。

また、AWS CloudShellユーザーはsudo権限を持っています。
必要なソフトウェアがある場合にはsudoコマンドで権限を昇格してインストール可能です。

セキュリティ

ベストプラクティス

AWS CloudShellにおけるベストプラクティスの一部をご紹介します。

  • 最小権限の付与
    • AWS CloudShellを実行するユーザーは、必要な操作(ファイルのダウンロードやアップロードなど)のみが実行出来るようにIAMポリシーを設定しましょう。
  • セーフペースト機能の有効化
    • 有効化することで、外部ソースからコピーしたテキスト内の潜在的なセキュリティリスクをキャッチします。 (デフォルトでは有効)
  • シェルスクリプトを誤って変更した場合のロールバックメカニズム
    • シェル環境が起動されるたびに実行されるシェルスクリプトを誤って編集し、アクセス出来なくなった場合はActionsの「Delete AWS CloudShell home directory」を行いましょう。
  • バージョン管理システムを使ったコードの管理
    • コードはAWS CodeCommitなどのバージョン管理ツールを使って安全に保存しましょう。

責任範囲

AWS CloudShellにおけるユーザーとAWSの責任範囲を簡単にまとめました。

  • ユーザーの責任範囲
    • 主にクラウド内のセキュリティ
    • AWS CloudShell環境にインストールされたサードパーティ製ソフトウェアへのパッチ適用
  • AWSの責任範囲
    • 主にクラウドのセキュリティ
    • インフラストラクチャの保護

データ暗号化

保管時の暗号化

AWS CloudShellは、永続ストレージであるホームディレクトリ($HOME)に保存されたデータを、AWS KMSが提供する暗号鍵を用いて暗号化してくれます。

転送時の暗号化

クライアントのWebブラウザとAWS CloudShell間のデータ通信は、デフォルトで全てHTTPS/TLS接続を介して行われます。

ロギングとモニタリング

AWS CloudShellはAWS CloudTrailと統合されているため、AWS CloudShellで実行されたAPIコールを記録することが出来ます。
証跡を作成することでS3バケットにイベントの記録を残すことが出来ますが、証跡を作成しなくてもCloudTrailコンソールイベント履歴から最新のイベントを確認することが出来ます。

環境

コンピューティング環境リソース

OS CPU メモリ ストレージ
Amazon Linux2 1vCPU 2Gib RAM 1GBの永続ストレージ(※)

※ ホームディレクトリ($HOME)はセッション切断後も中身が保持される永続ストレージですが、120日間CloudShellへのアクセスが無い場合は自動的に削除されます。このストレージはAWS CloudShellを起動したリージョン毎に分かれています。

デフォルトで導入されているソフトウェア一覧

AWS CloudShell環境にデフォルトで導入されているソフトウェアについて、2022/02/08時点で導入されているバージョンを添えて一覧化してみました。

ソフトウェア名 種類 バージョン
Bash シェル 4.2.46
PowerShell シェル 7.1.4
Z Shell シェル 5.7.1
AWS CLI CLI 2.4.15
EB CLI CLI 3.20.2
Amazon ECS CLI CLI 1.21.0
AWS SAM CLI CLI 1.33.0
Node.js(npm付き) ランタイム 14.18.3
npm 6.14.15
Node.js内のSDK for JavaScript ランタイム 2.1000.0
Python ランタイム − (下記)
Python 2 2.7.18
Python 3 3.7.10
pip (pip3) 20.2.2
SDK for Python (Boto3) ランタイム 1.18.54
bash-completion その他 2.1
Git用のCodeCommit ユーティリティ その他 1.15.1
Git その他 2.32.0
iputils その他 s20160308
jq その他 1.5
make その他 3.82
man その他 2.6.3
procps その他 3.3.10
SSHクライアント その他 OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
sudo その他 1.8.23
tar その他 1.26
tmux その他 1.8
vim その他 8.2
wget その他 1.14
zip その他 3.0
unzip その他 6.00

チュートリアル

AWS CloudShellには1つの入門チュートリアルと3つのチュートリアルが用意されています。
今回は再入門ブログということで、入門チュートリアル「AWS CloudShellの開始方法」をやってみました。

前提条件

  • 以下のIAMポリシーがアタッチされたIAMユーザーでAWS CloudShellを起動すること。
    • AWS CloudShellFullAccess
    • s3:CreateVucket
    • s3:PutObject
  • ローカル環境に下記コードが記載された「add_prog.py」という名前のファイルを用意すること。

渡された2つの数字を足し合わせて合計値を出力するだけの簡単なプログラムですね。

import sys
x=int(sys.argv[1])
y=int(sys.argv[2])
sum=x+y
print("The sum is",sum)

やってみた

チュートリアルの流れは以下の通りです。

  1. AWSマネージメントコンソールにサインインする。
  2. 任意のリージョンを選択し、AWS CloudShellを起動する。
  3. AWS CloudShellへファイルをアップロードする。
  4. ファイルのコードを編集し、コマンドラインから実行する。
  5. AWS CLIを使用し、ファイルをAmazon S3バケットにオブジェクトとして追加する。

それではいきましょう。

1. AWSマネージメントコンソールにサインインする。

AWSマネージメントコンソールにサインインします。(画像省略)

2. 任意のリージョンを選択し、AWS CloudShellを起動する。

今回は東京リージョンを選択し、バナーのAWS CloudShellアイコンをクリックしてAWS CloudShellを起動しました。

3. AWS CloudShellへファイルをアップロードする。

AWS CloudShellのActionsより、ローカル環境にある「add_prog.py」をアップロードします。


lsコマンドを使用して、無事にアップロード出来たことを確認出来ました。

4. ファイルのコードを編集し、コマンドラインから実行する。

vimを使って「add_prog.py」の中身を編集します。
元々2つの引数から合計値を算出するプログラムでしたが、3つの引数の合計値を算出するように編集しました。

編集後、pythonコマンドで実行します。

無事に実行出来ていますね。

5. AWS CLIを使用し、ファイルをAmazon S3バケットにオブジェクトとして追加する。

最後にAWS CLIでを使用して、バケットの作成と作成したバケットへのオブジェクト追加を行います。
下記画像のようなメッセージが返ってきていれば成功です。(画像を取り忘れてしまいましたが、S3のコンソール上からバケットとオブジェクトの存在を確認出来ました。)

以上で入門チュートリアルは完了です!

おまけ(記事紹介)

弊社ブログの中から、個人的に気になったAWS CloudShell関連の記事をいくつかご紹介します。

AWS CloudShellでSLを走らせてみた #reinvent

AWS CloudShell のホームディレクトリの保存期間に関する注意事項 #reinvent

AWS CloudShell のホームディレクトリとずっと一緒にいる方法

AWSのCLI作業はどこで行う? 安全に管理するパターンとメリデメ集

AWS CloudShellで「rm -rf /*」を実行してみた

CloudShellを最小権限で起動してみた

最後に

以上、『AWS 再入門ブログリレー 2022』の6日目のエントリ『AWS CloudShell』編でした。

AWS CloudShellを使ったことがない方、使い方が分からない方の参考になれば幸いです。

明日、2/9(水)はNuNuさんの「Amazon EFS編」の予定です!

コンサルティング部のべこみんでした!