【AWS】検証！Amazon CodeCatalystのDev Environmentで作成したコンピューティングリソースって中身どうなっているん？

## はじめに

この記事ではAmazon CodeCatalystのDev Environmentで作成したコンピューティングリソースを調査します。主な内容としては実践したときのメモを中心に書きます。（忘れやすいことなど）
誤りなどがあれば修正していく想定です。

## CodeCatalystのDev Environmentで作成したコンピューティングリソースってどうなっているん

前回と前々回に渡り、CodeCatalystについて書きました。その際に疑問に思うこととして「Amazon CodeCatalyst（以下、CodeCatalyst）のIAMはどうなっているのか」というところです。

とくに前回のDev EnvironmentについてはCodeCatalystでEC2を構築しているように見えるため、「IAMロールのようなものがあるのではないか」と考えられます。

そこで今回はCodeCatalystのDev Environmentで作成したコンピューティングリソースの中身を調べたいと思います。

検証環境は以下の記事を参考に作成するため、一部省略します。なお、今回はAWS Builder IDを使ってセットアップします。

- [検証！AWS Builder IDを使ってAmazon CodeCatalystをセットアップする](https://qiita.com/ymd65536/items/6b52dd87e74d8b172db4)
- [検証！Amazon CodeCatalystのDev EnvironmentでVisual Studio Codeを起動してみる](https://qiita.com/ymd65536/items/d4c0f1766fcfd9f56664)

## 検証環境の作成

では、実際に環境を構築してやっていきたいと思います。

### Dev EnvironmentsでVisual Studio Codeの開発環境を構築する

以下のURLにアクセスしてsource-repositoriesを開きます。
※`{スペース名}`と`{プロジェクト名}`は任意の名前

```bash
https://codecatalyst.aws/spaces/{スペース名}/projects/{プロジェクト名}/source-repositories
```

`Create Dev Environment`の右にある逆三角形をクリックします。

![Screenshot 2024-05-30 at 13.04.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/1f2a06cd-829d-4b23-1ae9-5616bbe528df.png)

いくつか環境が選択できますが、ここでは`Visual Studio Code`を選択します。

![Screenshot 2024-05-30 at 13.05.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/eee5735a-26c3-2293-4722-a6c84ffbd7bb.png)

### 開発環境の設定と起動

開発環境を選択すると設定画面に遷移します。ブランチ、エイリアス、VPCコネクションなどの設定がありますが、ここではブランチのみ設定して`Create`をクリックします。

`Dev Environment Configuration`の設定はデフォルトの`Small 2vCPU, 4GB RAM`で進めます。

![Screenshot 2024-05-30 at 13.05.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/c1ba7f95-b52b-c5e8-f8b4-c3b6d971c707.png)

`Create`を実行するとローカルにインストールされているVisual Studio Codeから通知が届きます。`Open Visual Studio Code.app`をクリックします。

![Screenshot 2024-05-30 at 13.06.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/321cd76b-e6cb-dbaa-b085-26f2ec033665.png)

Visual StudioCodeの画面でポップアップが表示されるので`Open`をクリックします。

![Screenshot 2024-05-30 at 13.07.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/8631534f-15c4-eeb2-94dc-24e9aaee33b2.png)

これでAWS上にVisual Studio Codeを起動してローカルのVisual Studio Codeから接続できました。

### 接続確認

ターミナルを起動して`uname -a`を実行してみましょう。
まずはターミナルを起動します。`Terminal`をクリックして`New Terminal`を選択します。

![Screenshot 2024-05-30 at 13.20.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/30d1f214-f544-35a7-0791-24f5f94cd8b1.png)

新しいターミナルで以下のコマンドを実行します。

```bash
uname -a
```

実行結果
```text
Linux ip-10-130-38-171.us-west-2.compute.internal 6.1.90-99.173.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May  7 11:11:31 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
```

AWS上で起動しているターミナルであることが確認できました。

## Dev Environmentで作成したコンピューティングを調査してみる

Dev Environmentで作成したコンピューティングリソースにはいくつかの疑問が浮かびます。

- IAMはどうなっているのかAWSサービスにはアクセスできるのか
- パブリックIPアドレスはあるのかあるとしたらどう調べるのか
- メタデータはどうなっているのか

気になるので調査してみましょう。

## IAMはどうなっているのかAWSサービスにはアクセスできるのか

※結論いうとセットアップ時ではできないです。

仮にもAWSのサービスなのでAWSで作成したリソースということは何かしらのロールを持っているに違いないと思います。

AWS CLIで検証してみます。まずはAWS CLIのプロファイルを持っているのかを確認します。

```bash
aws configure list-profiles
```

実行結果

```text
codecatalyst
```

`codecatalyst`という名前のプロファイルを持っているそうです。中身を確認するため、以下のコマンドを実行してみます。

```bash
aws configure list --profile codecatalyst
```

実行結果

```text
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile             codecatalyst           manual    --profile
access_key                <not set>             None    None
access_key                <not set>             None    None
    region                us-west-2              env    ['AWS_REGION', 'AWS_DEFAULT_REGION']
```

`access_key`と`access_key`が存在しないため、AWSサービスへのアクセスはできません。

そもそもCodeCatalystをセットアップした時にアカウント連携をしていますが、アカウント内のリソースを連携していません。

※でもそうするとCodeCatalystのリソース展開はどのIAMが担当するんだろうか？

## パブリックIPアドレスはあるのかあるとしたらどう調べるのか

※結論いうとパブリックIPアドレスはあります。メタデータを使って調査できます。

### メタデータはどうなっているのか

メタデータを使って調査していきましょう。[参考：メタデータの調べ方](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)

ではまず、基本となる最初のコマンドを実行します。

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
```

実行結果

```text
ami-id
ami-launch-index
ami-manifest-path
autoscaling/
block-device-mapping/
events/
hostname
iam/
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
reservation-id
security-groups
services
```

### パブリックIPv4アドレスを調べる

※結論いうとパブリックIPv4アドレスを持っています。

パブリックIPv4アドレスを持っているかを調査します。

```bash
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-ipv4
```

実行結果

```text
52.32.128.109
```

パブリックIPがあるということはおそらくホスト名もあるだろうということでホスト名を調べます。

```bash
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-hostname
```

実行結果

```text
ec2-52-32-128-109.us-west-2.compute.amazonaws.com
```

## セキュリティグループ

最後に、もう一つ気になるところとしてAWSの環境に接続しているということはそこにはセキュリティもあるはず！ということでセキュリティグループも調べます。以下のコマンドを実行します。

```bash
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/security-groups
```

実行結果

```text
moontide-compute-stack-prod-us-west-2-cell-0-ecs-MoontideNoInboundSecurityGroupDF8C19F8-H9NGSEPKY6FC
```

実行結果で表示されたセキュリティグループはAWS マネジメントコンソールでは確認できませんでした。

## まとめ

まだまだ謎が多いCodeCatalystという感じでこのコンピューティングリソースにはどういう権限があるのかよくわかりませんでした。
しかし、メタデータからさまざまな情報を探れますのでまだまだ調査のしがいがありそうです。