AS2 設定のセットアップ - AWS Transfer Family

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

AS2 設定のセットアップ

このチュートリアルでは、 で適用性ステートメント 2 (AS2) 設定を設定する方法について説明します AWS Transfer Family。ここで説明する手順を完了すると、AS2 対応サーバーが完成し、サンプルの取引相手からの AS2 メッセージを受け入れる準備が整います。また、サンプルの取引相手に AS2 メッセージを送信するために使用できるコネクタもあります。

注記

サンプルセットアップの一部では、 AWS Command Line Interface () を使用しますAWS CLI。をまだインストールしていない場合は AWS CLI、「 AWS Command Line Interface ユーザーガイド」の「 の最新バージョンのインストールまたは更新 AWS CLI」を参照してください。

  1. 自分用と取引相手用の証明書を作成します。使用できる既存の証明書がある場合は、このセクションをスキップできます。

    このプロセスは、「ステップ 1: AS2 の証明書を作成する」で説明されています。

  2. AS2 プロトコルを使用する AWS Transfer Family サーバーを作成します。オプションで、サーバーに Elastic IP アドレスを追加してインターネットに接続できるようにすることもできます。

    このプロセスは、「ステップ 2: AS2 プロトコルを使用する Transfer Family サーバーを作成する」で説明されています。

    注記

    Transfer Family サーバーは、インバウンド転送専用に作成する必要があります。アウトバウンド転送のみを行う場合は、Transfer Family サーバーは必要ありません。

  3. ステップ 1 で作成した証明書をインポートします。

    このプロセスは、「ステップ 3: 証明書を Transfer Family 証明書リソースとしてインポートする」で説明されています。

  4. 取引相手を設定するには、ローカルプロファイルとパートナープロファイルを作成します。

    このプロセスは、「ステップ 4: 自分と取引相手のプロフィールを作成する」で説明されています。

  5. 自分と取引相手との間で契約を作成してください。

    このプロセスは、「ステップ 5: 自分とパートナーとの間で契約を作成する」で説明されています。

    注記

    契約を作成する必要があるのはインバウンド転送の場合のみです。アウトバウンド転送のみを行う場合は、契約は必要ありません。

  6. 自分と取引相手との間でコネクタを作成してください。

    このプロセスは、「ステップ 6: 自分とパートナーとの間でコネクタを作成する」で説明されています。

    注記

    コネクタはアウトバウンド転送専用に作成する必要があります。インバウンド転送のみを行う場合は、コネクタは必要ありません。

  7. AS2 ファイル交換をテストします。

    このプロセスは、「ステップ 7: Transfer Family を使用して AS2 経由でのファイル交換をテストする」で説明されています。

このステップを完了したら、以下を実行できます。

  • Transfer Family start-file-transfer AWS Command Line Interface (AWS CLI) コマンドを使用して、リモート AS2-enabledパートナーサーバーにファイルを送信します。

  • 仮想プライベートクラウド (VPC) エンドポイントを介して、ポート 5080 にあるリモート AS2 対応パートナーサーバーからファイルを受信します。

ステップ 1: AS2 の証明書を作成する

AS2 交換の両当事者には X.509 証明書が必要です。これらの証明書は好きな方法で作成できます。このトピックでは、コマンドラインから OpenSSL を使用してルート証明書を作成し、下位証明書に署名する方法について説明します。両当事者はそれぞれ独自の証明書を生成する必要があります。

注記

AS2 証明書のキー長は 2048 ビット以上、最大で 4096 ビットでなければなりません。

パートナーとファイルを転送する場合は、次の点に注意してください。

  • 証明書はプロファイルに添付できます。証明書にはパブリックキーまたはプライベートキーが含まれます。

  • 取引相手がパブリックキーを送り、自分のパブリックキーを彼らに送ります。

  • 取引相手はパブリックキーでメッセージを暗号化し、プライベートキーで署名します。逆に、パートナーのパブリックキーでメッセージを暗号化し、自分のプライベートキーで署名します。

    注記

    キーを GUI で管理したい場合に使用できるオプションの 1 つは Portecle です。

証明書の例を生成するには
重要

