[Public Beta]HCP Vault Secrets使ってみた

## これはなに？
先日開催されたHashicorp社主催のHashiDayにて発表された「**HCP Vault Secrets**」を使ってみました！
**2023/6/14時点ではPubliic Betaとして提供されています。**

https://www.hashicorp.com/blog/announcing-hcp-vault-secrets-public-beta

## HPC Vaultとの違いは?
HCP Vaultとの違いとして、
HCP Vault Secretsはよりシークレット管理に焦点を当てた点が大きな違いのようです。

>HCP Vault Secrets は、HashiCorp Vault の新しい Software-as-a-Service (SaaS) 製品であり、主にシークレット管理に焦点を当てており、ユーザーはすぐにオンボードでき、無料で開始できます。

## 使ってみる
大きく分けてHCPコンソール画面を使用した操作とCLIでの使用方法があります。

HCPコンソールについてはWebからアクセスすることができ、CLIについてはVault Secrets CLIの**vltコマンド**をインストールすることで使用できます。
**vltコマンド**は以下の手順にてインストール可能です。

```インストール手順.sh
$ brew tap hashicorp/tap
$ brew install vlt
$ vlt --version
```
https://developer.hashicorp.com/vault/tutorials/hcp-vault-secrets-get-started/hcp-vault-secrets-install-cli

### ログイン
HCPにログインしてみると、今回新たに追加された**Vault Secrets**が追加されている。
https://developer.hashicorp.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/785b9896-a74a-0484-0762-986a9c199a4e.png)
#### コマンド
```ログイン.sh
$ export HCP_CLIENT_ID="<Client ID>"
$ export HCP_CLIENT_SECRET="<Client Secret>"
$ vlt login
```

### Application作成
Applicationという単位での作成を行います。
リリースページに記載されていたこちらの画像のAppに該当するものになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/6ecdaefd-2583-7697-f408-f3bc5fc1859c.png)

Application名を入力し、作成を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/e68b4157-7495-cd50-8ad2-051be0761748.png)
#### コマンド
```
$ vlt apps create --description="This is Sample Web Applation." sample-webapp
```
### Secret
#### 登録
Key-Valueでのシークレット情報登録を行うことができ、AWSのSecretsManagerと同様の機能になります。
コンソールもしくはCLIにて登録を行うことが可能となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/9e5833bb-698b-e7c5-4bbd-26bed2d08d62.png)
##### コマンド
```
$ vlt secrets create --app-name="sample-webapp" apikey="hogehoge_hoge_xxxx"
```
#### 取得
##### コマンド
マスキングされた形での取得は以下のコマンドを実行。
```
$ vlt secrets get --app-name="sample-webapp" apikey
```
平文でのシークレット情報を取得する場合には`--plaintext`を指定する。
```
$ vlt secrets get --app-name="sample-webapp" --plaintext apikey
```
### AWS Secrets Manager Integration
#### 概要
AWSアカウントとのインテグレーション設定を行うことで、HPC Vault Secretsに登録されたシークレット情報をSecrets Managerへ同期できる機能となります。
以下の公式ドキュメントに記載の手順が分かりやすく記載されているため、気になる方はチェックしてみると良いかもしれません。
https://developer.hashicorp.com/hcp/docs/vault-secrets/integrations/aws-secrets-manager

#### インテグレーション設定
左のメニューからコンソールから「Integration」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/7a361b0a-0ff1-fcd3-3bcd-fc1d50a7c11d.png)

一意な名前を入力し、インテグレーションに使用するRole ARNの入力、インテグレーション先のリージョンを選択します。インテグレーションに使用するRoleの作成手順は後述の手順に記載します。

インテグレーション可能なリージョンは現在以下の3つのみとなります。
- us-west-2
- us-east-1
- us-east-2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/bbc9692c-3700-4494-e76e-ee7a3937cd3e.png)

##### インテグレーション用IAMロール設定
以下のポリシーを付与したIAMロールをインテグレーションするAWS環境に作成します。
`AWS_EXTERNAL_ID`についてはHCPコンソールに表示のものを使用します。
```IAMポリシー.
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Sid": "HCPVaultSecretsAccess",
            "Effect": "Allow",
            "Action": [
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetSecretValue",
               "secretsmanager:CreateSecret",
               "secretsmanager:PutSecretValue",
               "secretsmanager:UpdateSecret",
               "secretsmanager:UpdateSecretVersionStage",
               "secretsmanager:DeleteSecret",
               "secretsmanager:RestoreSecret",
               "secretsmanager:TagResource",
               "secretsmanager:UntagResource"
            ],
            "Resource": "*"
      }
   ]
}
```

```IAMロールに付与する信頼ポリシー.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::879554817125:role/HCPVaultSecrets_Sync"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": "<HPCコンソールに記載のAWS_EXTERNAL_ID>"
                }
            }
        }
    ]
}
```
##### 動作確認
作成が完了し、Integrationが成功するとStatusが**Synced**になります。
エラーが表示されている場合はIAMロールの設定に問題がある可能性があるので、見直してみると良いかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/bc196ffb-726b-6799-fe36-cae80ef43d5a.png)

AWSコンソール上で確認してみるとHCP Vault Secretsに登録したシークレットが自動的に作成されていました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/2b5cba9f-ed14-7218-65f6-5e2511b6aa52.png)



## まとめ
- HCP Vaultに比べ、より**アプリケーションが使用するシークレット**という部分に焦点が当てられていると感じました。
  - HCP Vaultでは動的なシークレット発行などが行えるので、HCP Vault Secretsでも今後実装されるのかな？など使用しながら色々考えてましたw
- Terraformとの連携も容易そうでしたので、そちらも別の記事で作成していきたいと思います。
- Puclic Betaでまだまだこれから機能が増えていきそうな、予感がするのでとても楽しみにしています！