かべぎわブログ

ブログです

Python(boto3)でアクセスキーをローテーションする

概要

Python(boto3)でアクセスキーをローテーションさせてみます。

スクリプト

スクリプトはこんなかんじ。

処理の流れ

こんなかんじのことをやってます。

  • 古い(現在の)アクセスキーで新しいアクセスキーを作成する
  • .aws/credentialsに新しいアクセスキーの情報を書き込む
  • 新しいアクセスキーを利用して古いアクセスキーを削除する

制限事項

  • アクセスキーがすでに2つ作成されていた場合、エラーになる。

  • .aws/credentialsが以下のような形式じゃなければならない

[default]
aws_access_key_id = wawawa
aws_secret_access_key = sasasa

おわりに

べんりよー

独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

Python(boto3)で自分のアクセスキーを削除する

概要

Python(boto3)を利用して自分のアクセスキーを削除してみます。

スクリプト

こんなかんじ。


実行するとこれを実行したユーザのAWSアクセスキーが削除されます。

おわりに

作業終わりにこれを実行するようにするとか、踏み台のログアウト時とかシャットダウンスクリプトだとかにこのスクリプトを組み込んでおくとかして、アクセスキーの消し忘れを防ぐなどしたい。
という需要があって書いた。

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書 徹底攻略シリーズ

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書 徹底攻略シリーズ

VSCodeでTimeout waiting for debugger connectionというエラーがでるときの解消法

概要

VSCodeを利用してPythonのデバッグを行っていたときにこんなかんじのエラーが出力されてPythonが実行できなくなってしまった。

f:id:kabegiwakun:20190904224943p:plain

その対処法です。

対処法

[Open launch.json]ボタンを選択してVSCodeでlaunch.jsonを開きます。
以下のように設定されているはずなのでこの設定を

        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }




こんなかんじに書き換えてあげます(consoleの箇所をinternalConsoleに変更している)

        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "internalConsole"
        }

こうすることでなにか別のコンソールではなく、VSCodeのデバッガでPythonが実行されるようになります。

おわりに

おわり

徹底解説Visual Studio Code

徹底解説Visual Studio Code

KMSのAWSマネージド型キーのキーポリシーを確認する

概要

KMSのAWSマネージド型キーのキーポリシーを確認してみます。
AWSマネージド型キーはカスタマー管理型のキーとちがい、マネジメントコンソールからキーポリシーを確認することはできませんが、AWSCLIを利用することで確認することができます。

コマンド

こんなかんじのコマンドで確認することができます。
この例はaws/s3のマネージド型キーのキーポリシーが確認できます。
policy-nameはdefault固定です。

$ aws kms get-key-policy --key-id wawawa --policy-name default
{
    "Policy": "{\n  \"Version\" : \"2012-10-17\",\n  \"Id\" : \"auto-s3-2\",\n  \"Statement\" : [ {\n    \"Sid\" : \"Allow access through S3 for all principals in the account that are authorized to use S3\",\n    \"Effect\" : \"Allow\",\n    \"Principal\" : {\n      \"AWS\" : \"*\"\n    },\n    \"Action\" : [ \"kms:Encrypt\", \"kms:Decrypt\", \"kms:ReEncrypt*\", \"kms:GenerateDataKey*\", \"kms:DescribeKey\" ],\n    \"Resource\" : \"*\",\n    \"Condition\" : {\n      \"StringEquals\" : {\n        \"kms:CallerAccount\" : \"123456789012\",\n        \"kms:ViaService\" : \"s3.ap-northeast-1.amazonaws.com\"\n      }\n    }\n  }, {\n    \"Sid\" : \"Allow direct access to key metadata to the account\",\n    \"Effect\" : \"Allow\",\n    \"Principal\" : {\n      \"AWS\" : \"arn:aws:iam::123456789012:root\"\n    },\n    \"Action\" : [ \"kms:Describe*\", \"kms:Get*\", \"kms:List*\" ],\n    \"Resource\" : \"*\"\n  } ]\n}"
}

おわりに

