かべぎわブログ

ブログです

IAMロールをかんたんに削除してくれるPythonを書いた

概要

IAMロールをかんたんに削除してくれるPythonをかきました。

ロールを削除する際にはポリシーをデタッチしたりインスタンスプロファイルをリムーブしたりいろいろしなければいけないですがこのスクリプトはそれらを解決します。
いろいろデタッチしたりしてからロールを自動で削除してくれます。

スクリプト

こんなかんじです。

つかいかた

こんなかんじ。
だいたいわかるとおもう。
基本的にはロール名を指定してあげるだけ。

usage: ./delete_role.py [-h] [--profile [PROFILE]] --role-name ROLE_NAME

required arguments:  
  --role-name ROLE_NAME The name of the role to delete.

optional arguments:  
  --profile [PROFILE]   Use a specific profile from your credential file.

おわりに

ぼくのPython力があのころとくらべてすごくあがっていることがわかる

イシューからはじめよ ― 知的生産の「シンプルな本質」

イシューからはじめよ ― 知的生産の「シンプルな本質」

自分のインスタンスIDを取得する方法まとめ

自分のインスタンスIDを取得する方法をまとめてみた。

メタデータを取得する

メタデータをcurlなりwgetなりで取得する。

curl http://169.254.169.254/latest/meta-data/instance-id
i-XXXXXX

cloud-utilを実行する

以下のコマンドを実行する。
AmazonLinuxであればデフォルトでインストールされている。
そうでないOSの場合はcloud-utilをインストールしてあげる必要がある。

ec2-metadata -i
i-XXXXXX

cloudinitのディレクトリを参照する

cloudinitのディレクトリにインスタンスIDがあるのでそれを見てみる。

cat /var/lib/cloud/data/instance-id
i-XXXXXX

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

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

AWSCLIで任意のタグのついたすべてのサービスのリソースを取得する

概要

AWSCLIを利用して任意のタグのついているすべてのサービス(すべてとは言っていない)のリソースを取得してみたいと思います。
このコマンドを利用することによりタグの--filterオプションが存在しないサービスのリソースも取得することができます。

コマンド例

こんなかんじです。
この例ではNameタグがwawawaとなっているリソースを取得しています。

$ aws resourcegroupstaggingapi get-resources --tag-filters Key=Name,Values=wawawa

{
    "ResourceTagMappingList": [
        {
            "ResourceARN": "arn:aws:ec2:ap-northeast-1:123456789012:instance/i-058196ffce03af4b9",
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "wawawa"
                }
            ]
        },
        {
            "ResourceARN": "arn:aws:ec2:ap-northeast-1:123456789012:volume/vol-05c851f6690f38cd5",
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "wawawa"
                }
            ]
        },
        {
            "ResourceARN": "arn:aws:lambda:ap-northeast-1:123456789012:function:wawawa_lambda",
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "wawawa"
                }
            ]
        }
    ]
}

EC2インスタンスとEBS、Lambdaが応答していることがわかります。

おわりに

結構便利だと思っている。
マネジメントコンソールだとリソースグループでおなじようなことができます。

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

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

PythonのBeautifulSoupでAWS What's Newの今月の一覧を取得する(強化版)

概要

BeautfulSoupをつかってAWS What's Newの今月の一覧を取得します。
本文も全部出してくれる強化版です。

スクリプト

実行してみる

こんなかんじでずらーっと今月の情報が出力されます。

ARMv6 や新しい機械学習コネクタをサポートする AWS IoT Greengrass 1.9.3 の提供開始
https://aws.amazon.com/jp/about-aws/whats-new/2019/09/aws-iot-greengrass-1-9-3-with-support-for-armv6-and-new-machine-learning-connectors-now-available/
投稿日: Sep 19, 2019
AWS IoT Greengrass Core 1.9.3 が公開されました。今回のリリースにより、AWS IoT Greengrass に ARMv6 アーキテクチャおよび新しい機械学習推論機能のサポートが追加されます。
この新しいプラットフォームのサポートにより、Raspbi
~~~省略~~~
Amazon Athena に、SELECT クエリの結果、または与えられた値のセットを使用して、テーブルにデータを挿入する機能を追加
https://aws.amazon.com/jp/about-aws/whats-new/2019/09/amazon-athena-adds-support-inserting-data-into-table-results-of-select-query/
投稿日: Sep 19, 2019
Amazon Athena で、INSERT INTO ステート
~~~省略~~~

おわりに

スクレイピングは迷惑をかけない範囲で


Elasticsearch実践ガイド impress top gearシリーズ

Elasticsearch実践ガイド impress top gearシリーズ

Python(boto3)でAWSCLIとおなじかんじでprofileをわたしてあげる

概要

PythonとAWSCLIをいったりきたりしていて、profileのわたしかたに統一性がなくて(特にPythonは作った人によって全然違ったりして)めんどくさいなあと思っていたのでそれらを解決できるようなものを書いた。

Pythonでも--profileをわたして実行させることができる。
AWSCLIの方に寄せるアプローチなのです。

コード

こんなかんじ。
profileが渡せているよという例としてget_caller_identityしている。

実行してみる

こんなかんじ。
--profileでわたしたconfigの値のロールでget_caller_identityしていることがわかる。

$ python ./profile.py --profile wawawa_test_role
arn:aws:sts::123456789012:assumed-role/wawawa_test_role/botocore-session-1569332255

