こんにちは。
技術課の山本です。
以前に、IAM Roles Anywhere について、2つブログを記載しています。
上のブログでは、認証局に AWS Certificate Manager を使用しました。
本記事では、EC2 上に、自身が管理する認証局を作成する方法をご紹介します。
EC2 は Amazon Linux 2023 を使用し、認証局は OpenSSL を使用して作成します。
構成図:
- EC2 の作成
- EC2 上に 認証局を作成
- オンプレミスのサーバーが、IAM Roles Anywhere のサービスを経由して引き受けるロールの準備
- EC2(認証局)上にあるルート証明書を IAM Roles Anywhere の 信頼アンカー(Trust Anchor)に登録
- オンプレミスのサーバー上に、秘密鍵と証明書署名要求(CSR)を作成
- EC2(認証局)上で、エンドエンティティ証明書を発行
- オンプレミスのサーバー上に、エンドエンティティ証明書を配置し、IAM Roles Anywhere を使用する
- まとめ
- 余談
- 余談2
EC2 の作成
OS は Amazon Linux 2023 、インスタンスタイプは、 t3.small で作成します。
OpenSSL のバージョンは、「OpenSSL 3.0.8 7 Feb 2023」となっていました。
EC2 上に 認証局を作成
認証局となるEC2上に、秘密鍵と証明書署名要求(CSR)を作成
認証局となるEC2上に、認証局で使用する秘密鍵と証明書署名要求(CSR)を作成します。
openssl req -out private_root.csr -new -newkey rsa:2048 -nodes -keyout private_root.pem -subj "/C=JP/ST=Yamanashi/L=Tsuru/O=Serverworks/OU=tech/CN=sample"
できました。
認証局となるEC2上に、X.509 V3 の拡張項目を定義するファイルを作成
IAM Roles Anywhere には以下の制約があり、X.509 V3 の拡張項目を定義する必要があります。
認証局となるEC2上に、X.509 V3 の拡張項目を定義するファイルを作成します。
vi private_root_v3_ca.txt
以下を貼り付けます。
basicConstraints = critical, CA:TRUE subjectKeyIdentifier = hash keyUsage = digitalSignature, keyCertSign, cRLSign
cat で確認してみます。
なお、現在のディレクトリには以下のファイルがあります。
private_root.csr #証明書署名要求(CSR) private_root_v3_ca.txt #X.509 V3 の拡張項目を定義するファイル private_root.pem #秘密鍵
認証局となるEC2上に、ルート証明書を作成
これまでに作成した3つのファイルを使って、認証局となるEC2上に、ルート証明書を作成します。
期限は 99999 日(274年弱) としました。
openssl x509 -req -days 99999 \ -in private_root.csr \ -extfile private_root_v3_ca.txt \ -signkey private_root.pem \ -out private_root.crt
ルート証明書ができました。
作成したルート証明書の情報を確認します。
openssl x509 -in private_root.crt -text -noout
後に使うため、cat したルート証明書の内容を控えてください。
cat private_root.crt
オンプレミスのサーバーが、IAM Roles Anywhere のサービスを経由して引き受けるロールの準備
オンプレミスのサーバーが、IAM Roles Anywhere のサービスを経由して引き受けるロールの準備をします。
AWS マネジメントコンソールで作成します。
以下のブログ記事内の見出しと同様の内容になります。お手数ですが、ご参照ください。
オンプレミスのサーバーが、IAM Roles Anywhere のサービスを経由して引き受けるロールの準備
EC2(認証局)上にあるルート証明書を IAM Roles Anywhere の 信頼アンカー(Trust Anchor)に登録
EC2(認証局)上にあるルート証明書を IAM Roles Anywhere の 信頼アンカー(Trust Anchor)に登録します。
AWS マネジメントコンソールで作成します。
下に記載する1点を除いて、以下のブログ記事内の見出しと同様の内容になります。お手数ですが、ご参照ください。
上のブログ記事内の見出しと異なる1点:
信頼アンカー(Trust Anchor)の作成時には、"External certificate bundle" を選択し、先の手順で cat したEC2(認証局)上にあるルート証明書の情報を入れてください。
オンプレミスのサーバー上に、秘密鍵と証明書署名要求(CSR)を作成
IAMロールを引き受けるオンプレミスのサーバー上に、エンドエンティティ証明書の発行に使用する秘密鍵と証明書署名要求(CSR)を作成します。※ ルート証明書と CN のみ Subject を変えています。(sample-2 にしています。)
openssl req -out server.csr -new -newkey rsa:2048 -nodes -keyout server.pem -subj "/C=JP/ST=Yamanashi/L=Tsuru/O=Serverworks/OU=tech/CN=sample-2"
できました。
後に使うため、cat した証明書署名要求(CSR)の内容を控えてください。
cat server.csr
EC2(認証局)上で、エンドエンティティ証明書を発行
EC2(認証局)上で、エンドエンティティ証明書用に、X.509 V3 の拡張項目を定義するファイルを作成
エンドエンティティ証明書用にも、X.509 V3 の拡張項目を定義する必要があります。
認証局となるEC2上に、X.509 V3 の拡張項目を定義するファイルを作成します。
vi server_v3_ca.txt
以下を貼り付けます。
basicConstraints = CA:FALSE authorityKeyIdentifier = keyid subjectKeyIdentifier = hash keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth
cat で確認してみます。
EC2(認証局)上で、エンドエンティティ証明書の発行
先の手順で オンプレミスのサーバー上に作成した証明書署名要求(CSR)の内容をファイルに保存します。
vi server.csr
カレントディレクトリには以下のファイルがあります。
private_root.crt private_root.csr private_root.pem private_root_v3_ca.txt server.csr server_v3_ca.txt
オンプレミスのサーバー上に作成した証明書署名要求(CSR)を使用し、エンドエンティティ証明書を発行します。※ 有効期限を指定していないため、デフォルト1ヶ月の有効期限になっています。「-days 99999」などと指定することも可能です。
# エンドエンティティ証明書の発行 openssl x509 -req \ -CAkey private_root.pem \ -CA private_root.crt \ -CAcreateserial \ -in server.csr \ -extfile server_v3_ca.txt \ -out server.crt
できました。
中身を確認してみます。
openssl x509 -in server.crt -text -noout
後に使うため、cat した証明書の内容を控えてください。
cat server.crt
オンプレミスのサーバー上に、エンドエンティティ証明書を配置し、IAM Roles Anywhere を使用する
上で作成したエンドエンティティ証明書を、オンプレミスのサーバー上に配置します。
vi server.crt
ヘルパーツール (aws_signing_helper)を使い、接続します。
ヘルパーツールの使用方法については、オンプレミスのサーバーにヘルパーツール (aws_signing_helper)を導入し、IAM Roles Anywhere を使用する を参照ください。
./aws_signing_helper credential-process \ --certificate ./server.crt \ --private-key ./server.pem \ --trust-anchor-arn $TA_ARN \ --profile-arn $PROFILE_ARN \ --role-arn $ExampleS3WriteRole_ARN
クレデンシャル(アクセスキー・シークレットアクセスキー・セッショントークン)を発行できました。
クレデンシャルを設定したところ、意図した IAM ロールを引き受けていました。
まとめ
自身が管理する認証局を使用する方式で、IAM Roles Anywhere を構築してみました。
OpenSSL などを使って自身で認証局を運用している環境であれば、こちらの方法でも、IAM Roles Anywhere を使用できます。
余談
ChatGPT に Amazon Linux 2 と Amazon Linux 2023 の相違点を聞いてみたところ、事実とは大幅に異なる答えが返ってきました。
「ネットリテラシー」ならぬ「チャットリテラシー」という言葉が生まれる日も来そうですね。
正しい情報を素早く入手して、正しく分かりやすく、相手に伝えることができる人でいようと思いました。
事実とは大幅に異なる答え:
余談2
心の癒しに山の写真を貼っておきますね。 2年ほど前に登った、金峰山です。
山本 哲也 (記事一覧)
カスタマーサクセス部のエンジニア。2024 Japan AWS Top Engineers に選んでもらいました。
今年の目標は Advanced Networking – Specialty と Machine Learning - Specialty を取得することです。
山を走るのが趣味です。今年の目標は 100 km と 100 mile を完走することです。 100 km は Gran Trail みなかみで完走しました。OSJ koumi 100 で 100 mile 砕け散りました。どこかで 100 mile やりたいです。
基本的にのんびりした性格です。座右の銘は「いつか着く」