パートナーにプライベートキーを送らないでください。この例では、一方の当事者用に自己署名パブリックキーとプライベートキーのセットを生成します。テスト目的で両方の取引相手として行動する場合は、これらの手順を繰り返して、取引相手ごとに 1 つずつ、合計 2 つのキーセットを生成できます。この場合、ルート認証機関 (CA) を 2 つ生成する必要はありません。

  1. 次のコマンドを実行して、2048 ビット長のモジュラスで RSA プライベートキーを生成します。

    /usr/bin/openssl genrsa -out root-ca-key.pem 2048
  2. 次のコマンドを実行して、root-ca-key.pem ファイルを使用して自己署名証明書を作成します。

    /usr/bin/openssl req \ -x509 -new -nodes -sha256 \ -days 1825 \ -subj "/C=US/ST=MA/L=Boston/O=TransferFamilyCustomer/OU=IT-dept/CN=ROOTCA" \ -key root-ca-key.pem \ -out root-ca.pem

    -subj 引数は、次の値で構成されます。

    名前 説明
    C 国コード 組織が所在する国を表す 2 文字のコード。
    ST 州、地域、または都道府県 あなたが所属する組織の所在地の州または県。(この場合、リージョンは AWS リージョンを参照しません。)
    L 市区町村 あなたが所属する組織の所在地の市区町村。
    O [Organization name] (組織名) LLC、Corp などのサフィックスを含む、組織の正式名称です。
    OU 部門名 この証明書を扱う組織内の部門。
    CN 共通名または完全修飾ドメイン名 (FQDN) このケースでは、ルート証明書を作成するので、値は ROOTCA です。これらの例では、CN を使用して証明書の目的を説明しています。
  3. ローカルプロファイル用の署名キーと暗号化キーを作成します。

    /usr/bin/openssl genrsa -out signing-key.pem 2048 /usr/bin/openssl genrsa -out encryption-key.pem 2048
    注記

    OpenAS2 など、一部の AS2 対応サーバーでは、署名と暗号化の両方に同じ証明書を使用する必要があります。この場合、両方の目的で同じプライベートキーと証明書をインポートできます。そのためには、前の 2 つのコマンドの代わりに次のコマンドを実行します。

    /usr/bin/openssl genrsa -out signing-and-encryption-key.pem 2048
  4. 次のコマンドを実行して、ルートキーに署名する証明書署名リクエスト (CSR) を作成します。

    /usr/bin/openssl req -new -key signing-key.pem -subj \ "/C=US/ST=MA/L=Boston/O=TransferFamilyCustomer/OU=IT-dept/CN=Signer" -out signing-key-csr.pem
    /usr/bin/openssl req -new -key encryption-key.pem -subj \ "/C=US/ST=MA/L=Boston/O=TransferFamilyCustomer/OU=IT-dept/CN=Encrypter" -out encryption-key-csr.pem
  5. 次に、signing-cert.conf ファイルと encryption-cert.conf ファイルを作成する必要があります。

    • テキストエディタを使用して、signing-cert.conf ファイルを作成し、次の内容を記述します。

      authorityKeyIdentifier=keyid,issuer keyUsage = digitalSignature, nonRepudiation
    • テキストエディタを使用して、encryption-cert.conf ファイルを作成し、次の内容を記述します。

      authorityKeyIdentifier=keyid,issuer keyUsage = dataEncipherment
  6. 最後に、以下のコマンドを実行して署名付き証明書を作成します。

    /usr/bin/openssl x509 -req -sha256 -CAcreateserial -days 1825 -in signing-key-csr.pem -out signing-cert.pem -CA \ root-ca.pem -CAkey root-ca-key.pem -extfile signing-cert.conf
    /usr/bin/openssl x509 -req -sha256 -CAcreateserial -days 1825 -in encryption-key-csr.pem -out encryption-cert.pem \ -CA root-ca.pem -CAkey root-ca-key.pem -extfile encryption-cert.conf

ステップ 2: AS2 プロトコルを使用する Transfer Family サーバーを作成する

この手順では、Transfer Family AWS CLIを使用して AS2 対応サーバーを作成する方法について説明します。

注記

サンプルステップの多くは、ファイルからパラメータを読み込むコマンドを使用しています。ファイルを使用してパラメータを読み込む方法について詳しくは、「ファイルからパラメータをロードする方法」を参照してください。

