ちょっと話題の記事

AWS上で他アカウントの監視を行うための準備設定

2015.02.03

ウィスキー、シガー、パイプをこよなく愛する大栗です。 AWS上のリソースを監視していますか?AWSの監視を行うためには下準備が必要ですので、その下準備についてまとめてみました。

どんな準備が必要か?

監視方法

AWS上のリソースを監視する場合には、大きく2種類が考えられます。

  1. ネットワーク経由で直接アクセスして情報を取得する。
  2. AWSのAPI経由で情報を取得する。

ネットワーク経由の場合は、オンプレミスでも同様ですが普通にネットワーク経由でアクセスします。AWSのAPI経由の場合は、CloudWatchやDescribe系のAPIで情報を取得します。 監視サーバと監視対象が同じネットワーク内で同じアカウントの場合は、下準備は必要ありません。しかし、別のVPCで別のアカウントを監視したいと言った時はどうしたら良いでしょうか?

必要な準備

ネットワークの接続

ネットワークを繋ぐ方法として、先ずインターネット経由でアクセスやVPNを繋ぐ方法が考えられます。しかし、インターネット経由だと直接アクセスできるのはPublicサブネット部分だけになるため中継サーバ(Zabbixの場合であればZabbixProxy)が必要になります。 VPCにはVPC Peeringという機能があるため、同じリージョンであればVPC同士を直接接続することが可能です。あえてインターネット経由でアクセスする場合もあるでしょうが、今回はVPC PeeringでVPCを接続します。

IAM権限

他のアカウントに対してAPIを発行する場合は、IAMユーザを発行してアクセスキーを使用してAPIを発行することが考えられます。しかし、アクセスキーを使用すると気がキーの流出やローテーション管理などが必要になってしまうので、できればIAM Roleを使用したいですね。 IAMにはクロスアカウントアクセスという機能があり、別のアカウントのIAM権限を委任することができます。委任されるので別アカウントの情報を自身のアカウント情報を使用して取得することができるようになります。これでIAM Roleを使用することが可能になります。

設定方法

別VPC、別アカウントに対して接続する場合の設定方法を提示します。

VPCの接続設定

各VPCを"Peering01-TEST"と"Peering02-TEST"としてPeeringしてつなげます。"Peering01-TEST"と"Peering02-TEST"は別アカウントを想定しています。 ※:以下のPeering設定作業は作業するアカウントを反対にしても設定可能です。

Untitled__4_

VPC Peeringの設定

"Peering01-TEST"側のVPCの画面で[Peering Connections]から[Create VPC Peering Connection]をクリックします。

VPC_Management_Console

以下の情報を入力して、[Create]をクリックします。

  • Local VPC to peer:このアカウントの接続元VPCを選択します。
  • Account:別のアカウントへ接続するため[Another account]を選択します。同じアカウントの場合は[My account]を選択してください。
  • Account ID:接続先のアカウントID(12桁の数字)を入力します。
  • VPC ID:接続先のVPC IDを入力します。

VPC_Management_Console

入力内容を確認して[OK]をクリックします。

VPC_Management_Console

以下のようにPending Acceptanceの状態のコネクションができます。

VPC_Management_Console_と_VPC_Management_Console_と__2_KDDI_ChatWork_-_AWSチーム

次は"Peering02-TEST"側で操作します。 "Peering02-TEST"側のVPCの画面で[Peering Connections]でも以下のようにコネクションがPending Acceptanceの状態で表示されます。VPC_Management_Console_と_VPC_Management_Console_と__1_KDDI_ChatWork_-_AWSチーム

コネクションを選択して、[Accept Request]をクリックします。

VPC_Management_Console_と_VPC_Management_Console_と__1_KDDI_ChatWork_-_AWSチーム

コネクションの内容を確認して[Yes, Accept]をクリックします。

VPC_Management_Console

[Close]をクリックします。

VPC_Management_Console

コネクションが[Active]になりました。

VPC_Management_Console_と_VPC_Management_Console_と_KDDI_ChatWork_-_AWSチーム

"Peering01-TEST"側でも[Active]になっています。

 

VPC_Management_Console_と_VPC_Management_Console

Route Tableの設定

 

VPCがPeeringされたので、各VPC上でルーティングの設定を行います。

まず"Peering01-TEST"側で設定を行います。 VPCの[Route Tables]で使用しているRoute Tableに以下のルートを追加します。

  • Destination:接続先VPC(Peering02-TEST)のCIDR
  • Target:作成したVPC Peering Connection

VPC_Management_Console_と_VPC_Management_Console

次に"Peering02-TEST"側で設定を行います。 VPCの[Route Tables]で使用しているRoute Tableに以下のルートを追加します。

  • Destination:接続先VPC(Peering01-TEST)のCIDR
  • Target:作成したVPC Peering Connection

 

VPC_Management_Console_と_VPC_Management_Console

これでVPC同士が接続できるようになりました。

Security Groupの設定方法

VPC間の通信はSecurity Groupの設定をIPアドレスで行う必要がありますので注意してください。

クロスアカウントアクセスの設定

事前に監視対象アカウントから監視元アカウントへIAM権限の委任する設定を行います。 手順は以下になります。

監視される側のアカウントで委任するための権限をIAM Roleとして作成します。 ここでは"cross-role"と名付けます。

IAM_Management_Console_と_AWS_CLIがAssumeRoleによる自動クレデンシャル取得とMFAに対応しました!_|_Developers_IO_と_Authy_と_ec2-user_ip-10-10-3-208__

"Role for Cross-Account Access"で"Provide access between AWS accounts you own"を選択します。

IAM_Management_Console_と_AWS_CLIがAssumeRoleによる自動クレデンシャル取得とMFAに対応しました!_|_Developers_IO_と_Authy_と_ec2-user_ip-10-10-3-208__

監視元側のアカウントIDを入力します。MFAを使用しないので"Require MFA"はチェックしません。

IAM_Management_Console_と_Role_for_Cross-Account_Access_と_AWS_CLIがAssumeRoleによる自動クレデンシャル取得とMFAに対応しました!_|_Developers_IO_と_Authy_と_ec2-user_ip-10-10-3-208__

委任する権限を選択します。ここでは"Read Only Access"を選択します。

IAM_Management_Console

設定された権限を確認します。

IAM_Management_Console_と_Role_for_Cross-Account_Access_と_AWS_CLIがAssumeRoleによる自動クレデンシャル取得とMFAに対応しました!_|_Developers_IO_と_Authy_と_ec2-user_ip-10-10-3-208__

内容を確認して"Create Role"をクリックします。

IAM_Management_Console

以下のように権限が委任されています。

IAM_Management_Console_と_Role_for_Cross-Account_Access

上記の設定を行うとAssumeRoleを使用して、別アカウントの権限でAPIを発行できます。AWS CLIから使用する方法については、以下の記事を参照してください。

AWS CLIがAssumeRoleによる自動クレデンシャル取得とMFAに対応しました!

さいごに

AWSの機能により、別の環境を監視する準備を行うことができました。ここでは下準備のみを述べますので、ここで終了します。 別のネットワークへ通信したり、別アカウントの権限でAPIを発行したりすることができます。監視情報はセンシティブな場合があるため、このような手段を使用してセキュアに監視を行いましょう。