handson (light): aws env cloudshell (cfn)

ハンズオン(簡易版): CloudShell環境構築 (CloudFormation版)

作成者:

波田野 裕一

公開日:

2024-07-25

更新日:

2024-11-30

目的

ハンズオン用のCloudShell環境を構築します。

前提

作業権限条件

作業権限条件: 必要な権限

  • AWS(ルート)アカウント

    注釈

    自力で適宜手順の読み替えできる場合は、以下の権限のあるIAMユーザでも実施可能です。

    • AWSCloudShellFullAccess

    • AWSCloudFormationFullAccess

    • IAMFullAccess

作業環境条件

本作業は、以下の環境で行います。

AWSマネジメントコンソール環境条件

AWSマネジメントコンソール手順については、以下の環境で行います。

構成

本手順書で構築するAWSリソースの構成は以下の図のようになります。

1. CloudShell環境の構築 (ルートユーザー)

この手順で構築するAWSリソースと順番は以下の図のようになります。

1.0. AWSルートユーザーでのサインイン

1.1. CloudShell用環境の構築 (CloudFormation利用)

1.2. IAMユーザー用サインインURLの確認

1.3. AWSルートユーザーからのサインアウト

2. CloudShell環境の構築 (IAMユーザー)

警告

handson-cli-signin-userを利用するためには、以下を実施する必要があります。

  • 初期パスワードの変更

  • MFAの設定 (MFAの設定が完了するまで、MFAの設定以外の操作はできません。)

2.0. サインイン用ユーザーでのサインイン

注釈

サインイン後、パスワードの変更が要求されます。

2.1. MFAの設定

注釈

サインイン直後にMFAの設定をする必要があります。

2.2. サインイン用ユーザーのサインアウト

注釈

MFAの設定後、サインインしなおすと、MFAの設定以外の操作ができるようになります。

警告

複数のタブでAWSマネジメントコンソールを開いている場合、全てのタブについてサインアウトをしてください。

(一部のタブを開いたまま、再サインインした場合、MFA設定フラグがfalseのままになり、次のスイッチロールに失敗する可能性があります。)

3. CloudShell環境の利用

3.0. サインイン用ユーザーのサインイン

警告

この手順においてスイッチロールに失敗する場合、マネジメントコンソールの右上に表示されているリージョンを「禁止されていないリージョン」に切り替えるか、IAMなどのグローバルサービスのダッシュボードに画面を切り替えてください。

(リージョンの表示があるサービスを開いている場合に、OrganizationsのSCP(サービスコントロールポリシー)などで禁止されているリージョンを選択しているときは、スイッチロールに失敗します。)

3.1. ハンズオンの事前作業

"handson-cli-ctrl-role"(ロール)にスイッチロールし、ハンズオンに必要なIAMポリシーをインスタンスプロファイル(IAMロール)にアタッチします。

権限制御用IAMロールへのスイッチロール

  • 右上のメニューをクリックします。

  • "ロールの切り替え"(ボタン)をクリックします。

    • "Switch Role"(画面)が表示されます。

  • 以下を入力します。

    Account ID

    AWS ID(12桁)を入力します。

    IAM role name

    "handson-cli-env/handson-cli-ctrl-role"を入力します。

  • "Switch Role"(ボタン)をクリックします。

    • 右上の表示が"handson-cli-env/handson-cloushell-user@XXXXXXXXXXXX"になっていることを確認します。

ハンズオンに必要な権限のアタッチ

ハンズオンに必要なIAMポリシーをインスタンスプロファイル(IAMロール)にアタッチします。

注釈

今回は以下のAWS管理IAMポリシーをアタッチします。

  • AWSCloudShellFullAccess

  • ReadOnlyAccess

コマンド:

ARRAY_IAM_POLICY_NAMES='AWSCloudShellFullAccess ReadOnlyAccess'

コマンド:

array_iam_policy_arns=$(
  echo $( \
    for i in $(echo "${ARRAY_IAM_POLICY_NAMES}");do
      aws iam list-policies \
        --query "Policies[?PolicyName == \`${i}\`].Arn" \
        --output text
    done \
  ) \
) \
  && echo "${array_iam_policy_arns}"

結果(例):

arn:aws:iam::aws:policy/AWSCloudShellFullAccess arn:aws:iam::aws:policy/ReadOnlyAccess

コマンド:

for i in $(echo "${array_iam_policy_arns}");do
  aws iam attach-role-policy \
    --role-name handson-cli-env-role \
    --policy-arn ${i}
done

結果(例):

(出力なし)

3.2. (参考) CloudShellハンズオンの実施

"handson-cli-env-role"(ロール)にスイッチロールし、ハンズオンを実施します。

ハンズオン環境用IAMロールへのスイッチロール

  • 右上のメニューをクリックします。

  • "ロールの切り替え"(ボタン)をクリックします。

    • "Switch Role"(画面)が表示されます。

  • 以下を入力します。

    Account ID

    AWS ID(12桁)を入力します。

    IAM role name

    "handson-cli-env/handson-cli-env-role"を入力します。

  • "Switch Role"(ボタン)をクリックします。

    • 右上の表示が"handson-cli-env/handson-cloushell-user@XXXXXXXXXXXX"になっていることを確認します。

ハンズオンの実施 (handson-cli-env-role)

"handson-cli-env-role"(ロール)にスイッチロールし、ハンズオンを実施します。

注釈

  • ハンズオンを実施します。

    コマンド:

    aws s3 ls
    

    結果(例):

    2022-07-19 22:47:06 cf-templates-94ho6sk5misho-ap-northeast-1
    

3.3. ハンズオンの事後作業

"handson-cli-ctrl-role"(ロール)にスイッチロールし、ハンズオンで使用したIAMポリシーをインスタンスプロファイル(IAMロール)からデタッチします。

権限制御用IAMロールへのスイッチロール

  • 右上のメニューをクリックします。

  • "ロールの切り替え"(ボタン)をクリックします。

    • "Switch Role"(画面)が表示されます。

  • 以下を入力します。

    Account ID

    AWS ID(12桁)を入力します。

    IAM role name

    "handson-cli-env/handson-cli-ctrl-role"を入力します。

  • "Switch Role"(ボタン)をクリックします。

    • 右上の表示が"handson-cli-env/handson-cloushell-user@XXXXXXXXXXXX"になっていることを確認します。

ハンズオンで使用した権限のデタッチ

"handson-cli-ctrl-role"(ロール)にスイッチロールし、"ハンズオン開始前"にアタッチしたIAMポリシーをインスタンスプロファイル(IAMロール)からデタッチします。

コマンド:

ARRAY_IAM_POLICY_NAMES='AWSCloudShellFullAccess ReadOnlyAccess'

コマンド:

array_iam_policy_arns=$(
  echo $( \
    for i in $(echo "${ARRAY_IAM_POLICY_NAMES}");do
      aws iam list-policies \
        --query "Policies[?PolicyName == \`${i}\`].Arn" \
        --output text
    done \
  ) \
) \
  && echo "${array_iam_policy_arns}"

結果(例):

arn:aws:iam::aws:policy/AWSCloudShellFullAccess arn:aws:iam::aws:policy/ReadOnlyAccess

コマンド:

for i in $(echo "${array_iam_policy_arns}");do
  aws iam detach-role-policy \
    --role-name handson-cli-env-role \
    --policy-arn ${i}
done

結果(例):

(出力なし)

サインイン用ユーザーへのスイッチバック

  • AWSマネジメントコンソールのメニューバー右上のIAMユーザー名をクリックします。

    • プルダウンメニューが表示されます。

  • プルダウンメニューの"サインアウト"(ボタン)をクリックします。

    • サインアウトが実行されます。

  • 右上のメニューをクリックします。

  • "スイッチバック"(ボタン)をクリックします。

    • 右上の表示が"handson-cli-signin-user@XXXX-XXXX-XXXX"になっていることを確認します。

3.4. サインイン用ユーザーのサインアウト

アンケート

今後の参考にするため、本手順についてご意見・コメントをお願いします。

注釈

  • 必須項目はありません。お気軽にご回答ください。

  • 内容が違えばお一人何回回答していただいても問題ありません。

  • はまりどころや誤字・脱字などの修正のご指摘もお待ちしています。

注釈

このアンケートシステムはS3 + Cognitoで構築しています。

クリーンアップ. CloudShell環境の破棄

CloudShell環境が不要になった場合は破棄を行います。

0. AWSルートユーザーでのサインイン

1. MFAの無効化・削除

2. CloudShell用環境の破棄 (CloudFormation利用)

3. AWSルートユーザーからのサインアウト