代わりにコンソールを使用する場合は、「Transfer Family コンソールを使用して AS2 サーバーを作成する」を参照してください。

SFTP または FTPS AWS Transfer Family サーバーの作成方法と同様に、 create-server AWS CLI コマンドの --protocols AS2パラメータを使用して AS2-enabledサーバーを作成します。現在、Transfer Family は VPC エンドポイントタイプと AS2 プロトコルの Amazon S3 ストレージのみをサポートしています。

create-server コマンドを使用して Transfer Family 用の AS2 対応サーバーを作成すると、VPC エンドポイントが自動的に作成されます。このエンドポイントは TCP ポート 5080 を公開し、AS2 メッセージを受け付けることができるようにします。

VPC エンドポイントをインターネット向けに公開する場合、Elastic IP アドレスを VPC エンドポイントに関連付けることができます。

この指示書を使用するには、次が必要です。

  • VPC の ID (例えば vpc-abcdef01)。

  • VPC サブネットの IDs (例: subnet-abcdef01subnet-subnet-abcdef01subnet-021345ab)。

  • 取引相手からの TCP ポート 5080 への着信トラフィックを許可するセキュリティグループの 1 つ以上の ID (例えば、sg-1234567890abcdef0sg-abcdef01234567890)。

  • (オプション) VPC エンドポイントに関連付けたい Elastic IP アドレス。

  • 取引相手が VPN 経由で VPC に接続されていない場合は、インターネットゲートウェイが必要です。詳細については、「Amazon VPC ユーザーガイド」の「インターネットゲートウェイを使用してインターネットに接続する」 を参照してください。

AS2 対応サーバーを作成するには
  1. 以下のコマンドを実行します。user input placeholder を、ユーザー自身の情報に置き換えます。

    aws transfer create-server --endpoint-type VPC \ --endpoint-details VpcId=vpc-abcdef01,SubnetIds=subnet-abcdef01,subnet-abcdef01,subnet- 021345ab,SecurityGroupIds=sg-abcdef01234567890,sg-1234567890abcdef0 --protocols AS2 \ --protocol-details As2Transports=HTTP
  2. (オプション) VPC エンドポイントをパブリックにすることができます。Elastic IP アドレスは、update-server オペレーションを通じてのみ Transfer Family サーバーにアタッチできます。以下のコマンドはサーバーを停止し、Elastic IP アドレスで更新してから再起動します。

    aws transfer stop-server --server-id your-server-id
    aws transfer update-server --server-id your-server-id --endpoint-details \ AddressAllocationIds=eipalloc-abcdef01234567890,eipalloc-1234567890abcdef0,eipalloc-abcd012345ccccccc
    aws transfer start-server --server-id your-server-id

    start-server コマンドは、サーバーのパブリック IP アドレスを含む DNS レコードを自動的に作成します。取引相手にサーバーへのアクセスを許可するには、次の情報を提供します。この場合、your-region は AWS リージョンのことを指します。

    s-your-server-id.server.transfer.your-region.amazonaws.com

    取引相手に提供する完全な URL は次のとおりです。

    http://s-your-server-id.server.transfer.your-region.amazonaws.com:5080

  3. AS2 対応サーバーにアクセスできるかどうかをテストするには、以下のコマンドを使用します。VPC エンドポイントのプライベート DNS アドレスまたはパブリックエンドポイント (エンドポイントに Elastic IP アドレスを関連付けている場合) からサーバーにアクセスできることを確認します。

    サーバーが正しく設定されていれば、接続は成功します。ただし、有効な AS2 メッセージを送信していないため、HTTP ステータスコード 400 (Bad Request) のレスポンスが返されます。

    • パブリックエンドポイント (前のステップで Elastic IP アドレスを関連付けた場合) では、サーバー ID とリージョンを代入して以下のコマンドを実行します。

      curl -vv -X POST http://s-your-server-id.transfer.your-region.amazonaws.com:5080
    • VPC 内で接続している場合は、次のコマンドを実行して VPC エンドポイントのプライベート DNS 名を検索します。

      aws transfer describe-server --server-id s-your-server-id

      describe-server コマンドは、VPC エンドポイント ID を VpcEndpointId パラメータに返します。次のコマンドを実行するには、この値を使用します。

      aws ec2 describe-vpc-endpoints --vpc-endpoint-ids vpce-your-vpc-endpoint-id

      describe-vpc-endpoints コマンドは、複数の DnsName パラメータを含む DNSEntries 配列を返します。以下のコマンドでは、リージョン DNS 名 (アベイラビリティーゾーンを含まないもの) を使用します。

      curl -vv -X POST http://vpce-your-vpce.vpce-svc-your-vpce-svc.your-region.vpce.amazonaws.com:5080

      例えば、次のコマンドでは、前のコマンドのプレースホルダーのサンプル値が表示されます。

      curl -vv -X POST http://vpce-0123456789abcdefg-fghij123.vpce-svc-11111aaaa2222bbbb.us-east-1.vpce.amazonaws.com:5080
  4. (オプション) ロギングロールを設定します。Transfer Family は、送受信されたメッセージのステータスを構造化された JSON 形式で Amazon CloudWatch ログに記録します。Transfer Family にアカウントの CloudWatch ログへのアクセスを提供するには、サーバーでログ記録ロールを設定する必要があります。

    を信頼する AWS Identity and Access Management (IAM) ロールを作成しtransfer.amazonaws.comAWSTransferLoggingAccessマネージドポリシーをアタッチします。詳細については、「IAM ポリシーとロールを作成する」を参照してください。先ほど作成した IAM ロールの Amazon リソースネーム (ARN) を書き留め、次の update-server コマンドを実行して、サーバーに関連付けます。

    aws transfer update-server --server-id your-server-id --logging-role arn:aws:iam::your-account-id:role/logging-role-name
    注記

    ログ記録ロールはオプションですが、メッセージのステータスを確認したり、設定上の問題をトラブルシューティングしたりできるように設定することを強くお勧めします。

