Amazon Web Services ブログ

AWS ConfigでSAPシステムを評価する – パート2

はじめに

パート1では、AWS Configマネージドルールを使用してSAPランドスケープのを自動的に監査および評価する方法をお伝えしました。また、お客様のEC2インスタンスがSAPのベストプラクティスに従って設定されていることを確認するソリューションをお伝えしました。現在、AWSはバージニア北部リージョンでは160を超えるマネージドルールを提供しています。

インフラストラクチャに加えて、お客様はアプリケーションのコンプライアンスを維持する必要もあります。ここでは、AWS Configカスタムルールについてご説明します。AWS Configカスタムルールを使用すると、マネージドルールでカバーされているものに加えて、独自の構成チェックを定義できます。基本的にAWS Configカスタムルールは、AWSリソースのリストに対してAWS Lambda関数を実行します。

アプリケーション設定の代表的な例としてシステムパラメータがあります。例えば、オペレーティングシステム、データベース、SAP S/4HANA、SAP NetWeaver、SAP ECCなどの複数のアプリケーションが該当します。本ブログ記事では、SAP S/4HANAのSAPアプリケーションパラメータの1つを監査します。このようなカスタムルールを1つ作成し、SAP S/4HANAアプリケーションを実行するEC2インスタンスでSAPパラメータが正しい値に設定されていることが確認できます。このソリューションを拡張して、必要に応じて他のパラメータ(またはパラメータのグループ)を評価することもできます。

ソリューション概要 : AWS Configカスタムルール

まずはじめに、このブログで評価されているパラメータについて説明しましょう。SAP S/4HANAユーザーは、自身のユーザーIDを使用してABAPアプリケーションに接続します。これらの通常のユーザーとは別に、SAPはいくつかの標準スーパーユーザーが存在します。SAP*はそのような標準ユーザーの1つです。このユーザーは権限チェックの影響を受けず、すべての権限を所持しています。ベストプラクティスとして、SAPはすべてのSAPシステムでこのユーザーを非アクティブ化することを推奨しています。パラメータlogin/no_automatic_user_sapstarは、SAP*ユーザーのアクティブ化と非アクティブ化のこの役割を果たしています。無効にするには、このパラメータを値1に設定します。S/4HANAだけでなく、このパラメータはABAP Platform 1909基盤のすべてのSAPアプリケーション、およびABAPプラットフォーム用のSAP Netweaver AS(アプリケーションサーバー)などの古いバージョンのABAPプラットフォームも該当します。

このソリューションでは、既存の踏み台ホストにアクセスするAWS Lambda関数を構築し、この踏み台ホストはプライベートサブネット内のSAPインスタンスと通信して、必要なパラメーター値を収集します。この値はAWS Configで、準拠または非準拠であることが評価されます。

ステップ

では、カスタムルールの作成手順を見てみましょう。

AWS Lambda関数

  • カスタムルールを作成する前にLambda関数を作成します。AWSマネジメントコンソールの「Services」で、「Lambda」を検索します。

 

  • AWS Lambdaで、「function」に移動し、「Create function」を選択します。

 

  • 「Use a blueprint」を選択します。

 

  • 「Filter」で、キーワードconfigと入力し、Enterキーを押します。そうすると2つのブループリントを取得します。「config-rule-change-triggered」を選択し、「Configure」を選択します。

 

  • 関数名を入力してください(例:sapparam-config-sapstar)この名前を書き留めておきます。後の設定手順で必要になります。

 

  • 「Execution role」で、「Create a new role from AWS policy templates」を選択し、ロール名(例:sapparam-config-sapstar)を入力します。この名前を書き留めておいてください。後の設定手順で必要になります。

 

  • 下部にある「Create function」を選択します。

 

  • これで関数が正常に作成されました。ARNを書き留めます。ブループリントのコードは、リソースが目的のインスタンスタイプのEC2インスタンスであるかどうかをチェックすることです。ロジックはお客様の要件に従って変更する必要があります。たとえば、プロファイルのファイル内の特定のパラメータを検索しその値を目的の値と比較するということがあります。

 

  • コードを編集するには、「Configure」セクションの「Function Code」サブセクションの「index.js」を自身のJavaScriptに置き換えて保存します。このブループリントでは、関数「evaluateChangenotificationCompliance」はインスタンスのコンプライアンスステータスを評価します。また、JavaScriptで参照されている場合は、追加モジュールを足す必要があります。

 

  • AWS Secrets Managerでシークレットを作成しSSHキーペアを保存します。(EC2インスタンス接続するためにはEC2インスタンスキーペアが必要です。)これをLambda関数で使用されるシークレットとして平文形式で安全に保管することができます。

 

  • また、Lambda関数に割り当てられたIAMロールを更新して、シークレットを取得できるようにする必要があります。このために、ポリシー「secret_sap_private_key」を作成し、ロールにアタッチします。

 

  • サンプルコードを使用して、このシークレットから値を取得できます。

 

const aws = require('aws-sdk');

const config = new aws.ConfigService();

var privateKeyStr = '';

// Retrieve the private key from AWS Secrets Manager
async function getPrivateKey() {

const region = "eu-west-1";
const secretName = "sapapp.pem";

// Create a AWS Secrets Manager client
var client = new aws.SecretsManager({
region: region
});

return new Promise((resolve,reject)=>{

client.getSecretValue({SecretId: secretName}, function(err, data) {

if (err) {
reject(err);
}
else {
// Decrypts secret using the associated KMS CMK.
// Depending on whether the secret is a string or binary, one of these fields will be populated.
if ('SecretString' in data) {
resolve(data.SecretString);
} else {
let buff = new Buffer(data.SecretBinary, 'base64');
resolve(buff.toString('ascii'));
}
}
});
});
}

 

  • 踏み台サーバを介してSAPアプリケーションサーバーに安全に接続するには、Lambda関数に環境変数を追加し、モジュール「node-ssh-forward」を使用します。

 


