かべぎわブログ

技術的なことについてかけたらいいな…

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

インスタンス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)

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シリーズ

AWSのEC2のLinuxにssh接続するときのユーザ名まとめ

AWSのEC2のLinuxにssh接続するときのユーザ名をまとめてみた。

まとめ

こんなかんじ。

ディストリビューション ユーザ名
Amazon Linux ec2-user
CentOS centos
Debian admin または root
Fedora ec2-user または fedora
RHEL ec2-user または root
SUSE ec2-user または root
Ubuntu ubuntu



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

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

CloudFormationで作ったインスタンスを削除したときにEBSがそのまま残ることがある

CloudFormationで作成したインスタンスにアタッチされていたEBSが削除されずにそのまま残ってしまうことがあります。
その対処法です。

template

これの15行目みたいなかんじでDeleteOnTermination: Trueを設定してあげる。

おわりに

わすれがち。

クラウドエンジニア養成読本[クラウドを武器にするための知識&実例満載!] Software Design plus

クラウドエンジニア養成読本[クラウドを武器にするための知識&実例満載!] Software Design plus

  • 作者: 佐々木拓郎,西谷圭介,福井厚,寳野雄太,金子亨,廣瀬一海,菊池修治,松井基勝,田部井一成,吉田裕貴,石川修,竹林信哉
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/03/14
  • メディア: Kindle版
  • この商品を含むブログを見る

EFSを作成してEC2のCentOSでマウントする(EFSマウントヘルパーつかわない)

EFSを作成して、EC2インスタンスのCentOSでマウントしてみたいと思います。
(EFSマウントヘルパーはつかわないバージョンです。)

手順

EFS用のセキュリティグループをつくる

まずEFSにアタッチするためのセキュリティグループを作成します。
インバウンドの2049ポートを開放してあげます。
f:id:kabegiwakun:20190218223706p:plain

EFSを作成する

マネジメントコンソールのEFSのファイルシステムの作成から、EFSの作成を開始します。

先ほど作成したセキュリティグループを選び、次のステップへすすみます。
f:id:kabegiwakun:20190218223952p:plain

適当に名前だけつけてあげて次のステップへすすみます。
f:id:kabegiwakun:20190218224202p:plain

内容を確認して、ファイルシステムを作成します。
f:id:kabegiwakun:20190218224301p:plain

EFSが無事にできあがりました。
f:id:kabegiwakun:20190218224429p:plain

CentOSにNFSクライアントをインストールする

EC2インスタンス上のCentOSにssh接続し、以下のコマンドを実行します。

$ sudo yum install -y nfs-utils

マウントポイントとしてディレクトリをつくっておきます。

$ sudo /mnt/efs

以下コマンドを実行してマウントします。
fs-XXXXXXXXの部分は作成したEFSのIDに書き換えてあげてください

$ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-XXXXXXXX.efs.ap-northeast-1.amazonaws.com:/ /mnt/efs

無事にマウントできました!!!!
最後の8エクサバイトのやつです。

$ df -h
Filesystem                                      Size  Used Avail Use% Mounted on
/dev/xvda1                                      8.0G  937M  7.1G  12% /
devtmpfs                                        473M     0  473M   0% /dev
tmpfs                                           495M     0  495M   0% /dev/shm
tmpfs                                           495M   13M  482M   3% /run
tmpfs                                           495M     0  495M   0% /sys/fs/cgroup
tmpfs                                            99M     0   99M   0% /run/user/1000
fs-XXXXXXXX.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /mnt/efs

おわりに

今回はEFSマウントヘルパーをつかわないバージョンでした。

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

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

CloudFormationでAn error occurred (InsufficientCapabilitiesException)が出たときの対処法

AWSCLIでCloudFormationのスタックを作成またはアップデートしようとしたときにこんなかんじのエラーがでた。

An error occurred (InsufficientCapabilitiesException) when calling the CreateStack operation: Requires capabilities : [CAPABILITY_NAMED_IAM]

こんなかんじで--capabilities CAPABILITY_NAMED_IAMを指定してあげれば良い。

$ aws cloudformation create-stack --stack-name kabegiwa-stack --template-url https://s3-ap-northeast-1.amazonaws.com/kabegiwa-bucket/wawawa.yml --capabilities CAPABILITY_NAMED_IAM

IAMリソースが作成されますけどいいですか?っていう確認のやつ。
よければ実行してしまおう。

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

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

CloudFormationでDependencyViolationが出たときの対処法

CloudFormationでもう使わないスタックを削除しようとしたらこんなかんじのエラーがでて、セキュリティグループが削除できなかった。

resource sg-XXXXXXXX has a dependent object (Service: AmazonEC2; Status Code: 400; DependencyViolation; Request ID: XXXXXXXXXX)

原因としてはCloudFormationで作成したセキュリティグループを手動で他のリソースにアタッチしたりすると発生する可能性がある。
そのリソースと依存関係になって削除できなくなっちゃたりとか。

消せないセキュリティグループをデタッチしてあげればこのエラーも解消される。

AWSによるサーバーレスアーキテクチャ

AWSによるサーバーレスアーキテクチャ