ステップ 3: 証明書を Transfer Family 証明書リソースとしてインポートする

この手順では、 AWS CLIを使用して証明書をインポートする方法について説明します。代わりに Transfer Family コンソールを使用する場合は、AS2 証明書のインポート を参照してください。

ステップ 1 で作成した署名用証明書と暗号化証明書をインポートするには、次の import-certificate コマンドを実行します。暗号化と署名に同じ証明書を使用している場合は、同じ証明書を 2 回インポートします (1 回目は SIGNING 用、もう 1 回は ENCRYPTION 用)。

aws transfer import-certificate --usage SIGNING --certificate file://signing-cert.pem \ --private-key file://signing-key.pem --certificate-chain file://root-ca.pem

このコマンドは署名の CertificateId を返します。次のセクションでは、この証明書 ID を my-signing-cert-id と呼びます。

aws transfer import-certificate --usage ENCRYPTION --certificate file://encryption-cert.pem \ --private-key file://encryption-key.pem --certificate-chain file://root-ca.pem

このコマンドは暗号化 CertificateId を返します。次のセクションでは、この証明書 ID を my-encrypt-cert-id と呼びます。

次に、次のコマンドを実行して、パートナーの暗号化証明書と署名用証明書をインポートします。

aws transfer import-certificate --usage ENCRYPTION --certificate file://partner-encryption-cert.pem \ --certificate-chain file://partner-root-ca.pem

このコマンドはパートナーの暗号化 CertificateId を返します。次のセクションでは、この証明書 ID を partner-encrypt-cert-id と呼びます。

aws transfer import-certificate --usage SIGNING --certificate file://partner-signing-cert.pem \ --certificate-chain file://partner-root-ca.pem

このコマンドはパートナーの署名 CertificateId を返します。次のセクションでは、この証明書 ID を partner-signing-cert-id と呼びます。

ステップ 4: 自分と取引相手のプロフィールを作成する

この手順では、 を使用して AS2 プロファイルを作成する方法について説明します AWS CLI。代わりに Transfer Family コンソールを使用する場合は、AS2 プロファイルの作成 を参照してください。

次のコマンドを実行してローカル AS2 プロファイルを作成します。このコマンドは、パブリックキーとプライベートキーを含む証明書を参照します。

aws transfer create-profile --as2-id MYCORP --profile-type LOCAL --certificate-ids \ my-signing-cert-id my-encrypt-cert-id

