クラウドカストディアンを使用して Amazon RDS へのパブリックアクセスをブロック - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

クラウドカストディアンを使用して Amazon RDS へのパブリックアクセスをブロック

アベイ・クマール(AWS)とドワリカ・パトラ(AWS)によって作成されました

環境:本稼働

テクノロジー: データベース、セキュリティ、アイデンティティ、コンプライアンス

ワークロード:その他すべてのワークロード、オープンソース

AWS サービス: Amazon RDS

[概要]

多くの組織がワークロードとサービスを複数のクラウドベンダーで実行しています。このようなハイブリッドクラウド環境では、個々のクラウドプロバイダーが提供するセキュリティに加えて、クラウドインフラストラクチャには厳格なクラウドガバナンスが必要です。Amazon Relational Database Service (Amazon RDS) のようなクラウドデータベースは、アクセスや許可に関する脆弱性がないか監視する必要がある重要なサービスの1つです。セキュリティグループを設定することで Amazon RDS データベースへのアクセスを制限できますが、2 つ目の保護レイヤーを追加してパブリックアクセスなどのアクションを禁止することもできます。パブリックアクセスをブロックしておくと、一般データ保護規則 (GDPR)、Health Insurance Portability and Accountability Act (HIPAA)、米国国立標準技術研究所 (NIST)、Payment Card Industry Data Security Standard (PCI DSS) に準拠するのに役立ちます。

Cloud Custodian は、Amazon RDS などのAmazon Web Services (AWS) リソースにアクセス制限を適用するために使用できるオープンソースのルールエンジンです。Cloud Custodian では、定義されたセキュリティおよびコンプライアンス基準に照らして環境を検証するルールを設定できます。Cloud Custodian を使用すると、セキュリティポリシー、タグポリシーの順守、未使用リソースのガベージコレクション、コスト管理を実現することで、クラウド環境を管理できます。Cloud Custodian を使用すると、単一のインターフェースでハイブリッドクラウド環境にガバナンスを実装できます。たとえば、クラウドカストディアンインターフェイスを使用して AWS や Microsoft Azure を操作できるため、AWS Config、AWS セキュリティグループ、Azure ポリシーなどのメカニズムを操作する手間が省けます。

このパターンは、Cloud Custodian on AWS を使用して Amazon RDS インスタンスへのパブリックアクセスの制限を実施する手順を示しています。

前提条件と制限

前提条件

  • アクティブな AWS アカウント

  • キーペア

  • AWS Lambda がインストールされている

アーキテクチャ

ターゲットテクノロジースタック

  • Amazon RDS

  • AWS CloudTrail

  • AWS Lambda

  • Cloud Custodian

ターゲット アーキテクチャ

次の図は、Cloud Custodian がポリシーを Lambda にデプロイし、AWS がCreateDBInstanceイベント CloudTrail を開始し、Amazon RDS で Lambda 関数設定PubliclyAccessibleを false に設定しているところを示しています。

AWS で Cloud Custodian を使用して Amazon RDS インスタンスへのパブリックアクセスを制限します。

ツール

AWS サービス

  • AWS CloudTrail は、AWS アカウントのガバナンス、コンプライアンス、運用リスクを監査するのに役立ちます。

  • AWS コマンドラインインターフェイス (AWS CLI) はオープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。

  • AWS Identity and Access Management (IAM)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • Amazon Relational Database Service (Amazon RDS) を使用して、AWS クラウドでリレーショナルデータベース (DB) をセットアップ、運用、スケーリングできます。

その他のツール

  • Cloud Custodian」 は、多くの組織がパブリッククラウドアカウントの管理に使用しているツールとスクリプトを 1 つのオープンソースツールに統合します。ポリシーの定義と実施にはステートレスなルールエンジンを使用し、クラウドインフラストラクチャの指標、構造化された出力、詳細なレポート機能を備えています。サーバーレスランタイムと緊密に統合されているため、運用上のオーバーヘッドを低く抑えながらリアルタイムの修復と対応が可能です。

エピック

タスク説明必要なスキル

AWS CLI をインストールします。

AWS CLI をインストールするには、「AWS のドキュメント」 の指示に従います。

