AWS KMSを使用してデータを保護するためのvSRX仮想ファイアウォール3.0の展開
AWS KMSとvSRX仮想ファイアウォール3.0の統合
Junos では、VPN やその他のアプリケーション(mgd など)を統合し、AWS KMS と vSRX 仮想ファイアウォール 3.0 を通信できるようにするラッパーライブラリを利用できます。このラッパー ライブラリは、PKCS#11 API を使用してキー管理サービス (KMS) へのインターフェイスを提供します。Junos アプリケーションは、AWS クラウドプラットフォームのサポートが更新されたこのラッパーライブラリを使用して、KMS と通信します。
AWS上のKMSにアクセスするためにvSRX仮想ファイアウォール3.0を有効にしてセットアップするには。
-
AWSでvSRX仮想ファイアウォール3.0インスタンスを起動します。
-
vSRX 仮想ファイアウォール 3.0 用の KMS と DynamoDB をセットアップします。
vSRX 仮想ファイアウォールを使用して KMS サービスと通信する前に、次の手順で AWS 環境/アカウントを設定する必要があります。
-
DynamoDB テーブルを作成します。
AWS上のDynamoDBサービスは、vSRX仮想ファイアウォール3.0アプリケーションによって作成されたキー情報を保存および管理するために、KMS PKCS11プロセスによって使用されます。そのため、dynamo DBテーブルを作成し、作成したテーブルの名前をvSRX仮想ファイアウォール3.0に渡す必要があります。
ウェブコンソールまたは CLI を使用して、DynamoDB テーブルを作成します。ウェブコンソールでは、 DynamoDB->Tables に移動し、キーを格納する新しいテーブルを作成するオプションがあります。
-
vSRX仮想ファイアウォール3.0インスタンスへのアクセスを有効にするIAMロールを作成します。
KMSサービスは、AWS上のvSRX仮想ファイアウォールなどのEC2インスタンスで利用できます。前述のように、DynamoDB テーブルを作成した後、vSRX 仮想ファイアウォールでサービスを使用するには、アクセスポリシーを持つ IAM ロールを有効にしてインスタンスにバインドする必要があります。また、vSRX仮想ファイアウォールはCloud Watchを使用してイベントを記録します。そのため、たとえばこのサービスを有効にするポリシーも必要です。
これらのポリシーは、vSRX仮想ファイアウォールインスタンスでKMSサービスを使用するために最低限必要です。ロールが作成されたら、GUI または AWS CLI を使用して、この IAM ロールをインスタンスにアタッチできます。
IAM ロールには、以下のアクセスポリシーを含める必要があります。
AWS Managed:
AmazonS3ReadOnlyAccess
Amazon SSMReadOnlyAccess
クラウドウォッチフルアクセス
カスタム:
DynamoDBTableFullAccess
Equivalent JSON: { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "dynamodb:*", "Resource": "*" } ] }
KMSフィールドアクセス
Equivalent JSON: { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "kms:GetPublicKey", "kms:Decrypt", "kms:TagResource", "kms:Encrypt", "kms:CreateKey", "kms:Sign" ], "Resource": "*" } ] }
-
-
IAMロールをvSRX仮想ファイアウォールインスタンスにアタッチします。
IAM ロールを作成したら、GUI または AWS CLI を使用して、vSRX 仮想ファイアウォール インスタンスにアタッチします。
WebコンソールでvSRXインスタンスをアタッチするには、インスタンスに移動します。Web コンソールの上隅で、[ アクション ] → [ セキュリティ ] → [IAM ロールの変更] の順にクリックします。作成した IAM ロールをアタッチします。 「Amazon EC2 の IAM ロール」を参照してください。
コマンドを使用して HSM の状態
show security hsm status
を確認します。この CLI 出力が更新され、使用されている DynamoDB と、HSM の到達可能性、マスターバインディングキー(MBK)、マスター暗号化キー (MEK) ステータスが表示されます。最初は、HSM の状態に [アクセス可能] が [いいえ] と表示されます。HSM サービスにアクセスできるようにするには、vSRX インスタンスでキーが保存されている DynamoDB テーブルを指定する必要があります。コマンドを使用して
request security hsm set dynamo-db <name_of_the_dynamodb>
DynamoDB テーブルを指定します。このコマンドを実行すると、HSM ステータスがアクセス可能に変わり、AWS dynamoDB にバインドされた dynamoDB テーブルが表示されます。
-
KMSサービスを有効にした後、vSRX仮想ファイアウォール3.0のコマンドを使用してマスター
request security hsm master-encryption-password set plain-text-password
暗号化キー(MEK)を指定する必要があります。MEKを指定すると、vSRX仮想ファイアウォール3.0はKMSでRSA 2048キーペア(MBK)を作成し、KMSでマスターバインディングキー(MBK)を使用してMEKを暗号化します。MEKは、設定ハッシュ、秘密鍵ペアファイル、マスターパスワードファイル(存在する場合)などの保存データを暗号化するための鍵として使用されます。
マスター暗号化パスワードを変更します。
マスター暗号化パスワードを変更する場合は、動作モードから次のコマンドを実行します
request security hsm master-encryption-password set plain-text-password
。メモ:マスター暗号化パスワードの変更中は、設定を変更しないことをお勧めします。
マスター暗号化パスワードがすでに設定されているかどうかがチェックされます。マスター暗号化パスワードが設定されている場合は、現在のマスター暗号化パスワードを入力するよう求められます。
入力したマスター暗号化パスワードは、現在のマスター暗号化パスワードと照合され、これらのマスター暗号化パスワードが一致することを確認します。検証が成功すると、新しいマスター暗号化パスワードをプレーンテキストとして入力するように求められます。パスワードを検証するために、キーを2回入力するように求められます。
その後、システムは新しいマスター暗号化パスワードを使用して機密データを再暗号化します。マスター暗号化パスワードの変更を再試行する前に、この再暗号化プロセスが完了するのを待つ必要があります。
暗号化されたマスター暗号化パスワードファイルが紛失または破損している場合、システムは機密データを復号化できません。システムは、機密データをクリアテキストで再インポートし、再暗号化することによってのみ回復できます。
AWSクラウドフォーメーションテンプレート
このトピックでは、AWS クラウドフォーメーションテンプレート (CFT) を提供します。このトピックで説明したように、それぞれの CloudFormation スタックを作成することで、AWS CLI またはウェブコンソールを使用してこれらのテンプレートをデプロイし、CloudFormation サービスを使用して DynamoDB テーブルと IAM ロールを作成できます。
-
CloudFormation スタックを作成するには、次のいずれかを実行します。
-
CLI を使用して CloudFormation スタックをデプロイする - 以下の YAML ファイルとサンプルコマンドを参照して、CloudFormation スタックを作成します。
-
Web コンソールを使用してデプロイします。
-
CloudFormation ->Create Stack-> に移動し、[デザイナーでテンプレートを作成] をクリックします。下部にテンプレートを選択するオプションと、右下にYAML形式を選択するオプションがあります。
-
添付のサンプル テンプレートを貼り付け、[ 保存 ] オプションをクリックして保存します。S3バケットにファイルを保存するように求められます。テンプレートを保存すると、S3 バケットの場所が指定されます。
-
S3バケットの場所をコピーし、 CloudFormation->スタック の作成->テンプレートの準備ができました->S3 URLに貼り付けます。プロンプトに従い、[ 次へ ] をクリックしてスタックを作成します。プロンプトに従って、YAML ファイルに指定されたスタック名を入力します。
メモ:AWS GUI を使用したテンプレートのデプロイまたは DynamoDb テーブルの作成で問題が発生した場合は、管理者に連絡して、アカウントにアクセス許可があることを確認してください。DynamoDB を作成するときは、「 命名規則とデータ型」のガイドラインを参照してください。
ウェブコンソールから CloudFormation スタックを作成するために以下の YAML ファイルを使用している場合は、S3 URL を指定した後、YAML ファイルに記載されているスタック名を入力し、[次へ] をクリックします。
たとえば、lAM ロール YAML ファイルでは、DynamoDB YAML ファイルによって作成された DynamoDB スタックの名前が参照されます。誤ったスタック名を指定すると、CloudFormation スタックの形成中にエラーが発生します。
Parameters: libpkcsllawsDDBStackName: Type: String Default: libpkcsl1aws-ddb
DynamoDB 用 AWS クラウドフォーメーションテンプレートの詳細については、「 DynamoDB 用クラウドフォーメーションテンプレート 」を参照してください。
lAM ロールを作成するための AWS クラウドフォーメーションテンプレートの詳細については、「 IAM ロールを作成するためのクラウドフォーメーションテンプレート 」を参照してください。
-
-
DynamoDB 用クラウドフォーメーションテンプレート
AWS CLI コマンドを実行 aws cloudformation create-stack --stack-name libpkcs11aws-ddb --template-body file:///$PWD/ddb_table.cfn.yaml
して、このテンプレートをデプロイします。
CLI 引数のスタック名とテンプレート本文ファイルは、YAML ファイルで定義されているとおりに指定する必要があります。
****************** Start *******************
AWSTemplateFormatVersion: '2010-09-09'
Description: "libpkcs11AWS DynamoDB Table Definition"
Parameters:
libpkcs11awsDDBTableName:
Type: String
Description: Name of DynamoDB Table
Default: libpkcs11aws
libpkcs11awsDDBGSIName:
Type: String
Description: Name of DynamoDB Handle GSI
Default: handle-index
Resources:
libpkcs11awsDDBTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: !Ref libpkcs11awsDDBTableName
ProvisionedThroughput:
ReadCapacityUnits: "5"
WriteCapacityUnits: "5"
AttributeDefinitions:
- AttributeName: "uuid"
AttributeType: "S"
- AttributeName: "handle"
AttributeType: "N"
KeySchema:
- AttributeName: "uuid"
KeyType: "HASH"
- AttributeName: "handle"
KeyType: "RANGE"
GlobalSecondaryIndexes:
- IndexName: !Ref libpkcs11awsDDBGSIName
ProvisionedThroughput:
ReadCapacityUnits: "5"
WriteCapacityUnits: "5"
KeySchema:
- AttributeName: "handle"
KeyType: "HASH"
Projection:
NonKeyAttributes: []
ProjectionType: "ALL"
Outputs:
libpkcs11awsDDBTableArn:
Value: !GetAtt libpkcs11awsDDBTable.Arn
Export:
Name: !Sub '${AWS::StackName}:libpkcs11awsDDBTableArn'
****************** End *******************
IAM ロールを作成するためのクラウド形成テンプレート
AWS CLI コマンドを実行 aws --profile saml cloudformation create-stack --stack-name libpkcs11aws-ddb --template-body file:///$PWD/ddb_table.cfn.yaml
して、このテンプレートをデプロイします。
CLI 引数のスタック名とテンプレート本文ファイルは、YAML ファイルで定義されているとおりに指定する必要があります。
****************** Start *******************
AWSTemplateFormatVersion: '2010-09-09'
Description: "libpkcs11AWS EC2 IAM Instance Role"
Parameters:
libpkcs11awsDDBStackName:
Type: String
Default: libpkcs11aws-ddb
Resources:
libpkcs11awsEC2Role:
Type: AWS::IAM::Role
Properties:
RoleName: libpkcs11awsEC2Role
Path: "/"
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/CloudWatchFullAccess"
- "arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess"
- "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- ec2.amazonaws.com
Action:
- sts:AssumeRole
Policies:
- PolicyName: "DynamoDBTableFullAccess"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Action:
- "dynamodb:*"
Resource:
- '*'
- PolicyName: "KMSFullAccess"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Action:
- "kms:*"
Resource:
- '*'
libpkcs11awsEC2RoleIP:
DependsOn: libpkcs11awsEC2Role
Type: AWS::IAM::InstanceProfile
Properties:
Path: "/"
Roles:
- libpkcs11awsEC2Role
InstanceProfileName: libpkcs11awsEC2Role
****************** End *******************