このコマンドはプロファイル ID を返します。次のセクションでは、この ID を my-profile-id と呼びます。

次のコマンドを実行して、パートナープロファイルを作成します。このコマンドは、パートナーのパブリックキー証明書のみを使用します。このコマンドを使用するには、user input placeholders を自身の情報 (パートナーの AS2 名や証明書 ID など) に置き換えます。

aws transfer create-profile --as2-id PARTNER-COMPANY --profile-type PARTNER --certificate-ids \ partner-signing-cert-id partner-encrypt-cert-id

このコマンドはパートナーのプロファイル ID を返します。次のセクションでは、この ID を partner-profile-id と呼びます。

注記

前のコマンドでは、MYCORP を自分の組織の名前に置き換え、PARTNER-COMPANY を取引相手の組織の名前に置き換えます。

ステップ 5: 自分とパートナーとの間で契約を作成する

ここでは、 AWS CLIを使用して AS2 契約を作成する方法を説明します。代わりに Transfer Family コンソールを使用する場合は、AS2 契約の作成 を参照してください。

契約には、2 つのプロファイル (ローカルとパートナー)、それらの証明書、および両者間のインバウンド AS2 転送を可能にするサーバー設定がまとめられています。次のコマンドを実行すると、項目を一覧表示できます。

aws transfer list-profiles --profile-type LOCAL aws transfer list-profiles --profile-type PARTNER aws transfer list-servers

このステップには、バケットへの、およびバケットからの読み取り/書き込みアクセス権限を持つ Amazon S3 バケットと IAM ロールが必要です。このロールを作成する手順は、Transfer Family の SFTP、FTP、FTPS プロトコルの場合と同じで、IAM ポリシーとロールを作成する に記載されています。

契約を作成するには、次のアイテムが必要です。

  • Amazon S3 バケット名 (指定されている場合はオブジェクトプレフィックスも)

  • バケットへのアクセス権を持つ IAM ロールの ARN

  • Transfer Family サーバー ID

  • プロファイル ID とパートナーのプロファイル ID

次のコマンドを実行して契約を作成します。

aws transfer create-agreement --description "ExampleAgreementName" --server-id your-server-id \ --local-profile-id your-profile-id --partner-profile-id your-partner-profile-id --base-directory /DOC-EXAMPLE-DESTINATION-BUCKET/AS2-inbox \ --access-role arn:aws:iam::111111111111:role/TransferAS2AccessRole

成功した場合、このコマンドは契約の ID を返します。その後、次のコマンドを使用して契約の詳細を表示できます。

aws transfer describe-agreement --agreement-id agreement-id --server-id your-server-id

ステップ 6: 自分とパートナーとの間でコネクタを作成する

ここでは、 AWS CLIを使用して AS2 コネクタを作成する方法を説明します。代わりに Transfer Family コンソールを使用する場合は、AS2 コネクタを設定する を参照してください。

StartFileTransfer API オペレーションを使用して、Amazon S3 に保存されているファイルをコネクタを使用して取引相手の AS2 エンドポイントに送信できます。次のコマンドを実行すると、先ほど作成したプロファイルを見つけることができます。

aws transfer list-profiles

コネクタを作成するときは、パートナーの AS2 サーバー URL を指定する必要があります。次の テキストを testAS2Config.json という名前のファイルにコピーします。

{ "Compression": "ZLIB", "EncryptionAlgorithm": "AES256_CBC", "LocalProfileId": "your-profile-id", "MdnResponse": "SYNC", "MdnSigningAlgorithm": "DEFAULT", "MessageSubject": "Your Message Subject", "PartnerProfileId": "partner-profile-id", "SigningAlgorithm": "SHA256" }
注記

ではEncryptionAlgorithm、アルゴリズムは弱い暗号化DES_EDE3_CBCアルゴリズムであるため、それを必要とするレガシークライアントをサポートする必要がある場合を除き、アルゴリズムを指定しないでください。

その後、次のコマンドを実行してコネクタを作成します。

aws transfer create-connector --url "http://partner-as2-server-url" \ --access-role your-IAM-role-for-bucket-access \ --logging-role arn:aws:iam::your-account-id:role/service-role/AWSTransferLoggingAccess \ --as2-config file:///path/to/testAS2Config.json

