IAM Roles Anywhereをopensslで作成したプライベートCAで試す

IAM Roles Anywhere で AWS IAM ロールを AWS 外部のワークロードに拡張する

IAM Roles Anywhereの動作検証しようと思い、AWSブログ記事を読むと「AWS Certificate Manager Private CA」を使った方法が記載されていました。

しかしながら「AWS Certificate Manager Private CA」を使うと月400ドルするみたいなので、今回の検証では「AWS Certificate Manager Private CA」ではなく、「opennssl」を使用してプライベートCAを作成し検証を進めました。

1,証明書の作成

opennsslでプライベートCAを作成する方法は先人の知恵を借りて作成します。ありがとうございます。

【AWS IAM】AWS IAM Roles Anywhereを、自己署名のプライベートCA局で試してみる
OpenSSLでプライベート認証局の構築(ルートCA、中間CA)
Cisco WLCで802.1X認証(EAP-TLS)をLocalEAPでやってみる

以下に記載したコマンドを実行して、プライベートCA・サーバ証明書・サーバ証明書の秘密鍵を作成します。

#プライベートCA作成準備########################################################
mkdir -p /opt/pki
mkdir /opt/pki/configs
mkdir /opt/pki/RootCA
mkdir /opt/pki/Server

cat <<'EOF' > /opt/pki/configs/openssl_sign.cnf
[ ca ]
default_ca      = CA_default

[ CA_default ]
dir             = ./
certs           = $dir/certs
database        = $dir/index.txt
new_certs_dir   = $dir/newcerts
serial          = $dir/serial
crlnumber       = $dir/crlnumber
crl             = $dir/crl.pem
RANDFILE        = $dir/.rand

name_opt        = ca_default
cert_opt        = ca_default

default_days    = 365
default_crl_days= 30
default_bits    = 2048
default_md      = sha256
preserve        = no
policy          = policy_match

[ policy_match ]
countryName             = match
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

[ v3_ca ]
basicConstraints = critical, CA:TRUE
subjectKeyIdentifier = hash
keyUsage = digitalSignature, keyCertSign, cRLSign

[ v3_server ]
basicConstraints = CA:FALSE
authorityKeyIdentifier = keyid
subjectKeyIdentifier = hash
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
EOF

#RootCA作成コマンド##########################################################
cd /opt/pki/RootCA
mkdir newcerts
echo "01" > serial
echo "00" > crlnumber
touch index.txt

openssl genrsa -out RootCA_key.pem -passout pass:rootcaprivkeypass 4096
openssl req  -new -out RootCA_csr.pem -key RootCA_key.pem -passin pass:rootcaprivkeypass -subj "/C=JP/ST=Tokyo/O=EXAMPLE/CN=EXAMPLE Root CA"
openssl ca -config ../configs/openssl_sign.cnf -out RootCA_crt.pem -in RootCA_csr.pem -selfsign -keyfile RootCA_key.pem -passin pass:rootcaprivkeypass -batch -extensions v3_ca
openssl x509 -in RootCA_crt.pem -out RootCA_crt.pem
openssl rsa -in RootCA_key.pem -out RootCA_key.pem  -passin pass:rootcaprivkeypass

echo "RootCA表示"
cat /opt/pki/RootCA/RootCA_crt.pem


#サーバ証明書作成コマンド#####################################################
Common_Name="IAM_Roles_Anywhere"

mkdir -p /opt/pki/Server/${Common_Name}
cd /opt/pki/Server/${Common_Name}
openssl req -new -out ${Common_Name}_csr.pem -newkey rsa:2048 -nodes -keyout ${Common_Name}_key.pem -subj "/C=JP/ST=Tokyo/O=EXAMPLE/CN=${Common_Name}"
cd /opt/pki/RootCA
openssl ca -config ../configs/openssl_sign.cnf -out ../Server/${Common_Name}/${Common_Name}_crt.pem -in ../Server/${Common_Name}/${Common_Name}_csr.pem -cert RootCA_crt.pem -keyfile RootCA_key.pem -batch -extensions v3_server
cd /opt/pki/Server/${Common_Name}
openssl x509 -in ${Common_Name}_crt.pem -out ${Common_Name}_crt.pem

echo "サーバ証明書表示"
cat /opt/pki/Server/${Common_Name}/${Common_Name}_crt.pem

echo "サーバ証明書秘密鍵表示"
cat /opt/pki/Server/${Common_Name}/${Common_Name}_key.pem

記載したコマンドを全てコピペして実行すると、IAM Roles Anywhereで必要なファイルが生成されます。

サーバ証明書・秘密鍵を複数作成する場合は、「サーバ証明書作成コマンド」の「Common_Name」部分を書き換え、以下のコマンドを実行します。

2,信頼アンカーの作成

AWSアカウントの管理者権限を持つIAMユーザーでWebコンソールにサインインし、以下のページにアクセスします。

https://ap-northeast-1.console.aws.amazon.com/rolesanywhere/home/trust-anchors/create?region=ap-northeast-1

  • 信頼アンカー名:任意 <検証では「IAM_Roles_Anywhere」を使用>
  • 認証機関 (CA) ソース:外部証明書バンドル
  • 外部証明書バンドル:「1,RootCA作成コマンド」で生成されたプライベート証明書

