CSM: AWS IAM 認証をためす

## 概要

[前回の記事 "CipherTrust Secrets Management (CSM)をためす"](https://qiita.com/shinyaarai/items/0da7ea8164df552c4bfd) では、Akeyless CLI等のクライアントから、Akeyless (Gateway または SaaS)へアクセスする際に、API Keyを用いて認証を行っていました。

API Keyは、"Access ID","Account Key"からなります。Akeyless CLIの場合、この認証情報は、"~/.akeyless/profiles/default.toml"に保存され、Akeyless認証時に利用されます。

個々のシステムで利用しているSecretをなくすために、"Secret Management"を導入したのに、API Key(Secret)を利用しなければ、"Secret Management"が利用できないという、"Secretを完全になくす事ができない"状況が生じます。

各クラウド環境においては、IAMが提供されており"認証"&"認可"に利用できます
Akeyless CLI等のクライアントが、クラウド上のVMで動作する場合、IAMを利用して Akeyless への認証が可能になります

- クラウド各社の認証サービス
    - AWS IAM
    - Azure AD
    - GCP IAM
    - OCI IAM

これを利用することに完全にSecret をなくすこと("Vaultless")が可能となります。

## 目的

AWS EC2のVM上で稼働する Akeyless CLIを AWS IAMを用い Akeyless への認証を行います

## 参照ドキュメント

- Akeyless Documentation
    - INTRODUCTION
        - [Part 2: Authentication & Authorization](https://docs.akeyless.io/docs/understanding-authentication)
    - AUTHENTICATION METHODS
        - [Authentication Methods Introduction](https://docs.akeyless.io/docs/access-and-authentication-methods)
        - [RBAC](https://docs.akeyless.io/docs/rbac)
        - [AWS IAM](https://docs.akeyless.io/docs/aws-iam)
- Akeyless Tutorial
    - AUTHENTICATION METHODS
        - [AWS IAM Authentication and Access](https://tutorials.akeyless.io/docs/aws-iam-authentication-and-access)


## 手順

### Auth Method の作成
Akeyless Gateway コンソールから、"Users & Auth Methods"を選択、"New"をクリックします
![CSM_Auth_AWS-1-1a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/7d14234e-b158-e400-ed05-fd478fe3a1be.png)

"AWS IAM"を選択、"Next"をクリックします

![CSM_Auth_AWS-1-2a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/3e72416a-9e15-22fc-d4fb-a02d3efe8432.png)

Nameを入力します (任意: 例 "iamAuth1")
"Next"をクリックします
![CSM_Auth_AWS-1-3a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/17bc8c60-d2a2-3e8b-6030-827c656be8aa.png)

"Bounded AWS Account ID"へ、AWS Account IDを入力します 
"Bounted Role Names"へ、AWS IAM の role 名を入力します (任意 例 "david-rw-secretmanager" 必要に応じて作成下さい)
"Next"をクリックします
![CSM_Auth_AWS-1-4a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/bf9963fa-9584-8b66-8c29-f9921c9f77e4.png)

Auth Method "iamAuth1"が作成されました
![CSM_Auth_AWS-1-5a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/05fa99f9-474f-bbdb-4d35-e85eecde6fc5.png)

### Role の作成
"Access Roles"を選択、"New"をクリックします
![CSM_Auth_AWS-2-1a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/fe565a95-85b3-7e81-c1e0-6f16c000964f.png)

Nameを入力します (任意: 例 "iamRole1")
"Next"をクリックします

![CSM_Auth_AWS-2-2a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/cd42afa4-e728-7084-3f94-6fe22eed2d2f.png)

"Associate"をクリックします
![CSM_Auth_AWS-2-3a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/4fed4775-2fab-68c5-1661-dd194bdce349.png)

"Auth Method"で表示されるリストの中から、作成した "Auth Method"(例 "/iamAuth1")を選択します
"Next"をクリックします
![CSM_Auth_AWS-2-4a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/7df227be-eba7-9543-cf06-a5472a84d1bf.png)

"Next"をクリックします
![CSM_Auth_AWS-2-5a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/8265a8f5-a807-006f-e35b-32952549868e.png)

"Add"をクリックします
![CSM_Auth_AWS-2-6a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/e5293138-3b30-13e2-c940-dbf433db7ac0.png)

"Type"で"Items"を選択します
"Access Path"で"/*"を選択します
"Permission"で、"Create, Read, Update, Delete"を選択します
"Save"をクリックします
![CSM_Auth_AWS-2-7a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/67ac8f42-a5c1-44ba-21a2-81408dc6a515.png)

"Next"をクリックします
![CSM_Auth_AWS-2-8a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/5ae61c57-a202-090d-2450-743726e61baf.png)


設定を変更せずに、"Finish”をクリックします
![CSM_Auth_AWS-2-9a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/7ceaba6d-6687-b0f7-4cc7-ddcfad018a5b.png)

Role "iamRole1"が作成されました
![CSM_Auth_AWS-2-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/f0bf91db-4847-5b66-ea43-c6bedec7414e.png)

### EC2インスタンスへの IAM Role の設定
Akeyless CLIを動作させる VMへ、AWS IAM のrole をリストから選択します (Auth Method の作成時に指定した role を指定します。例 "david-rw-secretmanager")

![CSM_Auth_AWS-3-1a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/a53bedfb-5114-715f-b75e-28936b9840a1.png)

### Akeyless CLIの認証設定

Akeyless CLIを動作させる VMへログインします

```
$ akeyless configure --profile default --access-id p-4ca2l3f0osk0wm --access-type aws_iam
Profile default successfully configured
```
AWS IAMでの認証が正常に動作することを確認します
```
$ akeyless list-items
{
  "items": [
    {
      "item_name": "/MY_ZK_DFC_KEY",
      "item_id": 292643381,
      ...
      (省略)
      ...
      "gateway_details": null
    }
  ],
  "next_page": "eyJpIjoiL2ZvbzEifQ=="
}
```
```
$ akeyless get-secret-value --name /MyFirstSecret
My First Secret Value
```
```
$ akeyless get-secret-value --name /foo1
bar1
```

AWS IAMで、 API Keyと同様に動作することを確認できました
これにてVM上のSecretはなくなり、 実際の運用に耐えうる高レベルのセキュリティにて運用が可能となりました

## 補足

今回ご紹介した AWS IAM以外にも、Azure, GCP, OCI, オンプレミス、Kubernets, OAuth2.0/JWT等、各種環境向けの認証をサポートしています
[Authentication Methods Introduction](https://docs.akeyless.io/docs/access-and-authentication-methods)

![CSM_Auth_AWS-4-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/b0d694f9-ed07-14d9-dfba-4167299b17b2.png)



API KeyはAkeyless で生成管理されるため便利ですが、"Access ID","Account Key"が漏洩した場合、セキュリティ上の問題を生じます。このため、本番環境での"API Key"の利用は非推奨となります。
今回ご紹介したAWS IAMや、他の認証方法を用い、完全にSecretを無くしての運用”Vaultless"を推奨させていただきます。