Documentation

14. セキュリティーのベストプラクティス

新規の automation controller は、一般的な環境を自動化する安全な方法でデプロイされます。ただし、特定のオペレーティングシステム環境、自動化、および自動化プラットフォームを管理するには、セキュリティーを確保するいくつかの追加ベストプラクティスが必要になる場合があります。本書では、安全な方法で自動化するためのベストプラクティスを説明します。

14.1. 一般的なベストプラクティス

アプリケーションは、基礎となるシステムと同じくらい安全です。Red Hat Enterprise Linux を保護するには、まずリリースに適したセキュリティーガイドを参照してください。

14.2. Ansible およびコントローラーのアーキテクチャーについて

Ansible および automation controller は、汎用的で宣言型の自動化プラットフォームから構成されます。つまり、Ansible Playbook が (コントローラー 経由、または直接コマンドラインで) 起動すると、Ansible に提供される Playbook、インベントリー、および認証情報が信頼できるソースと見なされます。特定の Playbook コンテンツ、ジョブ定義、またはインベントリーコンテンツの外部検証に関するポリシーが必要な場合、このプロセスは、自動化を開始する前に (コントローラー Web UI またはコントローラー API を介して) 実行する必要があります。

これには多くの形式を使用できます。ソース管理、分岐、および必須のコードレビューの使用が、Ansible オートメーションのベストプラクティスになります。この方法でソース管理を使用してプロセスフローを作成するのに役に立つツールは多数あります。

より高度なレベルでは、自動化を含む任意のワークフローに関する承認とポリシーベースのアクションの作成を可能にする多くのツールが存在します。このようなツールは、コントローラーの API を介して Ansible を使用して自動化を実行できます。

We recommend all customers of automation controller select a secure default administrator password at time of installation. See コントローラー管理者パスワードの変更 for more information.

automation controller は、HTTP トラフィック用のポート 80 や HTTPS トラフィック用のポート 443 など、特定の既知のポートでサービスを公開します。オープンインターネットに automation controller を公開しないことが推奨されます。これにより、インストールの脅威が大幅に減少します。

14.3. アクセス権の付与

システムの特定の部分へのアクセスを許可すると、セキュリティーリスクが露呈します。安全なアクセスを支援するには、次のプラクティスを適用します。

14.3.1. 管理アカウントを最小限に抑える

安全なシステムを維持するには、システム管理アカウントへのアクセスを最小限に抑えることが重要です。システム管理者 (root) ユーザーは、システムアプリケーションへのアクセス、編集、および中断が可能になります。root アクセス権を持つユーザー (アカウント) の数を、可能な限り少数のグループにします。信頼できないユーザーに、root または awx (コントローラーユーザー) への sudo を付与しないでください。sudo などのメカニズムを使用して管理アクセスを制限する場合は、特定のコマンドセットに制限すると、依然として広範囲のアクセスが提供される可能性があることに注意してください。シェルまたは任意のシェルコマンドの実行を許可するコマンド、またはシステムのファイルを変更できるコマンドは、基本的に完全な root アクセスと同等です。

コントローラーのコンテキストでは、コントローラーの「システム管理者」または「スーパーユーザー」のすべてのアカウントが、コントローラーのインベントリーまたは自動化定義を編集、変更、および更新できます。これを、低レベルのコントローラー設定と災害復旧でのみ可能な最小ユーザーセットに制限します。

14.3.2. ローカルシステムアクセスを最小限に抑える

ベストプラクティスと併用する場合は、automation controller は管理目的を除き、ローカルユーザーアクセスを必要としません。管理者以外のユーザーはコントローラーシステムにアクセスできません。

14.3.3. ユーザーから認証情報へのアクセスを削除する

自動化認証情報がコントローラーにのみ保存されている場合は、安全性が増します。OpenSSH などのサービスは、特定のアドレスからの接続でのみ認証情報が可能になるように設定できます。自動化で使用される認証情報は、災害復旧やその他のアドホック管理にシステム管理者が使用する認証情報とは変えることができ、これにより監査を容易にします。

14.3.4. 職務の分離を強制する

異なるレベルのシステムにアクセスするために、さまざまな自動化が必要になる場合があります。たとえば、パッチを適用してセキュリティーベースラインチェックを実行する低レベルのシステム自動化や、アプリケーションをデプロイする高レベルの自動化などです。自動化の各部分に異なるキーまたは認証情報を使用することにより、1 つのキー脆弱性の影響が最小限に抑えられ、ベースライン監査も容易になります。

14.4. 利用可能なリソース

コントローラーなどに、安全なプラットフォームを確保するリソースがいくつかあります。次の機能の利用を検討してください。

14.4.1. 監査およびログの機能

管理アクセスの場合は、アクションの監査および監視を行うことが重要です。システム全体では、これは組み込みの監査サポート ( https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/chap-system_auditing.html) 内、および組み込みのロギングサポートを介して実行できます。

automation controller の場合、これは、コントローラー内のすべての変更を記録する組み込みのアクティビティーストリームサポートと、自動化ログを介して行われます。

ベストプラクティスでは、ローカルシステムでログを確認する代わりに、ロギングと監査を一元的に収集する必要があります。ご利用の環境で標準的な IDS または ロギング/監査 (Splunk)、もしくはその両方を使用するように automation controller を設定することが推奨されます。automation controller には、Elastic Stack、Splunk、Sumologic、Loggly などの組み込みロギング統合が含まれます。詳細は、ロギングおよびアグリゲーション を参照してください。

14.4.2. 既存のセキュリティー機能

SELinux を無効にしないでください。また、コントローラーの既存のマルチテナントコンテインメントを無効にしないでください。コントローラーのロールベースのアクセス制御 (RBAC) を使用して、自動化の実行に必要な最小限の特権を委譲します。コントローラーのチームを使用して、個々のユーザーではなくユーザーグループにパーミッションを割り当てます。『Automation Controller User Guide』の「ロールベースのアクセス制御」を参照してください。

14.4.3. 外部アカウントストア

コントローラーだけですべてのユーザーを維持すると、大規模な組織では時間のかかるタスクになり、エラーが発生しやすくなる可能性があります。Automation controller は、「LDAP」、「SAML 2.0」、および特定の「OAuth providers」を介した外部アカウントソースへの接続をサポートします。これにより、パーミッションを操作する際のエラーの原因がなくなります。

14.4.4. Django パスワードポリシー

コントローラー管理者は、Django を利用して作成時に AUTH_PASSWORD_VALIDATORS 経由でパスワードポリシーを設定し、コントローラーユーザーのパスワードを検証できます。コントローラーインスタンスの /etc/tower/conf.d にある custom.py ファイルに、次のコードブロックの例を追加します。

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        'OPTIONS': {
            'min_length': 9,
        }
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

詳細は、上記の例に加えて Password management in Django を参照してください。

変更を有効にするには、必ずコントローラーインスタンスを再起動してください。詳細は、コントローラーの開始、停止、および再起動 を参照してください。