この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
前提
・スクリプトの実行環境をAWS CloudShellとします。
・Secretの作成権限を持つユーザで作成すること
Secretの作成スクリプト
aws_create_secret.py
# -*- coding: utf-8 -*-
import boto3
import sys
if(len(sys.argv) <= 1):
print('Please enter arguments!')
print('Example:filename.py "secret_name"')
sys.exit()
# ここに到達できていれば sys.argv[1]は必ず存在するので、安全にアクセスできます。
first_argv = str(sys.argv[1])
print('input first argument is', first_argv)
def aws_create_secret(secret_name):
"""シークレット作成"""
try:
print('シークレット:[' + secret_name +']の作成を行います。')
rt = None
# シークレット作成
secretsmanager_client = boto3.client('secretsmanager')
password = secretsmanager_client.get_random_password(
PasswordLength=8,
ExcludeCharacters='@\'"<>`\\',
# 次の句読文字をパスワードから除外するかどうかを指定します。
# ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
RequireEachIncludedType=True
)
print('RandomPassword:')
print(password['RandomPassword'])
response = secretsmanager_client.create_secret(
Description='test secret created with python',
Name=secret_name,
SecretString=password['RandomPassword'],
)
print(response)
# except Exception:
except Exception as e:
print ('[SecretsManager_CreateUser] create secret exception error.')
print("error: " + str(e))
rt=None
print('シークレット:[' + secret_name +']の作成を完了しました。')
return rt
# 呼び出しのテスト
aws_create_secret(first_argv)
動作確認
1.Pythonのバージョン確認
Python3のバージョン確認コマンド:
python3 –version或いはpython3 -V
実行例:
[cloudshell-user@ip-10-0-116-255 ~]$ python3 --version
Python 3.7.10
[cloudshell-user@ip-10-0-116-255 ~]$ python3 -V
Python 3.7.10
[cloudshell-user@ip-10-0-116-255 ~]$
2.PythonのスクリプトをCloudShellにアップロードする
AWS CloudShell画面右上の「Actions」⇒「Uplodad file」より.Pythonのスクリプト(aws_create_secret.py)をアップロードする
3.Pythonのスクリプトを実行してみる
コマンド:
python3 file名 第一引数
aws_create_secret.py "Secret名"
実行例:
python3 aws_create_secret.py "test1"
Secret名が存在しない場合の例:
[cloudshell-user@ip-10-0-72-182 ~]$ python3 aws_create_secret.py "test1"
input first argument is test1
シークレット:[test1]の作成を行います。
RandomPassword:
Ow$rUf1x
{'ARN': 'arn:aws:secretsmanager:ap-northeast-1:xxxxxxxxxxxx:secret:test1-SnrwBc', 'Name': 'test1', 'VersionId': '7a405490-aa88-44de-99cd-741b218e7e62', 'ResponseMetadata': {'RequestId': 'a5769a3f-5f26-4ef5-bf2c-6b886597d48a', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'a5769a3f-5f26-4ef5-bf2c-6b886597d48a', 'content-type': 'application/x-amz-json-1.1', 'content-length': '146', 'date': 'Sat, 11 Jun 2022 20:59:40 GMT'}, 'RetryAttempts': 0}}
シークレット:[test1]の作成を完了しました。
[cloudshell-user@ip-10-0-72-182 ~]$
Secret名が既に存在する場合の例:
[cloudshell-user@ip-10-0-72-182 ~]$ python3 aws_create_secret.py "test1"
input first argument is test1
シークレット:[test1]の作成を行います。
RandomPassword:
IeN2k{uQ
[SecretsManager_CreateUser] create secret exception error.
error: An error occurred (ResourceExistsException) when calling the CreateSecret operation: The operation failed because the secret test1 already exists.
シークレット:[test1]の作成を完了しました。
[cloudshell-user@ip-10-0-72-182 ~]$
まとめ
パスワードを生成してAWS Secrets Managerにシークレットを作成するPythonスクリプトを紹介しました。
Secret名が既に存在する場合、下記のエラーが出力されました。
error: An error occurred (ResourceExistsException) when calling the CreateSecret operation: The operation failed because the secret test1 already exists.
AWSコンソール上でSecret名を削除して、同じSecret名で作成すると、下記のエラーが出力されました。
error: An error occurred (InvalidRequestException) when calling the CreateSecret operation: You can’t create this secret because a secret with this name is already scheduled for deletion.
次回、Python3でSecretを削除し、同じSecret名で作成できるスクリプトを実装したいと思います。
お役に立てれば幸いです。