const SSHConnection = require('node-ssh-forward').SSHConnection;
const sshConnection = new SSHConnection({
endHost: configurationItem.configuration.privateDnsName,
bastionHost: process.env.BASTION_HOSTNAME,
username: 'ec2-user',
privateKey: privateKeyStr
});

await sshConnection.forward({
fromPort: 9000,
toPort: 80, // 80
});

 

  • タイムアウト値を十分なしきい値に増やしましょう。ラムダ関数は約10秒で実行されます。バッファとしてタイムアウトは1分にします。

 

  • Lambda関数とEC2インスタンス間の安全な通信のためにENIの作成を許可します。(Lambda関数に割り当てられたIAMロールにポリシーをアタッチします)

 

  • Lambda関数をVPCに関連付けし通信を保護します。また、Lambda関数にアタッチされたENIを使用してセキュリティグループを更新します。今回は通信のためにSSHポート22を開く必要があります。

 

AWS Configカスタムルール

  • これで、カスタムルールを作成する準備ができました。「Services」に移動し、「config」を検索します。

 

  • 「Rules」に移動します。

 

  • 次の画面で、「Add Rule」を選択します。

 

  • 次の画面で、「Add custom rule」を選択します。

 

  • 「Name」(例:sapparam-config-sapstar)と付随する「Description 」、「AWS Lambda function ARN」を入力します。

 

  • 「Trigger」セクションで、「Trigger types」は両方とも選択します。「Scope of changes」で、「Resources 」と「EC2: Instance」を選択します。「Frequency」で、必要な期間を選択します。

 

  • 「Rule parameters」セクションで、「login/no_automatic_user_sapstar 」としてキーを入力し、「Value 」に「1」を入力します。セクションの残りの部分はそのままで保存してください。

 

  • これでルールがインスタンスを検出して評価し、ステータスがレポートされます。

 

  • コンプライアンスタイムライン — EC2インスタンスのコンプライアンス履歴は、コンプライアンスタイムラインに表示されます。

 

コストシナリオ

コスト計算のために以下の条件と仮定します。

  • 50台のEC2インスタンス
  • 米国東部(バージニア北部)リージョン
  • 10個のルール
  • 各インスタンスで実行される各ルール(1日1回)

AWS Config Configuration Items:

記録された設定項目の数 想定コスト(月)
10,000 10,000 * .003 = $30.00

注:設定項目はアカウントに存在するサポートされているAWSリソースの様々な属性の、その瞬間の状態を表します。構成項目のコンポーネントには、メタデータ、属性、関係、現在の構成、および関連イベントが含まれます。AWS Configは、記録しているリソースタイプへの変更を検出するたびに設定項目を作成します。たとえばAWS ConfigがAmazon S3バケットに記録している場合、バケットに対する作成、更新、または削除が行われるたびにAWS Configによって設定項目が作成されます。詳細については、「AWS Config Concepts」ページを参照してください。

AWS Config Rules:

SAPインスタンス数(I) ルール数(R) 評価数(E) 想定コスト
50 10 I*R*30 Days E*.001
50*10*30 = 15,000 15,000*.001 = $15.00

AWS Lambda:

カスタムルールが実行されると関連づけられたLambda関数が呼び出されます。

SAPインスタンス数(I) ファンクションコール数/日(R) メモリ割り当て量/日(M) 期間/コール (D) 評価数 (E) 想定コスト
50 10 128 MB 22000 ms I*R*30*D*0.001*M/1024*0.0000166667 USD $0.69

AWS Secrets Manager:

AWS Secrets Managerにシークレットを1つ保管しており、実行毎に1回呼び出されます。

シークレット数(S) APIコール数/月 (C) 評価数 (E) 想定コスト
1 15000 (0.40*S) + (0.05*ROUNDUP(C/10,000)) $0.50

Amazon S3:

加えて、Amazon S3バケットはAWS Config Serviceと設定アイテムに関連した設定とコンプライアンス履歴を保管するために利用されます。

PUTリクエスト数(P) GETリクエスト数(G) 評価数(E) 想定コスト
1 15000 15000 (0.023*S) + (P*0.000005) + (G*0.0000004) $0.11

コストサマリ:

上記の前提に基づいて、上記のリソースの月間コストの合計は46.30ドルと想定されます。AWSは定期的にコストを最適化するため、上記の各サービスについて、以下の料金の詳細を参照してください。

結論

AWS ConfigカスタムルールがSAPプロファイルパラメータをチェックしていることが確認できました。同様にこれらのカスタムルールを使用して、ランドスケープ内のすべての重要なパラメータを追跡することができます。このように、AWS Configは、エンタープライズシステムランドスケープ全体のコンプライアンスをモニタリングするための中心になります。本サービスはインフラストラクチャとともにアプリケーションを安全に管理、統制するのに役立ちます。本シリーズでお伝えしたように、Amazon EventBridgeおよびAmazon Simple Notification Serviceを使用してEメール通知を有効にして、リソースに非準拠のフラグが付けられた場合に通知することもできます。これらのAWSサービスをビルディングブロックとして活用しゴールを目指してください。

次にすることは?

SAP on AWSランドスケープの統合ケースとシナリオの詳細については、sap-on-aws@amazon.comまでお問い合わせください。またはaws.amazon.com/jp/sap_japanをご覧ください。

翻訳はPartner SA 松本が担当しました。原文はこちらです。