ステップ 7: Transfer Family を使用して AS2 経由でのファイル交換をテストする

取引相手からファイルを受け取ります

パブリック Elastic IP アドレスを VPC エンドポイントに関連付けた場合、Transfer Family はパブリック IP アドレスを含む DNS 名を自動的に作成します。サブドメインは AWS Transfer Family 、サーバー ID (形式 ) ですs-1234567890abcdef0。以下の形式で、取引相手にサーバー URL を提供します。

http://s-1234567890abcdef0.server.transfer.us-east-1.amazonaws.com:5080

パブリック Elastic IP アドレスを VPC エンドポイントに関連付けていない場合は、ポート 5080 で取引相手からの HTTP POST 経由で AS2 メッセージを受け付ける VPC エンドポイントのホスト名を検索します。VPC エンドポイントの詳細情報を取得するには、次のコマンドを使用します。

aws transfer describe-server --server-id s-1234567890abcdef0

例えば、前のコマンドが VPC エンドポイント ID を vpce-1234abcd5678efghi と返すとします。次に、次のコマンドを使用して DNS 名を取得します。

aws ec2 describe-vpc-endpoints --vpc-endpoint-ids vpce-1234abcd5678efghi

このコマンドは、次のコマンドを実行するために必要な VPC エンドポイントのすべての詳細を返します。

DNS 名は DnsEntries 配列に一覧表示されます。VPC エンドポイントにアクセスするには、取引相手が VPC 内にいる必要があります (例えば、 AWS PrivateLink または VPN 経由)。以下の形式で、パートナーに VPC エンドポイント URL を提供します。

http://vpce-your-vpce-id.vpce-svc-your-vpce-svc-id.your-region.vpce.amazonaws.com:5080

例えば、次の URL では、前のコマンドのプレースホルダーのサンプル値が表示されます。

http://vpce-0123456789abcdefg-fghij123.vpce-svc-11111aaaa2222bbbb.us-east-1.vpce.amazonaws.com:5080

この例では、成功した転送は、ステップ 5: 自分とパートナーとの間で契約を作成する で指定した base-directory パラメータで指定された場所に保存されます。myfile1.txt および myfile2.txt という名前のファイルを正常に受信すると、ファイルは /path-defined-in-the-agreement/processed/original_filename.messageId.original_extension として保存されます。ここでは、ファイルは /DOC-EXAMPLE-DESTINATION-BUCKET/AS2-inbox/processed/myfile1.messageId.txt/DOC-EXAMPLE-DESTINATION-BUCKET/AS2-inbox/processed/myfile2.messageId.txt として保存されます。

Transfer Family サーバーの作成時にログ記録ロールを設定した場合は、 CloudWatch ログで AS2 メッセージのステータスを確認することもできます。

取引相手にファイルを送信します

Transfer Family を使用して AS2 メッセージを送信するには、次の start-file-transfer AWS Command Line Interface (AWS CLI) コマンドに示すように、コネクタ ID とファイルへのパスを参照します。

aws transfer start-file-transfer --connector-id c-1234567890abcdef0 \ --send-file-paths "/DOC-EXAMPLE-SOURCE-BUCKET/myfile1.txt" "/DOC-EXAMPLE-SOURCE-BUCKET/myfile2.txt"

コネクタの詳細情報を取得するには、次のコマンドを実行しする:

aws transfer list-connectors

list-connectors コマンドは、コネクタのコネクタ ID、URL、Amazon リソースネーム (ARN) を返します。

特定のコネクタのプロパティを返すには、使用する ID を指定して以下のコマンドを実行します。

aws transfer describe-connector --connector-id your-connector-id

describe-connector コマンドは、URL、ロール、プロファイル、メッセージ処理通知 (MDN)、タグ、モニタリングメトリックなど、コネクタのすべてのプロパティを返します。

JSON と MDN ファイルを表示すると、パートナーがファイルを正常に受信したことを確認できます。これらのファイルには、ファイル名と場所 で説明されている規則に従って名前が付けられます。コネクタの作成時にログ記録ロールを設定した場合は、 CloudWatch ログで AS2 メッセージのステータスを確認することもできます。