AWS 管理者

AWS 認証情報を設定します。

AWS リージョンや使用する出力形式など、AWS CLI が AWS とのやり取りに使用する設定を設定します。

$>aws configure AWS Access Key ID [None]: <your_access_key_id> AWS Secret Access Key [None]: <your_secret_access_key> Default region name [None]: Default output format [None]:

詳細については、AWS ドキュメントを参照してください。

AWS 管理者

IAM ロールを作成します。

Lambda 実行ロールを使用して IAM ロールを作成するには、次のコマンドを実行します。

aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}
AWS DevOps
タスク説明必要なスキル

クラウドカストディアンをインストールします。

ご使用のオペレーティングシステムと環境に Cloud Custodian をインストールするには、「Cloud Custodian ドキュメント」 の指示に従ってください。

DevOps エンジニア

クラウドカストディアンスキーマをチェックします。

ポリシーを実行できる Amazon RDS リソースの完全なリストを確認するには、以下のコマンドを使用します。

custodian schema aws.rds
DevOps エンジニア

クラウドカストディアンポリシーを作成します。

クラウドカストディアンポリシーファイルにあるコードを YAML 拡張子を使用して追加情報セクションに保存します。

DevOps エンジニア

パブリックにアクセス可能なフラグを変更するクラウドカストディアンアクションを定義します。

  1. カストディアンコード (例:/Users/abcd/custodian/lib/python3.9/site-packages/c7n/resources/rds.py) を探します。

  2. RDSSetPublicAvailabilityrds.py クラスを探し、追加情報セクションの c7n resources rds.py ファイルにあるコードを使用してこのクラスを変更します。

DevOps エンジニア

リサルの実行を行います。

(オプション) リソースに対してアクションを実行せずに、ポリシーによってどのリソースが識別されているかを確認するには、以下のコマンドを使用します。

custodian run -dryrun <policy_name>.yaml -s <output_directory>
DevOps エンジニア
タスク説明必要なスキル

Lambda を使用してポリシーをデプロイします。

ポリシーを実行する Lambda 関数を作成するには、次のコマンドを使用します。

custodian run -s policy.yaml

その後、このポリシーは AWS CloudTrail CreateDBInstance イベントによって開始されます。

その結果、AWS Lambda は基準に一致するインスタンスについて、パブリックにアクセス可能なフラグを false に設定します。

DevOps エンジニア

関連リソース

追加情報

クラウドカストディアンポリシー (YAML ファイル)

policies: - name: "block-public-access" resource: rds description: | This Enforcement blocks public access for RDS instances. mode: type: cloudtrail events: - event: CreateDBInstance # Create RDS instance cloudtrail event source: rds.amazonaws.com ids: requestParameters.dBInstanceIdentifier role: arn:aws:iam::1234567890:role/Custodian-compliance-role filters: - type: event key: 'detail.requestParameters.publiclyAccessible' value: true actions: - type: set-public-access state: false

c7n リソース rds.py ファイル

@actions.register('set-public-access') class RDSSetPublicAvailability(BaseAction): schema = type_schema( "set-public-access", state={'type': 'boolean'}) permissions = ('rds:ModifyDBInstance',) def set_accessibility(self, r): client = local_session(self.manager.session_factory).client('rds') waiter = client.get_waiter('db_instance_available') waiter.wait(DBInstanceIdentifier=r['DBInstanceIdentifier']) client.modify_db_instance( DBInstanceIdentifier=r['DBInstanceIdentifier'], PubliclyAccessible=self.data.get('state', False)) def process(self, rds): with self.executor_factory(max_workers=2) as w: futures = {w.submit(self.set_accessibility, r): r for r in rds} for f in as_completed(futures): if f.exception(): self.log.error( "Exception setting public access on %s \n %s", futures[f]['DBInstanceIdentifier'], f.exception()) return rds

セキュリティハブの統合

Cloud Custodian を「AWS Security Hub」と統合して、セキュリティ検出結果を送信し、修復アクションを試みることができます。詳細については、「クラウドカストディアンと AWS Security Hub を統合することについて」を参照してください。