
CloudGoat は Rhino Security Labs の "Vulnerable by Design" AWS デプロイメントツールです
CloudGoatはRhino Security Labsの「Vulnerable by Design」クラウドデプロイメントツールです。
ヘルプの入手先: Rhino Security Labs Discord、またはStack Overflow
問題の報告先: https://github.com/RhinoSecurityLabs/cloudgoat/issues
メンテナンス: CloudGoatコミュニティ
CloudGoatはRhino Security Labsの「Vulnerable by Design」クラウドデプロイメントツールです。複数の「キャプチャ・ザ・フラッグ」形式のシナリオを作成・完了することで、クラウドサイバーセキュリティのスキルを磨くことができます。各シナリオは、クラウドリソースを組み合わせて構成され、構造化された学習体験を提供します。簡単なシナリオもあれば難しいシナリオもあり、多くは勝利への複数の経路が用意されています。攻撃者として、あなたのミッションは環境を探索し、脆弱性を特定し、シナリオの目標に到達するために悪用することです。
以下がCloudGoatの主な目標です:
先に進む前に、以下の警告に注意してください!
警告 #1: CloudGoatは、意図的に脆弱なリソースをあなたのアカウントに作成します。本番環境や機密リソースの隣にCloudGoatをデプロイしないでください。
警告 #2: CloudGoatは自分が作成したリソースのみを管理できます。シナリオの過程で自分でリソースを作成した場合は、
destroyコマンドを実行する前に手動で削除する必要があります。
Linux```bash sudo apt install terraform awscli azure-cli jq -y
Mac```bash
brew install terraform awscli azure-cli jq
CloudGoatをインストールするには、システムが上記の要件を満たしていることを確認し、次のコマンドを実行してください:```bash pipx install cloudgoat
また、いくつかのクイック設定コマンドを実行すると良いでしょう - 後で時間を節約できます:
- AWS向けに設定 - CloudGoatに使用するAWSプロファイルを指定します。```bash
cloudgoat config aws
Azure用に設定 - CloudGoatに使用するAzureサブスクリプションを指定します。```bash cloudgoat config azure
Azureにログイン - CloudGoatはアクティブな`az`アカウントを使用します。```bash
az login
ホワイトリストの設定```bash cloudgoat config whitelist --auto
今や、あなたのコマンドにより、CloudGoatはクラウド上にシナリオのインスタンスを`create`できます。環境が準備できると、プロジェクトのベースディレクトリにシナリオ名と一意のシナリオIDが付加された新しいフォルダが作成されます。このフォルダ内には`start.txt`というファイルが含まれ、シナリオを開始するために必要なすべてのリソースが記述されています。これらのリソースは、`create`コマンド完了時にコンソールにも出力されます。また、`cloudgoat`/`cloudgoat.pub`という名前のSSHキーペアが作成されることもあります。
> **注意:** シナリオインスタンスのフォルダや内部のファイルを削除または変更しないでください。CloudGoatがシナリオのリソースを管理できなくなる可能性があります。
シナリオに取り組む際は、必要に応じてシナリオのREADMEを参照してください。行き詰まった場合は、各ルートのウォークスルーの下部にチートシートへのリンクがあります。
シナリオが終了したら、自分で作成したリソースをすべて削除し(注意:CloudGoatは自身が作成したリソースのみ管理できます)、その後`destroy`コマンドを実行してください。その後、Webコンソールをざっと確認することをお勧めします。削除漏れがないか確認するためです。
CloudGoatのコマンドの完全なドキュメントは、[こちら「使用ガイド」セクション](#usage-guide)で読むことができます。
## CloudGoatのDockerイメージの使い方
[](http://play-with-docker.com?stack=https://raw.githubusercontent.com/RhinoSecurityLabs/cloudgoat/master/docker_stack.yml)
### オプション1: デフォルトのエントリポイントで実行```console
docker run -it rhinosecuritylabs/cloudgoat:latest
警告: このコマンドを実行すると、ローカルの AWS 設定ファイルが起動時に Docker コンテナにマウントされます。つまり、コンテナにアクセスできるユーザーは、ホストコンピュータの AWS 認証情報にアクセスできることになります。```console docker run -it -v ~/.aws:/root/.aws/ rhinosecuritylabs/cloudgoat:latest
## 利用可能なシナリオ
(難易度別)
<details open>
<summary><strong>簡単</strong></summary>
---
### iam_enum_basics (簡単)
`cloudgoat create iam_enum_basics`
このシナリオでは、Bobという低権限IAMユーザーのアクセスキーから始めます。AWS CLIを使用して徹底的なIAM列挙を行うことがタスクです。管理ポリシー、インラインポリシー、グループメンバーシップ、引き受け可能なロールを調査することで、5つの異なるフラグを見つけることができます。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/iam_enum_basics/README.md)
Tyler Ramsbey 提供
---
### data_secrets (簡単)
`cloudgoat create data_secrets`
このシナリオでは、制限された権限を持つIAMユーザーから始めます。ユーザーデータに認証情報が漏洩している設定ミスのあるEC2インスタンスを特定し、SSHアクセスを取得することがタスクです。そこから、インスタンスメタデータサービス(IMDS)を悪用してロールを奪い、Lambda関数を列挙して隠れた環境変数を見つけ、最終的にAWS Secrets Managerに保存されたシークレットへのアクセス権を持つユーザーを侵害します。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/data_secrets/README.md)
Tyler Ramsbey 提供
---
### beanstalk_secrets (簡単)
`cloudgoat create beanstalk_secrets`
このシナリオでは、Elastic Beanstalkへの限定的なアクセスを許可する低権限のAWS認証情報が提供されます。Elastic Beanstalk環境を列挙し、セカンダリ認証情報を含む設定ミスのある環境変数を発見することがタスクです。そのセカンダリ認証情報を使用してIAM権限を列挙し、最終的に管理者ユーザーのアクセスキーを作成します。管理者権限でAWS Secrets Managerに保存された最終フラグを取得します。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/beanstalk_secrets/README.md)
Tyler Ramsbey 提供
---
### sns_secrets (簡単)
`cloudgoat create sns_secrets`
このシナリオでは、AWSアカウントへの基本的なアクセス権から始めます。自分の権限を列挙し、購読できるSNSトピックを発見し、漏洩したAPIキーを取得し、最後にAPIキーを使用してAPI Gatewayにアクセスし、最終フラグを取得します。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/sns_secrets/README.md)
Tyler Ramsbey 提供
---
### iam_privesc_by_key_rotation (簡単)
`cloudgoat create iam_privesc_by_key_rotation`
安全でないIAM権限を悪用してアクセス権限を昇格させます。他のユーザーの認証情報を管理するロールから始め、設定の弱点を見つけて"admin"ロールにアクセスします。adminロールを使用して、Secrets Managerからフラグを取得します。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/iam_privesc_by_key_rotation/README.md)
Infrasec.sh 提供
---
### iam_privesc_by_rollback (簡単)
`cloudgoat create iam_privesc_by_rollback`
非常に制限されたIAMユーザーから始め、攻撃者は以前のIAMポリシーバージョンを確認し、フル管理者権限を許可するものを復元することで、権限昇格の悪用を実現します。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/iam_privesc_by_rollback/README.md)
---
### lambda_privesc (簡単)
`cloudgoat create lambda_privesc`
IAMユーザーChrisとして開始し、攻撃者はLambdaへのフルアクセスとロール引き継ぎ権限を持つロールを引き受けられることを発見します。攻撃者はこれらの新しい権限を使用して権限昇格を実行し、フル管理者権限を取得します。
> **注:** このシナリオでは、いくつかのAWSリソースを作成する必要がある場合があります。CloudGoatは自身が作成したリソースのみを管理できるため、`./cloudgoat destroy`を実行する前に手動でそれらを削除する必要があります。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/lambda_privesc/README.md)
---
### sqs_flag_shop (簡単)
`cloudgoat create sqs_flag_shop`
まず、FLAGを購入できるSHOPページから始めます。ウェブサイトには複数のページがあり、ソースコードが公開されています。攻撃者はコードを分析して脆弱性を見つけ、その特権を使用してFLAGを購入します。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/sqs_flag_shop/README.md)
</details>
<details>
<summary><strong>中程度</strong></summary>
### static (中程度)
`cloudgoat create static`
このシナリオでは、企業のポータルにアクセスする外部の攻撃者として行動します。Webアプリケーションを分析することで、公開S3バケットから重要なJavaScriptライブラリを読み込んでいることを特定します。バケットの権限設定の誤りを発見し、悪意のあるコードでライブラリを上書きする「サプライチェーン攻撃」を実行し、内部の管理者ボットがログインするのを待ちます。目標は、ボットの認証情報をキャプチャし、バケットに流出させることです。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/static/README.md)
### vulnerable_cognito (中程度)
`cloudgoat create vulnerable_cognito`
このシナリオでは、バックエンドにAWS Cognitoを備えたサインアップおよびログインページが提示されます。制限を回避し、Amazon Cognitoの設定ミスを悪用して権限を昇格させ、Cognito Identity Poolの認証情報を取得する必要があります。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/vulnerable_cognito/README.md)
TrustOnCloud 提供
---
### vulnerable_lambda (中程度)
`cloudgoat create vulnerable_lambda`
このシナリオでは、'bilbo'ユーザーとして開始します。より多くの権限を持つロールを引き受け、ユーザーにポリシーを適用するLambda関数を発見し、その関数の脆弱性を悪用してbilboユーザーの権限を昇格させ、シークレットを検索します。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/vulnerable_lambda/README.md)
---
### cloud_breach_s3 (中程度)
`cloudgoat create cloud_breach_s3`
アクセスも権限も持たない匿名の部外者として開始し、設定ミスのあるリバースプロキシサーバーを悪用してEC2メタデータサービスにクエリを送信し、インスタンスプロファイルキーを取得します。その後、それらのキーを使用してS3バケットから機密データを発見、アクセス、流出させます。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/cloud_breach_s3/README.md)
---
### iam_privesc_by_attachment (中程度)
`cloudgoat create iam_privesc_by_attachment`
非常に制限された権限セットから開始し、攻撃者はインスタンスプロファイルアタッチメント権限を活用して、自身よりもはるかに大きな特権を持つ新しいEC2インスタンスを作成できます。この新しいEC2インスタンスにアクセスすることで、攻撃者はターゲットアカウント内で完全な管理権限を獲得し、シナリオの目標である「cg-super-critical-security-server」を削除し、さらに悪意のある行動の準備を整えます。
> **注:** このシナリオでは、いくつかのAWSリソースを作成する必要がある場合があります。CloudGoatは自身が作成したリソースのみを管理できるため、`./cloudgoat destroy`を実行する前に手動でそれらを削除する必要があります。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/iam_privesc_by_attachment/README.md)
---
### ec2_ssrf (中程度)
`cloudgoat create ec2_ssrf`
IAMユーザーSolusとして開始し、攻撃者はLambda関数に対するReadOnly権限を持っていることを発見します。Lambda関数内のハードコードされたシークレットが、サーバーサイドリクエストフォージェリ(SSRF)に対して脆弱なWebアプリケーションを実行しているEC2インスタンスへ導きます。脆弱なアプリを悪用し、EC2メタデータサービスからキーを取得した後、攻撃者はプライベートS3バケットにアクセスし、そこにあるキーセットを使用してLambda関数を呼び出し、シナリオを完了します。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/ec2_ssrf/README.md)
---
### ecs_takeover (中程度)
`cloudgoat create ecs_takeover`
外部のWebサイトへのアクセスから開始し、攻撃者はリモートコード実行の脆弱性を見つける必要があります。RCEを使用することで、攻撃者はWebサイトコンテナで利用可能なリソースにアクセスできます。複数のECS設定ミスを悪用することで、攻撃者はECSにターゲットコンテナを侵害されたインスタンスに再スケジュールさせることを可能にするIAM権限を取得します。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/ecs_takeover/README.md)
---
### rds_snapshot (中程度)
`cloudgoat create rds_snapshot`
このシナリオでは、ユーザー'David'から開始します。Davidを通じて、権限を活用して認証情報を盗むことができます。盗んだ認証情報を使用して、攻撃者はRDSの脆弱性を悪用し、データベースにアクセスしてフラグを取得できます。
> **注:** このシナリオでは、いくつかのAWSリソースを作成する必要がある場合があります。CloudGoatは自身が作成したリソースのみを管理できるため、`./cloudgoat destroy`を実行する前に手動でそれらを削除する必要があります。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/rds_snapshot/README.md)
---
### glue_privesc (中程度)
`cloudgoat create glue_privesc`
このシナリオは、CSVファイルをアップロードし、Glueサービスを通じてデータ可視化を実行するWebページから開始します。
攻撃者はSQLインジェクション攻撃によりWebページ上の認証情報を盗み、リバースシェルをアップロードしてGlue Jobを作成し、シークレット文字列を取得します。
> **注:** このシナリオでは、いくつかのAWSリソースを作成する必要がある場合があります。CloudGoatは自身が作成したリソースのみを管理できるため、`./cloudgoat destroy`を実行する前に手動でそれらを削除する必要があります。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/glue_privesc/README.md)
---
### agentcore_identity_confusion (中程度)
`cloudgoat create agentcore_identity_confusion`
このシナリオでは、bedrock agentcoreコードインタプリタを管理できるAWS認証情報が提供されます。これを活用して、他のagentcoreランタイムエージェントが使用する機密データにアクセスすることがタスクです。bedrock knowledgebaseに保存されたフラグへのアクセス方法を解明します。
> **注:** このシナリオでは、いくつかのAWSリソースを作成する必要がある場合があります。CloudGoatは自身が作成したリソースのみを管理できるため、`./cloudgoat destroy`を実行する前に手動でそれらを削除する必要があります。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/agentcore_identity_confusion/README.md)
Sonrai Security 提供
---
### bedrock_agent_hijacking (中程度)
`cloudgoat create bedrock_agent_hijacking`
このシナリオでは、Bedrock Agentを呼び出し、Lambda関数を更新できるAWS認証情報が提供されます。エージェントを分析し、どのようにしてリアルタイム情報にアクセスするかを理解することがタスクです。このフローに介入し、S3に保存されたフラグを特定して抽出します。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/bedrock_agent_hijacking/README.md)
Sonrai Security 提供
</details>
<details>
<summary><strong>難しい</strong></summary>
### rce_web_app (難しい)
`cloudgoat create rce_web_app`
IAMユーザーLaraとして開始し、攻撃者はロードバランサーとS3バケットを探索して脆弱性の手がかりを探し、脆弱なWebアプリに対するRCEエクスプロイトに至り、機密ファイルを露呈させ、最終的にシナリオの目標である高度に保護されたRDSデータベースインスタンスへのアクセスに至ります。
別の方法として、攻撃者はIAMユーザーMcDuckとして開始し、S3バケットを列挙し、最終的にSSHキーを見つけてEC2サーバーとその先のデータベースへの直接アクセスを得ることができます。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/rce_web_app/README.md)
---
### codebuild_secrets (難しい)
`cloudgoat create codebuild_secrets`
IAMユーザーSoloとして開始し、攻撃者はまずCodeBuildプロジェクトを列挙して探索し、その中でIAMユーザーCalrissianの保護されていないIAMキーを発見します。その後、Calrissianとして操作し、攻撃者はRDSデータベースを発見します。データベースの内容に直接アクセスできないため、攻撃者はRDSスナップショット機能を巧妙に利用して、シナリオの目標である一対のシークレット文字列を取得します。
別の方法として、攻撃者はSSMパラメータを探索し、EC2インスタンスへのSSHキーを発見する場合があります。メタデータサービスを使用して、攻撃者はEC2インスタンスプロファイルのキーを取得し、ターゲット環境の奥深くに侵入し、最終的により遠回りな経路で元のデータベースとその内部のシナリオ目標(一対のシークレット文字列)へのアクセスを得ることができます。
> **注:** このシナリオでは、いくつかのAWSリソースを作成する必要がある場合があります。CloudGoatは自身が作成したリソースのみを管理できるため、`./cloudgoat destroy`を実行する前に手動でそれらを削除する必要があります。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/codebuild_secrets/README.md)
---
### detection_evasion (難しい)
`cloudgoat create detection_evasion`
このシナリオの目標は、検出されることなく両方のシークレットの値を読み取ることです。シークレットは両方ともSecrets Managerに保存されており、その値は次の形式です (cg-secret-XXXXXX-XXXXXX)。
このシナリオは、他のCloudGoatシナリオとは大きく異なります。detection_evasionでは、目標がより明確に示され、チャレンジはアラームをトリガーせずにそれらを完了することです。このシナリオにはより多くのセットアップが必要であり、プレイにかかる時間も長くなります(複数回プレイしたくなるでしょう)。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/detection_evasion/README.md)
---
### ecs_efs_attack (難しい)
`cloudgoat create ecs_efs_attack`
"ruse" EC2へのアクセスから開始し、ユーザーはインスタンスプロファイルを活用して実行中のECSコンテナにバックドアを仕掛けます。バックドアを仕掛けたコンテナを使用して、攻撃者はコンテナメタデータAPIから認証情報を取得できます。これらの認証情報により、攻撃者は適切なタグが設定された任意のEC2でセッションを開始できます。攻撃者はその権限を使用してAdmin EC2のタグを変更し、セッションを開始します。Admin EC2に入った後、攻撃者はサブネットをポートスキャンしてマウント可能なEFSを探します。マウント後、攻撃者はElastic File Systemからフラグを取得できます。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/ecs_efs_attack/README.md)
---
### ecs_privesc_evade_protection (中程度)
`cloudgoat create ecs_privesc_evade_protection`
ユーザーはまず、EC2内のコンテナへの動作中のWebサービスにアクセスすることから始めます。攻撃者は、Webサービスの脆弱性を悪用してEC2のメタデータAPIから認証情報を取得するか、コンテナを制御できます。この認証情報により、攻撃者は特定のロールを持つ新しいコンテナを起動し、それを制御できます。このアクションに基づいて、権限昇格を実行し、S3内のFLAGを読み取ります。
> **注:** このシナリオでは、デプロイ中にコンテナイメージをビルドしてECRにプッシュするため、Dockerがローカルにインストールされている必要があります。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/ecs_privesc_evade_protection/README.md)
---
### secrets_in_the_cloud (難しい)
`cloudgoat create secrets_in_the_cloud`
制限された権限を持つIAMユーザーとして、攻撃者はAWSリソースを調査して手がかりや隠された情報を発見することから旅を始めます。この調査の結果、シナリオの主要目標であるSecrets Managerから最終シークレットを取得するためのロールを獲得することになります。
[シナリオページを見る](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/secrets_in_the_cloud/README.md)
</details>
## 使用ガイド
CloudGoatコマンドの基本的な構造は以下の通りです。
> `cloudgoat [ コマンド ] [ サブコマンド ] [ --引数名 ] [ 引数値 ]`
CloudGoatの5つの主要コマンドを以下にまとめます。
### create
`create [ シナリオ名 ]` は、選択したAWSアカウントにシナリオをデプロイします。既存のシナリオに対して`create`を実行することもできます。その場合、CloudGoatはそのシナリオを破棄して再作成します。
> **ヒント:** シナリオ名に`/scenarios`を使用すると、bashのネイティブなタブ補完が利用できます。
安全上の理由から`--profile`は必須であることに注意してください。誤ってプロダクション環境にCloudGoatシナリオをデプロイすることを防ぐためです。また、CloudGoatはシステムの「デフォルト」AWS CLIプロファイルや、環境変数でデフォルトとして指定されたプロファイルを使用しません。ただし、`config aws`でこれを設定すれば、毎回指定する必要がなくなります。
### list
`list` は、`all`、`undeployed`、`deployed`のシナリオに関する情報、またはすでにデプロイされている`[ シナリオ名 ]`に関する詳細情報を表示します。また、クラウドプラットフォームでシナリオをフィルタリングできます:`list aws` または `list azure`。
### destroy
`destroy` は、`[ シナリオ名 ]`のクラウドリソースをシャットダウンして削除し、シナリオインスタンスフォルダを`./trash`に移動します。Terraformのステートファイルやその他のシナリオファイルを復元する必要がある場合に備えてのことです。また、シナリオ名の代わりに`all`を指定すると、すべてのアクティブなシナリオを破棄できます。
> **ヒント:** CloudGoatは自身が作成したリソースのみを管理できます。シナリオの過程で自分でリソースを作成した場合は、`destroy`コマンドを実行する前に手動で削除する必要があります。
### config
`config` では、CloudGoatインストールのさまざまな側面、特にIP `whitelist`、デフォルトのAWS `profile`、および`argcomplete`によるタブ補完を管理できます。これらのサブコマンドがそれぞれ何をするのかを簡単に説明します。
#### whitelist
CloudGoatは、脆弱性を含む可能性のあるリソースがクラウドにデプロイされたときにホワイトリストに登録すべきIPアドレスを知る必要があります。これらのIPは、プロジェクトのベースディレクトリにある`./whitelist.txt`ファイルで追跡されます。ホワイトリストに提供するIPアドレスは必ずしもCIDR形式である必要はありませんが、CloudGoatは裸のIPに`/32`を追加します。オプションで`--auto`引数を追加すると、CloudGoatは自動的にネットワークリクエストを行い、curlを使用してifconfig.coからIPアドレスを見つけ、その結果でホワイトリストファイルを作成します。
#### aws
CloudGoatはシステムの「デフォルト」AWS CLIプロファイルや環境変数でデフォルトとして指定されたプロファイルを決して使用しませんが、`config aws`コマンドを使用して特定のAWSプロファイルを名前で使用するようCloudGoatに指示できます。これにより、プロファイル名の入力を促し、それをベースディレクトリの`config.yml`ファイルに保存します。そのファイルが存在する限り、CloudGoatは`--profile`フラグを必要とせず、createおよびdestroyコマンドにそのプロファイル名を使用します。`config aws`コマンドはいつでも実行して、CloudGoatのデフォルトプロファイルの名前を表示し、`config.yml`の形式を検証できます。また、正しい形式を使用すれば、手動で`config.yml`を作成することもできます。
#### azure
TerraformのAzureプロバイダの新しいバージョンでは、リソースを適用するためにサブスクリプションIDが必要です。CloudGoatは`az`ユーティリティと同じ認証情報設定を使用しますが、CloudGoatにはどのサブスクリプションにデプロイするかを明示的に指定する必要があります。設定は`cloudgoat config azure`で行い、サブスクリプションはaws設定とともに`config.yml`に保存されます。正しい形式を使用すれば、手動で`config.yml`を作成することもできます。
#### argcomplete
CloudGoatでネイティブなタブ補完を実現したかったのですが、REPLの外部ではそれはかなり難しいことがわかりました。Linuxユーザーにはうまく動作するはずですし、bashのバージョンを4.2以上にアップグレードする方法を見つけられる勇敢なOSXユーザーにも動作します。CloudGoatはPythonライブラリ「argcomplete」を含み、サポートしています。argcompleteのインストール方法の簡単な概要を以下に示します。より詳細な手順については、ライブラリのgithubページの公式ドキュメントを参照してください。
1. CloudGoatのrequirements.txtファイルを使用してargcomplete Pythonパッケージをインストールします:`$ pip3 install -r core/python/requirements.txt`
2. bashで、argcompleteパッケージが提供するグローバルPython引数補完スクリプトを実行します:`$ activate-global-python-argcomplete`
3. 前のアクティベーションコマンドで表示された場所にある補完スクリプトをソースするか、シェルセッションを再起動します:`$ source [ /パス/から/補完/スクリプト ]`
argcompleteを設定できない、または設定したくない方のために、CloudGoatはディレクトリパスをシナリオ名として使用することもサポートしています。これにより、シナリオ名に対してタブ補完が機能します。`/scenario/[ シナリオ名 ]`または`./[ シナリオインスタンス名 ]`を使用すれば、シェルが残りを処理します。
### help
`help` はコマンドに関するコンテキストヘルプを提供します。`help`は対象のコマンドの前後どちらにでも置くことができるので、必要なときにいつでも利用できます。以下にいくつかの例を示します。* `cloudgoat create help`
* `cloudgoat destroy help`
* `cloudgoat list help`
* `cloudgoat config help`
もう一つの使用方法として、`cloudgoat [ シナリオ名 ] help` を使用すると、シナリオの作成者が定義した簡単なシナリオの概要をコンソールに出力できます。
## 機能リクエストとバグ報告
機能リクエストやバグ報告がある場合は、[こちらから送信してください](https://github.com/RhinoSecurityLabs/cloudgoat/issues/new)。
バグの場合、トレースバックや再現手順など、発見したバグを再現するのに十分な説明を含め、新しいバグ報告を提出する前に同じバグを報告した人がいないか確認してください。
機能の場合も同様です。リクエストを具体的にし、他の誰かが同じ機能をすでにリクエストしていないか確認してください。
## コントリビューションガイドライン
CloudGoatへの貢献は大変感謝しています。プロジェクトの改善にご協力いただける場合は、以下をお読みください。
1. **新しいシナリオの作成**:
- すぐに始められるよう、シナリオテンプレートを用意しています。このテンプレートには、CloudGoatシナリオの基本構造と必要なファイルが含まれています。シナリオテンプレートは[こちら](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/scenarios/scenario_template)にあります。
- **新しいシナリオを作成する手順**:
- **テンプレートをコピーする**: シナリオテンプレートの内容を、シナリオ名にちなんだ新しいディレクトリにコピーします。
- **テンプレートを修正する**: テンプレート内のプレースホルダーコンテンツを、新しいシナリオの具体的な内容に置き換えます。
- **シナリオをテストする**: シナリオが期待通りに動作することを徹底的にテストします。
2. **コーディング基準**:
- **コードスタイル**: プロジェクト内の既存のコードスタイルに従ってください。一貫性が重要です。
- **コメント**: 複雑なロジックや重要な決定事項を説明するために、コードにコメントを追加してください。
- **ドキュメント**: README.md やその他の関連ドキュメントを更新し、新しいシナリオや変更についての詳細を含めてください。
3. **ホワイトリスト化**:
- シナリオを作成または変更する際は、以下の点に留意してください。
- **ホワイトリスト化**: セキュリティグループルールやその他のアクセス制御が、CloudGoat設定からのIPのみをホワイトリスト化するように設定されていることを確認してください。
- **レビュー**: コントリビュートする前に、パブリックリソースに脆弱性がないか構成を再確認してください(例:インターネットにアクセス可能な脆弱なEC2を作成しないこと)。
4. **Pythonコードスタイル**:
- CloudGoatのPythonコードは、一般にPythonのスタイル規則に従い、読みやすさと保守性を何よりも優先する必要があります。
- 良いgitプラクティスに従ってください:プルリクエストを使用し、フィーチャーブランチを推奨し、常に明確なコミットメッセージを記述してください。
- CloudGoatでは、`black` と `flake8`(Pythonの構文およびスタイルリンター)を使用しています。コードをコミットする前に、`core/python/` 内のすべてのPythonファイルと `cloudgoat.py` に対して `flake8` と `black` の両方を実行してください。`black` の決定は `flake8` よりも優先されます。通常のユーザーには不要なため、`core/python/requirements.txt` ではこれらの両方がコメントアウトされています。
5. **ライセンス**:
- CloudGoatのコードは常にBSD 3条項ライセンスを使用する必要があります。
最後に、コントリビューションありがとうございます!
## 変更履歴
- **2019年6月24日:** CloudGoat 2.0 がリリースされました!
## 免責事項
CloudGoatは、いかなる保証も伴わないソフトウェアです。CloudGoatを使用することにより、結果として生じるすべての責任をユーザー自身が負うものとします。