AWSマネージド型キーのキーポリシーが確認できます。
マネージドポリシーでいいかーとおもって使っていると権限が足りなくて実は裏でエラーになっているみたいなことになったりならなかったりするので確認しておくとよいです。

Amazon Web Services エンタープライズ基盤設計の基本

Amazon Web Services エンタープライズ基盤設計の基本

IAMグループにアタッチされているポリシーをツリー状に表示するPython

概要

IAMグループにアタッチされているポリシーをツリー状に表示するPythonを書いてみました。

スクリプト

スクリプトはこんなかんじ。

動かしてみる

こんなかんじで動作します。

$ python iam_group_tree.py
admin_group
└─ AdministratorAccess

test_group
├─ AlexaForBusinessReadOnlyAccess
├─ AmazonCloudDirectoryReadOnlyAccess
├─ AmazonChimeReadOnly
└─ AmazonAppStreamReadOnlyAccess

おわりに

こういうかんじの人間に優しい出力が役に立つときっていうのは意外にある気がする。

Amazon Web Services エンタープライズ基盤設計の基本

Amazon Web Services エンタープライズ基盤設計の基本

PythonでAWSCLIを実行する

概要

Pythonのスクリプトの中でAWSCLIを実行してみます。

こんなかんじ

こんなかんじで指定してあげることでAWSCLIを実行できます。

import subprocess

subprocess.call(['aws', 's3', 'ls'])

おわりに

べんりだったりそうでなかったりしそう。

AWS認定資格試験テキスト AWS認定 クラウドプラクティショナー

AWS認定資格試験テキスト AWS認定 クラウドプラクティショナー

インスタンスIDの一覧をPythonのリスト内包表記で取得する

概要

EC2インスタンスのIDの一覧をPythonのリスト内包表記をつかってかんたんに取得してみます。

前提

いずれも以下の様な感じで宣言してあるとする。

import boto3
ec2 = boto3.client('ec2')
response = ec2.describe_instances()

リスト内包表記の場合

こんなかんじでかんたんにできる

instance_id_list  = [response['Instances'][0]['InstanceId'] for response in response['Reservations']]
print(instance_id_list)
# ['i-XXXXXX', 'i-YYYYYY']

リスト内包表記じゃない場合

こんなかんじでループさせて配列のなかに入れあげる必要があった。

instance_id_list = []
for reservations in response['Reservations']:
    instance_id_list.append(reservations['Instances'][0]['InstanceId'])
print(instance_id_list)
# ['i-XXXXXX', 'i-YYYYYY']

おわりに

多少わかりにくいみたいなところはあるけれどね

AWS認定資格試験テキスト AWS認定 ソリューションアーキテクト-アソシエイト

AWS認定資格試験テキスト AWS認定 ソリューションアーキテクト-アソシエイト

特定のタグがついたロールにスイッチロールするIAMポリシー

概要

特定のタグがついたロールにスイッチロールするようなIAMポリシーです。

IAMポリシー

かんたんな説明

このポリシーの場合だと、environmentタグにdevという値が設定されているロールにスイッチロールすることを許可しています。

こんなかんじにタグでスイッチロール許可を与えることで、スイッチロールしたいロールのARNをポリシーに書く必要がなくなります。
なのでスイッチロールしたいロールが増えてもこのポリシーを書き換える必要はなく、スイッチロールしたいロールにタグを付けてあげるだけでよくなります。

おわりに

ひさびさに書いた

Amazon Web Services 業務システム設計・移行ガイド (Informatics&IDEA)

Amazon Web Services 業務システム設計・移行ガイド (Informatics&IDEA)

mysqlのパスワードをコマンドラインからわたして接続する

こんなかんじで--password='パスワード'とすることでパスワードをコマンドラインからわたすことができます。

$ mysql -h example.com -P 3306 -u ユーザ名 --password='パスワード'

ただ、あまりこの使い方は推奨されていない。
平文でパスワード書くことになっちゃうし。
(でもこうやってつかいたいときもあるよね)

シェルスクリプトとかに書いてcronで裏でうごかすとかそういうユースケースだとこれを利用せざるを得ないのかな…?

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

