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コンソールにサインインし、以下のページにアクセスします。
- 信頼アンカー名:任意 <検証では「IAM_Roles_Anywhere」を使用>
- 認証機関 (CA) ソース:外部証明書バンドル
- 外部証明書バンドル:「1,RootCA作成コマンド」で生成されたプライベート証明書
3,IAMロールの作成
オンプレミスサーバーで使用するIAMロールを作成します。
今までは、IAMユーザーに権限を設定し、アクセスキー・シークレットキーを発行していましたが、IAM Roles Anywhereでは、IAMロールに権限を設定し、IAM Roles Anywhereの機能で一時的なアクセスキー・シークレットキーを発行する動作となります。
IAMロール作成画面の「他の AWS のサービスのユースケース:」で「Roles Anywhere」を選択します。
それ以外の操作は通常のIAMロール作成と同じです。
4,プロファイルの作成
以下のURLにアクセスします。
- プロファイル名:任意<検証では「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を参考にして、環境にクレデンシャルヘルパーツールをダウンロードしてください。
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をインストールしてください。