【AWS】CloudHSMで鍵を安全に管理する 〜AWSへの申請編〜

2014.05.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは植木和樹です。AWSで提供されているサービスでも周囲で話題を聞かないマイナーなサービスCloudHSM(Hardware Security Module)。どうやら様々な秘密鍵を安全に管理するための仕組みらしいのですが、これまで業務で触れたこともなければ、分かりやすい日本語情報も見つからず、どこから手をつければ良いものやら。

そこで本日はCloudHSMの概略を知るためにAWSより公開されているスタートガイドを読んでみました。

何度も読み返すたびに英語を読むのはツラいので、メモがてら超意訳しましたのでここに掲載してみます。本日はCloudHSMを利用する際の申請に関する部分です。

CloudHSMとは(What Is CloudHSM?)

  • 安全な鍵ストレージと暗号通信を提供する
  • 堅牢なハードウェアアプライアンス
  • これまでは機密データやそれを暗号するための鍵はオンプレミスで管理していたが、AWS移行の阻害要因やアプリケーションのボトルネックになっていた
  • CloudHSMはデータ暗号化のための鍵を安全に生成、保管、管理できる
  • 鍵は本人以外アクセスすることはできないため安全
  • 利用にはVPCが必要
  • CloudHSMのインスタンスはアカウント専用であり、他のAWSアカウントとは完全に分離している
  • マルチリージョン、マルチAZで利用可能
  • 高可用性・高耐久性が求められるアプリケーションでも利用できる
  • AWSでは可用性を高める(HA)のため最低2つのHSMアプライアンスの利用を推奨している
  • シングルHSMの場合は最悪HSMに保存された鍵やデータを消失する場合がある(詳細はHA with Luna SA参照)

注意事項

  • CloudHSMはTokyo(ap-northeast-1)では提供されていない(2014年5月現在)
  • 米国東部(バージニア北部)、米国西部(オレゴン)、欧州(アイルランド)、およびアジアパシフィック(シドニー)のみ

準備(Before You Begin)

CloudHSMは利用者のVPC上に作成され、ENIを使って接続します。そのためAWSがHSMを構成することができるよう、IAM Roleを作成してAWSへ連絡する必要があります。

AWSアカウントの作成と、CloudHSMへのサインアップ(To create an AWS account and sign up for CloudHSM)

  1. AWSアカウントを作成します。
  2. サインアップします。
  3. AWS CloudHSMのページから"Contact Us"をクリックし、フォームを入力したら"Try the service"を選択して申請します。その後AWS CloudHSMチームから連絡があるので指示に従ってください。
  4. やりとりしている間に下記VPC作成などの準備を進めましょう。

VPCとセキュリティグループを作成する(To create a VPC and security group rules)

  1. VPCを us-east か eu-west リージョンに作成します。
  2. セキュリティグループを作成します。
  3. Inbound: WindowsならRDP(tcp/3389)、UnixならSSH(tcp/22)を、接続元IPアドレスを限定して許可します。
  4. Inbound: tcp/1792 を VPCサブネットレンジ(10.0.0.0/16)に対して許可します。
  5. Outbound: SSH(tcp/22)をVPCサブネットレンジ(10.0.0.0/16)に対して許可します。(HSM接続用)
  6. Outbound: tcp/1792を VPCサブネットレンジ(10.0.0.0/16)に対して許可します。

CloudHSMにサインアップする(To prepare to sign up for CloudHSM)

  1. AWSマネージメントコンソールを開きます。
  2. IAM - Roles で新しいRoleを作成します。
  3. Role名を "CloudHSMClassmethod" で作成します。
  4. Role Typeで"Roles for Cross-Account Access"を選び、"Provide access to a 3rd party AWS account"のSelectボタンをクリックします。
  5. ESTABLISH TRUSTページでAccount IDに ”536172709674” を入力し、External IDに ”Classmethod" と入力します。536172709674 はAWS CloudHSM サービスチームのアカウントIDで、HSMをVPCに接続するためのものです。
  6. SET PERMISSIONSページでCustom Policyを選択します。
  7. ポリシーネームに "CloudHSMClassmethod-20140518" を入力し、下記JSONを貼り付ける
    {
      "Statement": [
        {
          "Sid": "CloudHSMYourCompanyName",
          "Action": [
            "ec2:CreateNetworkInterface",
            "ec2:CreateTags",
            "ec2:DeleteNetworkInterface",
            "ec2:DescribeNetworkInterfaceAttribute",
            "ec2:DescribeNetworkInterfaces",
            "ec2:DescribeSubnets",
            "ec2:DescribeVpcs"
          ],
          "Effect": "Allow",
          "Resource": [
            "*"
          ]
        }
      ]
    }
  8. Rolesページに戻るので、作成したRoleのSummaryタブをクリックする。Role ARNをメモしておく。(あとでAWSへ情報として提供する)

AWS CloudHSMチームに提供する情報

  • 各リージョンに作成するCloudHSMの数
  • PGPの公開鍵。AWSからHSMのパスワードがメールで送られくるので暗号化してもらいたかったら伝える。
  • HSMを配置するサブネットのID(subnet-xxxxxxxx)
  • HSMのIPアドレス。上記サブネットで未使用なもの。1つで良い。
  • 作成したIAM RoleのARN

まとめ

どうやらCloudHSMは、鍵を管理するための専用のサーバーを、こちらで用意したVPC上にAWS側で用意してくれるようですね。あとはHSMと通信するためのセキュリティグループの設定や、CloudHSMが使用するIAM Roleを作成して申請すれば良いようです。

次回は申請が通った後に行う、HSMサーバーの初期設定手順になる予定です。

つづく(のか?)