AWS Organizations入門 SCPを使ってみた
やりたいこと
・2つの既存AWSアカウントに対して、AWS OrganizationsのSCPを使って管理できるようにしたい。
・OUに属するアカウントは、EC2サービスアクションのみ許可。つまりEC2以外の他サービスは触れないようにしたい。
やってみる
1. AWS Organizationsを起動
ルートアカウント(管理アカウント)で、AWS Organizationsを作成する。
構成が表示される。
2. OUを作成
Rootにチェックを入れて、アクションから組織単位>新規作成を選択する。
OU名をつけて作成ボタンぽち。
いざOU設計することになった場合、どのように考えればいいかな~と思っていたところ、以下が参考になりそうでした。
AWS Organizationsの設計に必須なOU設計のベストプラクティスを学ぶ | DevelopersIO
作成すると構成が表示される。
3. 別のAWSアカウントをOUに追加
今回は既存アカウントを追加。
まずは、ルートアカウント側のメールアドレスに認証メールを送信。
認証後、やっとOUに追加したいアカウントに招待メールを送信。
プロセスを完了してねとあるので、OUに追加したいアカウントにログインします。
OUに追加したいアカウントにログイン後、Organizations>招待にいくと、
招待を承認するか拒否するか選択する画面が表示されたので、承認するをぽち。
管理アカウントにログインして確認すると、OUに追加したいアカウントが見えるようになりました。
OUに参加させるため、対象アカウントにチェックを入れ、アクション>移動をぽち。
移動先にチェックを入れて、「AWSアカウントを移動」をぽち
OUに参加させることができました。
4.SCPを有効化
左ペインからポリシーを選択すると、デフォルトでは全ポリシー設定が無効になっているので、有効化します。
有効化直後は「FullAWSAccess」が存在します。ポリシー名をクリックして、もう少し確認します。
アタッチ先を見ると、デフォルトは全OUにアタッチされていました。
SCPを作成してアタッチするだけでは、この「FullAWSAccess」が効果を発揮してしまうため、後ほど「FullAWSAccess」はデタッチします。
ちなみに、SCP継承の詳細については、以下がとてもわかりやすかったです。
[AWS Organizations] SCP(サービスコントロールポリシー)の継承の仕組みを学ぼう | DevelopersIO
5.SCPを作成
試しに、EC2アクションのみ許可するポリシーを作成しました。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": [ "*" ] } ] }
6.SCPをOUにアタッチ
作成したポリシーにチェックを入れて、アクション>ポリシーのアタッチをぽち。
アタッチ対象を選択するよう求められるので、
対象OUにチェックを入れて「ポリシーのアタッチ」をぽち。
ポリシー画面で、ターゲットタブを確認するとアタッチしたOUが確認できました。
7.SCP「FullAWSAccess」をデタッチ
ポリシー画面から「FullAWSAccess」を選択しデタッチさせたいOUにチェックを入れて「デタッチ」をぽち。
「デタッチ」をぽち。
「FullAWSAccess」のターゲットから、選択したOUが表示されなくなったので、動作を確認します。
8.動作確認
OUに参加させたアカウントにログインします。
EC2画面は表示できますが、一例でS3画面は表示許可がないことが確認できました。
<EC2画面>
<S3画面>
以上!
参考リンク
AWS OrganizationsのSCP(サービスコントロールポリシー)を理解する | DevelopersIO
【AWS Lambda】PythonでS3からCSVを取得しRDSへ一括挿入してみた
検証用に作りました。もっとこうした方がいいよなどありましたら是非教えてください!:)
1. 何をしたいか
・S3にCSVをアップロードされたらLambdaを発火させる
・LambdaでアップロードされたCSVの全レコードを取得してRDS(MySQL)に一括挿入
2. Pythonコード
※RDS接続情報は本来機密情報なので、SecretsManager等で管理
※pymysqlモジュールはLambda Layerに格納した前提
import json import boto3 import sys import csv import pymysql import logging #rds settings rds_host = "database-1.XXXXXXXX.ap-northeast-1.rds.amazonaws.com" rds_user = "admin" rds_password = "XXXXXX" db_name = "testdb" logger = logging.getLogger() logger.setLevel(logging.INFO) s3_client = boto3.client('s3') def lambda_handler(event, context): logger.info("Starting to read csvfile from S3 ") bucket_name = event['Records'][0]['s3']['bucket']['name'] csv_file = event['Records'][0]['s3']['object']['key'] lines = csv_file_object['Body'].read().decode('utf-8').split() # read each line in csvfile results = [] csv_file = csv.reader(lines) # skip the header header = next(csv_file) for row in csv_file: results.append(row) print(row) print(results) logger.info("Connecting to RDS") # Connect to RDS connection = pymysql.connect(host=rds_host, user=rds_user, passwd=rds_password, db=db_name, connect_timeout=5) logger.info("Inserting records to RDS") sql_insert_Query = "INSERT INTO access (hostname, user, systemid) VALUES (%s,%s,%s)" cursor = connection.cursor() cursor.executemany(sql_insert_Query,results) connection.commit() print(cursor.rowcount, "Record inserted successfully into testdb table") return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
CCNA合格したので、学習したことを残します
ざっくり以下の流れで書きます。
- 学習時間
- 学習方法
- 前日・直前にしたこと
- 大事だと思ったこと(感想)
学習時間
学習しない日も含めて、約3ヶ月。
(1週間でとりましたとか言う人いますが、その記憶力ほしいです、ほんと)
時間で言うと、1ヶ月目は平日2時間前後。3ヶ月目は平日3時間で土日6時間前後。
学習方法
・1週間〜2週間目
以下の本をKindleで購入し読み込む。
・1週間でCCNAの基礎が学べる本 第2版 徹底攻略シリーズ
OR 1週間でCCNAの基礎が学べる本 第3版
内容は、初学者が置いてかれないよう、丁寧な説明でかなりわかりやすかったです。
それでも私は、iPadとかに書き出して頭にいれてましたw
・3週目以降
その日に学習する項目を決めて、以下①〜④のサイクルでやってました。
(今日はVLANを理解するぞーみたいな。)
①以下の白本を書籍で購入し一周読む。
・シスコ技術者認定教科書 CCNA 完全合格テキスト&問題集[対応試験]200 -301
メルカリとかでもたまに見かけるので、早めにメルカリ検索通知設定しておくといいかもです。
各章の問題は忘れてそうな頃に解き直しもしていました。
この本がけっこう分厚い本で、一周さえ挫折しかけました。。
②Ping-tで問題解く。
自社アカウントがあったので利用しました。
知識定着するし、本の内容を理解した気になってたことき気づけるので、よかったです。
参考までにレベル13くらいまでやりましたが、内容を理解さえすればレベルそこまで気にしなくていいんじゃね?派です。
③ネットで調べる。個人的に一番重要だと思う
本やPing-tをやってると、どうしてもわからないことがでてきます。
そんな時はググって、賢人がまとめてくださったサイトやYouTubeとかで理解してました。
あと、自分は英語受験のため、英語でググったり日本語→英訳できるかとかも意識してやってました。
④自分なりにまとめる。
ここで私の記憶力補助にかかせない、相棒のiPadです。
実は、LPIC1・2・300合格した時もお世話になりました。
利用ツールは標準搭載のNotesです。
まとめた内容に、よく間違えるポイントとかもどんどん書きこんでいきました。
前日・直前にしたこと
前日は、Notesにまとめた内容の見直しをしました。
同期されてるので、直前もiPhoneでざっくりNotesを見直しました。
大事だと思ったこと(感想)
CCNAに限らず他の試験でも言えることだと思いますが。
・好奇心を大切にする。
わからないとモチベーションも下がるので、わからない単語や説明があったら、自分のレベルに合った記事やYouTubeを探しました。
・どうやったらやる気があがるかを知っておく。
自分の場合、2ヶ月目あたりに急に仕事忙しくなったので、それを理由にサボる日がありました。そんな時は、自分がこれならできそうと思う学習(YouTubeとか)から入って机に向かうようにしました。
・略語を分解して意味を理解する
英字3文字用語や4文字用語がやたら出てきますが、みなさんどうやって覚えてますか?私は、分解すると覚えやすいと思う派です。
英語嫌いという方でも、ググれば意味なんてわかりますし、呪文のように覚えるよりも自分は効率いいと思いました。
以上!
Red Hat Update Infrastructure (RHUI)とは
RHUIについて意外と情報がまとまっていなかったので書きました。
RHUIとは
RHUIとは、RedHatNetworkから最新のエラータやRPMパッケージを引っ張ってきて、クライアントがyumコマンドで問い合わせた際にその最新情報を配布できるシステム環境、です。
そのため、メリットとしてクライアントに配布するパッケージを一括管理できることと、HTTPS経由で更新パッケージやエラータを取得できることが挙げられます。
閉じた環境ですと、最新パッケージをわざわざネットからダウンロードしてくる必要があるため、クライアントが大量にいると管理するには大変便利だと思います。ただし、その分システム利用のための証明書更新など別の管理が発生するので、そこも考慮した上での利用するかの判断になりそうですね。
さて、RHUIそのものはシステム環境のようなものなので、ちゃんと登場人物がいます。
RHUA、CDS、ロードバランサーです。
登場人物たちを下図にまとめました。ロードバランサーは、RHUAの手前に置いているところもあるかと思います。
RHUAは何しているのか?
RedHatNetworkから定期的に最新パッケージを取得し、クライアントに配布してくれるCDSとの共有ディスクに保存します。
また、以下項目についてはRHUAのコマンドラインからpulp-adminコマンドまたはrhui-managerで確認や設定変更が可能です。
・RHUAの最終更新日時や更新履歴の確認
・RedHatNetworkとRHUA間の同期タイミングの確認や設定変更 など
9.3. リポジトリーの同期を確認します。 3.1 | Red Hat Customer Portal
CDSは何しているのか?
クライアントへパッケージを配布するためのサーバー。可用性を担保するため、1つのRHUI環境に2つ以上のCDSが必要となります。
RHUAとの共有ディスクは、NASなど外部のストレージを利用するか、CDSの内臓ディスクをglusterfsとして使用するかのどちらかで構築することになります。
ちなみにglusterfsはオープンソースの分散ファイルシステムで、複数CDS上の記憶領域を集約して、論理的に1つのファイルシステムとして扱います。
この時の論理的ファイルシステムを、glusterボリュームと呼びます。glusterボリュームは、コマンドで状態確認や起動・停止などの操作が可能です。
複数CDSは互いに同期し合っており、その同期状況もgluster peer statusコマンドやgluster volume statusコマンドで確認できます。
17.8. ボリュームステータスの表示 3.5 | Red Hat Customer Portal
第9章 Gluster コマンドラインインターフェースの使用 3.5 | Red Hat Customer Portal
LoadBalancerは何しているのか?
クライアントから情報ちょうだいと問い合わせが来たとき、複数CDSのどれかに問い合わせを投げるサーバーです。
クライアントから見たら受付窓口なので、クライアントのhostsファイルに設定するIPアドレスはこのサーバーのIPアドレスということになります。
HAproxyを利用したり、keepalivedを利用して冗長構成とることも可能です。規模やRHUIのバージョン(3.0より下とか)によってはこの子がない環境もあるかもしれません。
以上!
ヒヤリちょっと集Vol.1 Windowsリモート接続でサインアウトからはんぐった
ヒヤリとしたことを集めていこうと思います。
Windowsリモート接続でサインアウトからはんぐった時のお話
いつも通り、仮想サーバにリモートデスクトップ接続し、作業を終えてサインアウトしようとした時のことです。
「あれ、サインアウトしてますから動かない.....。」
動きが遅いのは毎度のことなのでそのうち抜けるかな~と思ってました。
~10分後~
「まだ...サインアウトできてないだと....完全にはんぐった。-_-」
~30分後~
他ユーザがないので仕方なく×ボタンで閉じて、再度リモートデスクトップ接続しても状況変わらず。
試しに「Ctrl + Alt + Delete」を押したら
下記画面でタスクマネージャーを選択し、再度ログインすることができました!
もちろんそのあとサインアウトもできました。(ほっ
まとめ
リモデではんぐったら「Ctrl + Alt + Delete」で一件落着。
焦るとこんなことも思い出せない自分に喝!!
ちなみに、この画面をお好みでカスタマイズできる方法があるのでのっけときます。
素人でも中古PC(Windows7)をファイルサーバーにできた! <2. 自宅内共有編>
前回に引き続き、ファイルサーバーを自宅内で共有させました。
これで自宅であればどのPCからでもアクセスできます。
ちなみに、ここではMac → Windows(ファイルサーバー)という一方通行にしています。
外部からアクセスするよう設定される方もいますが
当方のような素人は知識が乏しいので怖くて絶対できません。
セキュリティできる人かっこいいな。
※念のためファイアーウォールが有効であることを確認してください
Windows側で準備
1. 共有フォルダを作成
今回は共有フォルダ用に「はてな」というフォルダを作成します。
Windowsは共有フォルダになるとフォルダに鍵マークがつきます。
対象フォルダを右クリックから[オプション]を選択します。
特定の人物しか入れないように、[特定のユーザ]を選択。
2. そのまま[共有]をぽち。[終了]をぽち。
共有フォルダのできあがり。
3. コマンドプロンプトから「ipconfig /all」でIPアドレスを確認
ファイルサーバは、初期化した状態でネットに接続していないため、割り振られていない状態でした。
これを自分で割り振る必要があります。
一方、家のWiFiを使っているPCたちはもちろん割り当てられています。
このすでに割り振られたIPアドレスが基準になります。
個人契約でWiFiルータに接続している家庭がほとんどだと思いますが、
家庭に設置されたルーターさんが接続されるPCにその場その場で割り当てています。(DHCPによる動的アドレス)つまり、接続する度に、IPアドレスが変わります。
ルーターさんが他のPCに割り当てるであろうアドレスを避けなければならないのにどうしたらいいのか。
4. 他のPCのIPアドレスを確認
WindowsPCであれば「3」で記載したコマンドで確認できますが、
Macの場合はコマンドプロンプトから「ipcinfig」で確認できます。
結果の中で見る場所はここ。
→ 「en0」の「inet」部分 = PCのIPアドレス
→ 「en0」の「broadcast」部分の「255」
例)XX.XX.XX.255 = 一番右だけ違う数字であれば家庭内で共有できる
例えば、Macで確認したPCのIPアドレスが「192.168.11.12」broadcastが「192.168.11.255」だったとします。
家庭内で共有するには「192.168.11.XX」のXX以外が同じで、「2~244」の中であれば共有可能です。
つまり、ファイルサーバーに割り振るIPアドレスは「192.168.11.20」でも「192.168.11.100」でもつながります。
※「192.168.11.1」はルーターに割り当てられている場合が多いので避けることが無難
※「192.168.200~240」が個人的にはいいと思います。他PCに割り当てられないような数字だもの。ちなみに自宅のルーター製品を検索すると、アドレス設定範囲が見れる方法がわかります。
今回は、「192.168.11.201」で設定してみます。
割当方法は画像で説明割愛。
5. 再度コマンドプロンプトから「ipconfig /all」でIPアドレスが振られたことを確認
Mac側から見てみよう!
1. Finderから[サーバへ接続]を選択
2. 先ほどファイルサーバに設定したアドレスを画像のように入力し、[接続]をします
3. 共有できたことを確認できました!
おわり。
素人でも中古PC(Windows7)をファイルサーバーにできた! <1. 事前準備編>
家に眠っていた古いPCをせっかくなのでファイルサーバとして現役復帰させてみました。
今回は準備段階としてディスクの初期化を行います。
PCスペック
Amazonで買ったわけではありませんが、富士通の「ESPRIMO D550/B」です。
でもこれ、有線キーボードじゃないと認識してくれないので要注意。
富士通 FUJITSU ESPRIMO FMV-D550/B Core2Duo 4GB 160GB DVD-ROM Windows7 中古 デスクトップ
- メディア: Personal Computers
事前準備(ディスクの初期化)
何せ中古ですし、約10年前に使用していたものなので、ディスクのお掃除が必要です。
出荷直後の状態に戻そうと初期化を実施しました。
最初はBIOS画面からできるだろうと再起動 →「F2」でやってみたのですが、BIOS画面から初期化ができそうなオプションがない!!
でも、今回使用したPCでは以下のやり方であっさりできました。Win7に振り回された感あります。。。
※スクショではないので画質悪いです
1. [スタートボタン]-[コントロールパネル]-[システムとセキュリティ]-[バックアップと復元]を開きます
2. [バックアップと復元]から[システム設定またはコンピュータの回復]を押します
3. 下記画面にいくので[高度な回復方法]を押します
4. 下記画面にいくので[コンピュータを出荷時の状態に戻す]を押します
5. 今回バックアップなしでいくので[スキップ]を押します
6. [再起動]を押します
7. 待機!
8. 待ってるとトラブル解決ナビが出てくるので、[リカバリ]タブを選択
9. [Cドライブのみ、ご購入時の状態に戻す]を選択し、[実行]を選択!
ちなみに、[全ドライブをご購入時状態に戻す]は富士通のトラブル解決用のドライバーディスクを挿入しないとできません。
10. [同意する]を選択
11. [リカバリ領域]を選択し、[OK]
その後、警告画面が出てきますが本当に初期化しちゃうよ?!という画面なので、
構わず「OK」を押します。
リカバリーが始まります。当方は、20Gほどしかデータがなかったので数分で終わりました。
12. [ハードディスク領域変更ツール]が立ち上がるので、区画割合を決めて[実行]を押下
当方はパートナーと家でファイル共有したかったので、今回Dドライブを大きめに割当てたいところです。
ですが、このまま進めてもあとで区画を再割当する方法も記載したいのでこのまま進めます。(もちろんここで自分のやりたい割当をさっさと済ませた方がいいです)
12. この設定でいいか聞かれるので[はい]を押下
ちなみに今こんな割当ですが、
あーやっぱり変えたいと思ったらこのあと記載する再割当作業をします。
<現在>
Cドライブ:104GB
Dドライブ:32GB
<再割当後>
Cドライブ:32GB
Dドライブ:104GB
13. 初期設定画面が勝手に立ち上がるので[実行する]を押下
PCの初期設定作業です。これで必要なシステム構成、ユーザ情報ファイルなどが作成されCドライブに格納されます。
これで初期化は完了です。
ここからは先は、もしディスクの再割当をする場合を記載します。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
14. [コントロールパネル]-[システムとセキュリティ]-[管理ツール]から[ハードディスクパティションの作成とフォーマット]を選択
15. ディスク管理画面が開くので、まずはCドライブを縮小。赤枠のCドライブを右クリックし、[ボリュームの縮小]を選択
今回はこんな感じで変えていきます。
Cドライブ:104GB → 32GB
Dドライブ:32GB → 104GB
16. Cドライブは32GBにするために、[縮小する領域のサイズ]を手打ち入力します
ここでは、Cドライブを32GB (32 × 1024 = 32768) にするために
つまり、[縮小後の合計サイズ] が 32768 となるように
[縮小する領域のサイズ] に 縮小前の合計サイズ - 32768 を打ち込みます。
「32768」にする理由は、単位がそもそも人間のわかりやすいGBとここで設定する単位(MiB)が違うこと、そして人間とパソコンの世界では表し方が異なるためです。
ざっくり知りたい方はこちらのサイトが参考になります。
https://wa3.i-3-i.info/word12969.html
17. 残念ながらDドライブは拡張ができないので、一旦削除して割り当てなおします。赤枠のDドライブを右クリックし、[ボリュームの削除]を選択
18. 削除したDドライブ分が「未割当」状態になるので、赤枠を右クリックで[新しいシンプルボリューム]を選択
19. 最大ディスク領域の「107368」をそのまま[シンプルボリュームサイズ]に割り当てるため入力
ここでも割り当てたい104GBをPC寄りの単位に表示されているだけです。
104GB × 1024 = 107368 MiB
20. あとはデフォルトで[次へ]を押下していき[完了]!
最後までお付き合いありがとうございました。