3,IAMロールの作成

オンプレミスサーバーで使用するIAMロールを作成します。

今までは、IAMユーザーに権限を設定し、アクセスキー・シークレットキーを発行していましたが、IAM Roles Anywhereでは、IAMロールに権限を設定し、IAM Roles Anywhereの機能で一時的なアクセスキー・シークレットキーを発行する動作となります。

IAMロール作成画面の「他の AWS のサービスのユースケース:」で「Roles Anywhere」を選択します。

それ以外の操作は通常のIAMロール作成と同じです。

4,プロファイルの作成

以下のURLにアクセスします。

https://ap-northeast-1.console.aws.amazon.com/rolesanywhere/home/profiles/create?region=ap-northeast-1

  • プロファイル名:任意<検証では「IAM_Roles_Anywhere」を使用>
  • ロール:「3,」で作成したロールを指定
  • セッションポリシー – オプション:今回は、デフォルト

5,オンプレミス環境での準備

5-1,AWSCLIのインストール

以下のURLを参考にして、環境にAWSCLIをインストールしてください。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

LinuxでAWSCLIを構成する際のコマンドを記載します。

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

5-2,クレデンシャルヘルパーツールのダウンロード

以下のURLを参考にして、環境にクレデンシャルヘルパーツールをダウンロードしてください。

https://docs.aws.amazon.com/ja_jp/rolesanywhere/latest/userguide/credential-helper.html#getting-credential-helper-tool

Linuxでクレデンシャルヘルパーツールを構成する際のコマンドを記載します。

mkdir ~/.aws
curl https://s3.amazonaws.com/roles-anywhere-credential-helper/CredentialHelper/latest/linux_amd64/aws_signing_helper --output ~/.aws/aws_signing_helper
chmod 744 ~/.aws/aws_signing_helper

5-3,各種設定ファイルの作成

クレデンシャルヘルパーツールの動作に必要となる以下ファイルをオンプレミスサーバで作成します。

  • サーバ証明書(「1,」で作成したサーバ証明書を使用)
  • サーバ証明書の秘密鍵(「1,」で作成したサーバ証明書の秘密鍵を使用)
  • AWSCLI設定ファイル

以下の手順では、Linuxで操作した場合のコマンドを記載します。

5-3-1,サーバ証明書の設定

cat <<'EOF' > /opt/aws/pki/certificate.pem
-----BEGIN CERTIFICATE-----
MIIElTCCAn2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADBJMQswCQYDVQQGEwJKUDEO
MAwGA1UECAwFVG9reW8xEDAOBgNVBAoMB0VYQU1QTEUxGDAWBgNVBAMMD0VYQU1Q
~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~
keO0aj8ZBrLPx8fmFwslHUTtcellCUid4IfmlJL156z5xgmasZTw/R2odJmkjGBi
ZY4x+r+85NHwb5eLCjZ/kfzrIcOW8P2u4Kz6KgNEjIbENlCALGqh7xL5qLQQfrOC
rNDaEatAWYrsKHuFaDwOxkbGW47z+rCmTw==
-----END CERTIFICATE-----
EOF

5-3-2,サーバ証明書の秘密鍵設定

cat <<'EOF' > /opt/aws/pki/private-key.pem
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCPCr7VSiIGxQYf
+xtzF4Ij1OXOL4A7xRz/Fqa0xh/3ggwz7dUl831AwkEw635Gs43tz/jgn4hijJtR
~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~
pt4bI5yc7ubKmMFguA9TOSLT6cUCck7Y91A6K6hptJdP+NTIteNupKwgq2yFgHIM
dz+thatfTeGWP5fRowPQSapUFio3o7TkTOIIGJi2Gd0PRq+ZJHgiUy+4UcSHJQqR
zocFryH6TknMt/l6l5eyNWc=
-----END PRIVATE KEY-----
EOF

5-3-3,AWSCLI設定ファイルの作成

cat <<'EOF' > ~/.aws/config
[default]
 credential_process = ./aws_signing_helper credential-process
    --certificate /opt/aws/pki/certificate.pem
    --private-key /opt/aws/pki/private-key.pem
    --trust-anchor-arn <TA_ARN> 
    --profile-arn <PROFILE_ARN>
    --role-arn <Role_ARN>
EOF

6,動作確認

「5,」の作業を実施後、以下のコマンドを実行して、認証情報が表示される事を確認します。

aws sts get-caller-identity
#以下の様な出力があれば設定成功です。
{
    "UserId": "AROAUXQUG4LMXHGQWJTFD:02",
    "Account": "xxxxxxxxxxxx",
    "Arn": "arn:aws:sts::xxxxxxxxxxxx:assumed-role/IAM_Roles_Anywhere/02"
}

AmazonLinux2を使用して検証する場合、AWSCLIのバージョンが古いため正常に「IAM Roles Anywhere」が機能しません。

「5-1,」で記載したリンク先を参照し、最新のAWSCLIをインストールしてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)