0
0

CSM: Python SDKによるシークレット管理をためす

Posted at

概要

これまで CSM (CipherTrust Secret Management powered by AKEYLESS)をもちいたシークレット管理方法をご紹介してきました。

今回は 実際にアプリケーションからシークレットを呼び出しを想定して、Python から CSMへアクセスし、Static Secret 及び、Dynamic Secretの取得を行ってみます

Akeyless は REST APIを提供しています。Java, Python, Go, C#.NET, Ruby 等へはSDKを提供しており、より容易にSecret管理をアプリケーションへ取り込む事が可能です

目的

Akeyless の Python SDKを用いて、Static Secret、Dynamic Secret の取得を行ってみます。
認証には AWS IAMを用います。これにより、完全にSecret を排除しSecretの取得を行います。

参照ドキュメント

手順

前準備

これまでご紹介した記事の内容に沿って、CSMのセットアップを行います。

Python パッケージのインストール

Akeyless の パッケージのインストールを行います

 pip install akeyless

今回は AWS IAM認証を用いるため、"cloud ID"とboto3(AWS SDK)のインストールを行います

 pip install akeyless_cloud_id
 pip install boto3

サンプルコード

サンプルコードはこちらになります
コメント (#)に解説を記載しております

csm_test.py
 #!/usr/bin/env python3

import akeyless
from akeyless_cloud_id import CloudId

## Configration
configuration = akeyless.Configuration()
#configuration.host = "https://api.akeyless.io" # Akeyless SaaS
configuration.host = "https://web.ciphertrustmanager.local/akeyless-api/v2/" # Akeyless GW URL (CM内)
configuration.ssl_ca_cert = '/home/ubuntu/web-ciphertrustmanager-local.pem'   # サーバ証明書

api_client = akeyless.ApiClient(configuration)
api = akeyless.V2Api(api_client)

## 認証
# API Key
#body = akeyless.Auth(access_id='p-XXXXXXXXXXXX', access_key='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=') 

# AWS IAM
cloud_id_generator = CloudId()
cloud_id = cloud_id_generator.generate()

body = akeyless.Auth(access_id='p-XXXXXXXXXXXXXX', access_type='aws_iam', cloud_id=cloud_id) # accessid へ、AWS IAM認証で作成したaccess_idを指定
res = api.auth(body)
token = res.token

# Static Secretの取得
body = akeyless.GetSecretValue(names=['MyFirstSecret'], token=token) # namesへ取得対象のStatic Secretを指定
res = api.get_secret_value(body)
print(res['MyFirstSecret']) # 取得した Static Secretの値を表示

## MySQL Dynamic Secretの取得
body = akeyless.GetDynamicSecretValue(name='/aws-p02/mysqlDS1', token=token) # nameへ取得対象のDynamic Secretを指定
res = api.get_dynamic_secret_value(body)
print(res)  # 取得した Dynamic Secretの値を表示

実行結果

$ ./test_ds.py 
My First Secret Value
{'id': 'tmp_p-6i3d_IMJ12', 'password': 'pe4KEi~G58TLN~vi', 'ttl_in_minutes': '60', 'user': 'tmp_p-6i3d_IMJ12'}

1行目: "My First Secret Value" が Static Secret の値
2行目: "{'id': 'tmp_p-6i3d_IMJ12', ....."が Dynamic Secretの値

"Vault less"

API Key認証 = 非”Vault less"

API Key での認証ですと、access_keyが必要となるため、"Vault less"とはならず、Secret漏洩の懸念が残ります。

body = akeyless.Auth(access_id='p-XXXXXXXXXXXX', access_key='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=') 

AWS IAM認証 = "Vault less"

今回のサンプルでは Akeylessへの認証にAWS IAMを用いていました。
access_keyを排除でき、Secretを完全に排除し"Vault less"となり、Secret漏洩の懸念を排除することができました。


body = akeyless.Auth(access_id='p-XXXXXXXXXXXXXX', access_type='aws_iam', cloud_id=cloud_id) # accessid へ、AWS IAM認証で作成したaccess_idを指定
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0