BMIを計算するシェルスクリプトを書いた

概要

戯れにBMIを計算してくれるシェルスクリプトを書いてみた。

スクリプト

こんなかんじ。

動かしてみるとこんなかんじ。

bmi.sh 身長 体重でうごく。

ちなみにいまの身長体重はこんなかんじ。
だいぶやせた。

$ ./bmi.sh 178 68
21.46


年始はこのくらいあった。

$ ./bmi.sh 178 78
24.61

おわりに

2ヶ月とすこしで10kgちかくやせた。
どうやってやせたかは別の機会に書く。

シェルスクリプトマガジン vol.56

シェルスクリプトマガジン vol.56

最近読んだ本とか見た映画とか漫画とか⑤

ここ2週間で読んだ本とか映画とか漫画とか

映画

みおわった。

マイティ・ソー バトルロイヤル

ラグナロク

ブラックパンサー

なんか英語がすごくききとりやすかった。

グエムル -漢江の怪物-

おもしろかったす。PS3くらいのCG

GODZILLA 怪獣惑星: パート1: 怪獣惑星

面白かったと思う。たぶん。

www.netflix.com

ゲーム

クリアした。

Crypt of the NecroDancer

むずかしかった。12時間くらい。

braceyourselfgames.com

何回閉じても無駄ですよ~のシェルスクリプトを書いた

概要

何回閉じても無駄ですよ~のシェルスクリプトを書いた。

「何回閉じても無駄ですよ~」が無限にでる。
Ctrl-cで終わらせることはできない。

スクリプト

うごかしてみる

実際にうごかしてみるとこんなかんじになる。

$ ./arrest.sh 
何回閉じても無駄ですよ~
何回閉じても無駄ですよ~
^C何回閉じても無駄ですよ~
^C何回閉じても無駄ですよ~
^C何回閉じても無駄ですよ~

終了させる方法

何回閉じても無駄なのではなくて単純にSIGINTをトラップしているだけ。
なので他の方法で止めればいい。

たとえばCtrl-zでこのスクリプトを一時停止させてからkill -9 プロセスIDとかpkill スクリプト名してあげればよい。

おわりに

おわり。

AnsibleでIAMポリシーを作成する

概要

Ansibleを利用してIAMポリシーを作成してみたいと思います。

playbook

playbookとそれでつかうJSONはこんなかんじ。

JSONに記載したポリシーのとおりにIAMポリシーが作成されます。

実行結果確認

ポリシーができている。

$ aws iam list-policies --query 'Policies[].PolicyName' | grep admin_policy
    "admin_policy", 

なかみもplaybookで指定したJSONとおなじであることがわかる。

$ aws iam get-policy-version --policy-arn arn:aws:iam::123456789012:policy/admin_policy --version-id v1
{
    "PolicyVersion": {
        "CreateDate": "2019-03-05T14:31:43Z", 
        "VersionId": "v1", 
        "Document": {
            "Version": "2012-10-17", 
            "Statement": [
                {
                    "Action": "*", 
                    "Resource": "*", 
                    "Effect": "Allow"
                }
            ]
        }, 
        "IsDefaultVersion": true
    }
}

おわりに

まあべんりよね。

Ansible実践ガイド第2版 impress top gearシリーズ

Ansible実践ガイド第2版 impress top gearシリーズ

RLoginでデフォルト設定を作成する

概要

ターミナルソフトであるRLoginでデフォルトの設定を作成する方法をご紹介します。

これをつかうことでホストが増えるたびにフォント変更して、右クリックの挙動変えて、選択でクリップボードいれて…みたいな煩わしい設定から開放されます。

こうやる

じぶんごのみに設定したホストを右クリックして「標準の設定にする」を選択します。
f:id:kabegiwakun:20190305230811p:plain

その後、新規ホストの作成時などに以下のチェックボックスを有効にしてあげるとその設定が使用されます。
f:id:kabegiwakun:20190305230958p:plain

おわりに

ずっとしらなかったよ…

ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習

ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習