1.1.2.3. Pythonスクリプトを準備する¶
本書中の設定値の「< >」の表記については、ご利用の環境により各自入力いただく箇所となります("<"から">"までを設定値に置き換えてください)。
各コマンドの実行については、rootユーザーに昇格して実行する前提で記載しています。
各種パッケージや関連モジュールをインストールする¶
- 以下のコマンドを実行し、「Python」をインストールします。
注釈
- デフォルトでインストールされている「python36」は、後述する「boto3」のサポート対象外となっているため最新バージョンをインストールする必要があります。
# yum install python39
- 以下のコマンドを実行し、「Python」がインストールされていることを確認します(本項記載時の「Python」のバージョンは"3.9.13"です)。
# python3.9 --version
Python 3.9.13
- 以下のコマンドを実行し、「pip」のインストールに必要なファイルをダウンロードします。
# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
- 以下のコマンドを実行し、「pip」をインストールします。
# python3.9 get-pip.py
- 以下のコマンドを実行し、「pip」がインストールされていることを確認します。(本項記載時の「pip」のバージョンは"23.1.2"です)。
# pip --version
pip 23.1.2 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
- 以下のコマンドを実行し、「boto3」をインストールします。
# pip install boto3
- 以下のコマンドを実行し、「boto3」がインストールされていることを確認します。(本項記載時の「boto3」のバージョンは"1.26.135"です)。
# pip list | grep boto3
boto3 1.26.135
スクリプトを作成する¶
下記の「表: Pythonスクリプト一覧」に記載のスクリプトを作成します。
名称 | 説明 |
/usr/local/sbin/wasabi/vars_wasabi.py | Wasabiの構築に必要な情報を変数として定義します。 |
/usr/local/sbin/wasabi/wasabi-iam-create.py | WasabiのIAMユーザーとIAMポリシーを作成します。 |
/usr/local/sbin/wasabi/wasabi-bucket-create.py | Wasabiのバケットとバケットポリシーを作成します。 |
注釈
- スクリプトのコードについては、「IAM Boto3 documentation」、「S3 Boto3 documentation」をご参照ください。
- 以下のコマンドを実行し、「vars_wasabi.py」を作成します。
注釈
- 「Wasabi 既存ユーザーのアクセスキー」および「Wasabi 既存ユーザーのシークレットキー」については、「Wasabiオブジェクトストレージを設定する」の「wasabi-iam-create.py」実行前に、「Wasabiオブジェクトストレージを設定する」の「wasabi-account-create.sh」の実行結果の値を引用する必要があります。
# cd /usr/local/sbin/wasabi # touch vars_wasabi.py # chmod 600 vars_wasabi.py # vi vars_wasabi.py
accsess_key = "<Wasabi 既存ユーザーのアクセスキー>" secret_key = "<Wasabi 既存ユーザーのシークレットキー>" iam_user_name = "<Wasabi 新規IAMユーザー名>" iam_user_password = "<Wasabi 新規IAMユーザーのパスワード>" iam_policy_name="<Wasabi 新規IAMポリシー名>" bucket_endpoint = "s3.ap-northeast-1-ntt.wasabisys.com" bucket_name = "<Wasabi 新規バケット名>"
- 以下のコマンドを実行し、「wasabi-iam-create.py」を作成します。
# touch wasabi-iam-create.py # chmod 600 wasabi-iam-create.py # vi wasabi-iam-create.py
import boto3 import json import vars_wasabi as wasabi # 変数の定義 access_key = wasabi.accsess_key secret_key = wasabi.secret_key iam_user_name = wasabi.iam_user_name iam_user_password = wasabi.iam_user_password iam_policy_name = wasabi.iam_policy_name bucket_name = wasabi.bucket_name # IAMエンドポイントへの接続 iam = boto3.client("iam", endpoint_url = "https://iam.wasabisys.com", aws_access_key_id = access_key, aws_secret_access_key = secret_key, region_name = "us-east-1" ) # IAMユーザーの作成 print("IAMユーザー「" + iam_user_name + "」を作成します。\n") response_user = iam.create_user(UserName = iam_user_name) print(response_user,"\n") # IAMユーザーのパスワード作成 print("IAMユーザー「" + iam_user_name + "」のパスワードを作成します。\n") response_password = iam.create_login_profile( UserName = iam_user_name, Password = iam_user_password, PasswordResetRequired = False ) print(response_password,"\n") # IAMユーザーのアクセスキー作成 print("IAMユーザー「" + iam_user_name + "」のアクセスキーを作成します。") print("※払いだされたキー情報は出力結果の「AccessKeyId」「SecretAccessKey」を確認してください。\n") response_key = iam.create_access_key(UserName = iam_user_name) print(response_key,"\n") # IAMポリシーの作成 print("IAMポリシー「" + iam_policy_name + "」を作成します。\n") policy_doc = { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::" + bucket_name }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject" ], "Resource": "arn:aws:s3:::" + bucket_name + "/*" } ] } response_policy = iam.create_policy( PolicyName = iam_policy_name, PolicyDocument = json.dumps(policy_doc) ) print(response_policy,"\n") # IAMポリシーの割り当て print("IAMユーザー「"+iam_user_name + "」にIAMポリシー「" + iam_policy_name + "」を割り当てます。\n") response_attach = iam.attach_user_policy( UserName = iam_user_name, PolicyArn = "arn:aws:iam:::policy/" + iam_policy_name ) print(response_attach,"\n")
- 以下のコマンドを実行し、「wasabi-bucket-create.py」を作成します。
注釈
- 「Wasabiバケットへアクセスする際の通信元IPアドレス/XX」については、FIC-NATのグローバルIPアドレス、ICGWのグローバルIPアドレスを記載します。また、必要に応じて、インターネット経由でWasabiコンソールからバケットへアクセスする際のグローバルIPアドレスを記載します。
- FIC-NATのグローバルIPアドレスについては、「Wasabiオブジェクトストレージを設定する」の「wasabi-bucket-create.py」実行前に、「Flexible InterConnectを設定する」の「ficrouter-snat-activate.sh」の実行結果の値を引用する必要があります。ICGWのグローバルIPアドレスの確認方法については、「よくある質問」をご参照ください。
# touch wasabi-bucket-create.py # chmod 600 wasabi-bucket-create.py # vi wasabi-bucket-create.py
import boto3 import json import vars_wasabi as wasabi # 変数の定義 access_key = wasabi.accsess_key secret_key = wasabi.secret_key bucket_endpoint = wasabi.bucket_endpoint bucket_name = wasabi.bucket_name # S3エンドポイントへの接続 s3 = boto3.client("s3", endpoint_url = "https://" + bucket_endpoint, aws_access_key_id = access_key, aws_secret_access_key = secret_key, ) #バケットの作成 print("バケット名「" + bucket_name + "」を作成します。\n") response_bucket = s3.create_bucket(Bucket = bucket_name) print(response_bucket,"\n") #バケットのポリシー適用 print("バケット名「" + bucket_name + "」にポリシーを適用します。\n") bucket_policy = { "Version": "2012-10-17", "Statement": [{ "Effect": "Deny", "Principal": "*", "Action": "*", "Resource": [ "arn:aws:s3:::" + bucket_name, "arn:aws:s3:::" + bucket_name + "/*" ], "Condition": { "NotIpAddress": { "aws:SourceIp": [ "<Wasabiバケットへアクセスする際の通信元IPアドレス/XX>", "<Wasabiバケットへアクセスする際の通信元IPアドレス/XX>", "<Wasabiバケットへアクセスする際の通信元IPアドレス/XX>" ] } } }] } bucket_policy = json.dumps(bucket_policy) response_policy = s3.put_bucket_policy(Bucket = bucket_name, Policy = bucket_policy) print(response_policy,"\n")