なにも引数をわたさないとdefaultでうごきます。

$ python ./profile.py
arn:aws:iam::123456789012:user/kabegiwa

--helpでヘルプがみれます。

$ python ./profile.py --help
usage: profile.py [-h] [--profile [PROFILE]]

optional arguments:
  -h, --help           show this help message and exit
  --profile [PROFILE]  Use a specific profile from your credential file.

おわりに

sys.argvとかよりもかっこいいきがする


Amazon Web Services 定番業務システム14パターン 設計ガイド

Amazon Web Services 定番業務システム14パターン 設計ガイド

ワンライナーで特定のタグのついたインスタンスを起動/停止するAWSCLI

概要

AWSCLIのワンライナーで特定のタグのついたEC2インスタンスを起動/停止してみます。

インスタンスを起動する

Nameタグがwawawaとなっているインスタンスを起動するワンライナー

$ aws ec2 start-instances --instance-ids `aws ec2 describe-instances --filters "Name=tag:Name,Values=wawawa" "Name=instance-state-name,Values=stopping,stopped" --query "Reservations[].Instances[].InstanceId" --output text`

インスタンスを停止する

Nameタグがwawawaとなっているインスタンスを停止するワンライナー

$ aws ec2 stop-instances --instance-ids `aws ec2 describe-instances --filters "Name=tag:Name,Values=wawawa" "Name=instance-state-name,Values=running" --query "Reservations[].Instances[].InstanceId" --output text`

おわりに

shell環境でしかうごかないよ。


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

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

PythonのBeautifulSoupでAWS What's Newの今月の一覧を取得する

概要

PythonのBeautifulSoupを利用してAWSのWhat's Newの今月のトピックの一覧を取得してみます。

スクリプト

こんなかんじで取得できます。

h3タグをとってきてループさせています。

実行してみる

実行してあげるとこんなかんじです。

$ python ./scraping.py
Amazon EKS がクラスターへのタグ付けをサポート
Amazon DynamoDB 用 NoSQL Workbench のプレビュー版の発表
AWS Storage Gateway がファイルゲートウェイ向けの Amazon CloudWatch ログ記録およびメトリクスのサポートを追加
~~~ 省略~~~

おわりに

用法用量を守って正しくスクレイピング


株とPython─自作プログラムでお金儲けを目指す本 (技術の泉シリーズ(NextPublishing))

株とPython─自作プログラムでお金儲けを目指す本 (技術の泉シリーズ(NextPublishing))

Python(boto3)で~/.aws/configをつかってのAssumeRoleする

概要

Python(boto3)で~/.aws/configの設定をもとにAssumeRoleしてみます。

スクリプト

こんなかんじでできます。

前提

~/.aws/configはこんなかんじとする。

[default]
region = ap-northeast-1

[profile wawawa_test_role]
role_arn = arn:aws:iam::123456789012:role/wawawa_test_role
region = ap-northeast-1
source_profile = default

実行してみる

実行してみます。

$ python assume_role_config.py

{'UserId': 'AROA57T5RBG4NXXXXXXXX:botocore-session-1568437150', 'Account': '123456789012', 'Arn': 'arn:aws:sts::123456789012:assumed-role/wawawa_test_role/botocore-session-1568437150', 'ResponseMetadata': {'RequestId': '64639f72-d6ac-11e9-8076-21663c40f1af', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '64639f72-d6ac-11e9-8076-21663c40f1af', 'content-type': 'text/xml', 'content-length': '477', 'date': 'Sat, 14 Sep 2019 04:59:10 GMT'}, 'RetryAttempts': 0}}

get_caller_identity()がwawawa_test_roleで実行されていることがわかります。

おわりに

べんり


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

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

Python(boto3)でAssumeRoleする

概要

Python(boto3)でAssumeRoleしてみます。

スクリプト

こんなかんじ。

実行してみる

get_caller_identityしてみるとこんなかんじでAssumeRoleされていることがわかる。

$ python ./assume_role.py

{'UserId': 'AROA57T5RBG4BKZFFOHVS:wawawa', 'Account': '123456789012', 'Arn': 'arn:aws:sts::123456789012:assumed-role/wawawa_role/wawawa', 'ResponseMetadata': {'RequestId': '54126d63-d495-11e9-a87b-839603060e0e', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '54126d63-d495-11e9-a87b-839603060e0e', 'content-type': 'text/xml', 'content-length': '430', 'date': 'Wed, 11 Sep 2019 13:09:03 GMT'}, 'RetryAttempts': 0}}

AWS認定アソシエイト3資格対策?ソリューションアーキテクト、デベロッパー、SysOpsアドミニストレーター?

AWS認定アソシエイト3資格対策?ソリューションアーキテクト、デベロッパー、SysOpsアドミニストレーター?

  • 作者: 平山毅,堀内康弘,福垣内孝造,岡智也,池田大,原江梨佳,澤田拓也,原俊太郎,仲村勇亮,上村祐輝,鳥谷部昭寛
  • 出版社/メーカー: リックテレコム
  • 発売日: 2019/07/10
  • メディア: Kindle版
  • この商品を含むブログを見る

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認定 ソリューションアーキテクト ? アソシエイト教科書 徹底攻略シリーズ

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認定 クラウドプラクティショナー