- はじめに
- この手順で作られるもの
- 能書き
- 前提条件
- 作業環境
- 準備
- 証明書を作成する
- AWS IAMの設定
- aws_signing_helperでの設定
- AWS CLIから実行する
- (アドバンスド)特定のクライアント証明書のみ許可する
- IAMロールの信頼関係ポリシーのCondition句の変更
- 参考
はじめに
この手順で作られるもの
この手順を実行すルト、以下の構成図のものが作られます。
特に証明書周りは複雑で、手順を追うだけで自分が何を作っているかわからなくなりやすいので、この図を参考にそれぞれのコマンドで何を作っているのかを確認しながら進めると良いかと思います。

能書き
前提条件
この記事を実行するための、前提条件を以下に書いておきます。
準備
aws_signing_helperをインストール
IAM Roles Anywhereから一次認証情報を取得するためのツールとしてaws_signing_helperがAWSから提供されています。
aws_signing_helper の取得
以下のIAM Roles Anywhereのユーザーガイドのページからaws_signing_helperを取得することができます。以下のページに飛んでダウンロード一覧から実行環境のバイナリファイルをダウンロードします。
macOS(Appleチップ)の場合は、以下のファイルを取得します。
- Plartform:
Darwin - Architecture:
Aarch64
aws_signing_helper を実行可能にする
- ダウンロードしたファイルに実行権限を付与する
chmod +x aws_signing_helper
- 一旦実行確認する
./aws_signing_helper version
- フォルダを作成しそのフォルダにaws_signing_helperを移動する
mkdir ~/bin mv aws_signing_helper ~/bin
~/.zshrcに以下を追加して作成したフォルダをパスに追加する
# Add Path PATH="/Users/n/bin:${PATH}"
- ターミナルを一度閉じて、再度ターミナルを開く(追加したパスが反映させるため)
- 以下のコマンドで
aws_signing_helperが実行可能かを確認する
aws_signing_helper version
証明書を作成する
自己認証局(CA)の秘密鍵と証明書を作成する
まずは、自己認証局を作成します。具体的には自己認証局として以下の2つを作成します。

自己認証局(CA)の秘密鍵 作成
以下の部分の認証局の秘密鍵を最初に作成します。
生成する認証局の秘密鍵は 、2048bitのRSA鍵になります。

以下のコマンドで秘密鍵を生成します。
openssl genrsa -out self-signed-ca-private-key.pem 2048
自己認証局(CA)の証明書 作成
次に、自己証明局の証明書を作成します。以下の部分の証明書です。

(a) openssl設定の変更
証明書作成のためにopensslの設定を変更します。具体的には、以下の設定を追加します。
設定はMacOS全体に影響する大元のファイルを壊さないよう、作業ディレクトリにopensslの設定ファイルをコピーして追加します。
openssl.cnfをコピーする
cp /etc/ssl/openssl.cnf .
- コピーした
openssl.cnfに以下のセッションを追加する
[ v3_ca ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints = critical,CA:true keyUsage = cRLSign, keyCertSign [ v3_client ] basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = clientAuth
(b) 自己認証局(CA)の証明書作成
秘密鍵を利用し、自己認証局(CA)の証明書を作成します。
証明書の有効期間は1年としています。
また証明書に設定する認証局の識別情報は以下の設定にしています。
| 要素 | 説明 | CAの設定値 | 備考 |
|---|---|---|---|
| C (Country) | 国名コード | JP | |
| ST (State/Province) | 都道府県名 | Tokyo | |
| L (Locality) | 市区町村名 | Hoge-Ku | |
| O (Organization) | 組織名 | NoppyCA | |
| OU (Organizational Unit) | 組織の部署名 | なし | 現在は非推奨らしい*1 |
| CN (Common Name) | コモンネーム | なし |
上記設定の自己認証局(CA)の証明書を以下のコマンドで生成します。
openssl req -x509 -new -sha256 -days 365 -extensions v3_ca \ -config ./openssl.cnf \ -key self-signed-ca-private-key.pem \ -out self-signed-ca-cert.pem \ -subj "/C=JP/ST=Tokyo/L=Hoge-Ku/O=NoppyCA/"
作成した証明書は以下のコマンドで内容を確認することができます。
openssl x509 -in self-signed-ca-cert.pem -text -noout
確認すると以下のような内容が出力されます。Issuerの設定や、Validityの起源が設定通りか確認します。
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
df:f2:xx:xx:xx:xx:xx:xx
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=JP, ST=Tokyo, L=Hoge-Ku, O=NoppyCA
Validity
Not Before: Nov 16 10:52:37 2025 GMT
Not After : Nov 14 10:52:37 2035 GMT
Subject: C=JP, ST=Tokyo, L=Hoge-Ku, O=NoppyCA
Subject Public Key Info:
以下略
クライアント証明書発行のためのCSR(証明書署名要求)作成
次に、クライアント側でクライアント証明書の発行を認証局(CA)に依頼するための、証明書署名要求(CSR: Certificate Signing Request)を作成します。
したの図の赤枠の部分になります。

クライアントの秘密鍵作成
最初にクライアント用の2048bitのRSA秘密鍵を作成します。

以下のコマンドで秘密鍵を生成します。
openssl genrsa -out mac-client-private-key.pem 2048
CSR(証明書署名要求)の作成
作成したクライアント用の秘密鍵を利用して、CSRを作成します。

クライアントを特定するための識別情報は、以下の内容にしました。
| 要素 | 説明 | CAの設定値 | 備考 |
|---|---|---|---|
| C (Country) | 国名コード | JP | |
| ST (State/Province) | 都道府県名 | Tokyo | |
| L (Locality) | 市区町村名 | Hoge-Ku | |
| O (Organization) | 組織名 | NoppyOrg | |
| OU (Organizational Unit) | 組織の部署名 | なし | 現在は非推奨らしい |
| CN (Common Name) | コモンネーム | noppymacbookair | クライアント証明書を識別するために入力 |
上記設定のCSR作成のため、以下のコマンドを実行します。
openssl req -new \ -key mac-client-private-key.pem \ -out client-csr.pem \ -subj "/C=JP/ST=Tokyo/L=Hoge-Ku/O=NoppyOrg/CN=noppymacbookair"
以下のコマンドで作成したCSRを確認します。
openssl req -in client-csr.pem -text -noout
CSR(証明書署名要求)を元に自己認証局(CA)でクライアント証明書を発行
ユーザーから渡された(というテイで)CSRの申請内容を元に、認証局(CA)の秘密鍵と証明書を使ってクライアント証明書を発行します。

コマンドは以下になります。
クライアント証明書は、有効期限 1年で作っています。
openssl x509 -req -CAcreateserial -days 365 -extensions v3_client \ -extfile ./openssl.cnf \ -in client-csr.pem \ -CA self-signed-ca-cert.pem \ -CAkey self-signed-ca-private-key.pem \ -out mac-client-cert.pem
作成したクライアント証明書は以下のコマンドで確認します。
openssl x509 -in mac-client-cert.pem -text -noout
AWS IAMの設定
ここからはAWS側の設定になります。
手順は、(1)最初にIAM Roles Anywhereの信頼アンカーを設定し、(2)IAMロールを作成、(3)最後にプロファイルを作成、の順番になります。
また今回はマネージメントコンソールで手動作業する手順を記載します。これは、AWS CLIをアクセスキー/シークレットキーを利用して実行することが、セキュリティの観点から非推奨となっており、その代替えとしてRole Anywhereを利用するというシナリオを想定した場合、初期セットアップは手動操作にならざるを得ないという観点からの判断です。
IAM Roles Anywhere: 信頼アンカーの作成
最初に、IAM Roles Anywhereの信頼アンカーを設定して、自己認証局(CA)とIAM Roles Anywhereの間の信頼関係を築きます。
具体的には、自己認証局(CA)の証明書を登録した新しい信頼アンカーを作成します。

以下、マネージメントコンソールの操作画面で説明します。
- IAMロールの画面から、Roles Anywhereの管理画面に遷移する

信頼アンカーを作成するボタンからアンカー作成を行う

- 信頼アンカーの作成

- 信頼アンカーのARNを記録する
- 作成した信頼アンカーをクリックすると、信頼アンカーの詳細が表示される。
- その中の
ARNをメモ帳か何かに控えておく - 信頼アンカーのARNは、IAMロールの信頼関係の設定で利用する
ロールを作成する
IAM Roles Anywhareで実行するIAMロールを作成します。
IAMロールは以下の設定を行う前提です。
- IAMロール名:
noppy-mac-admin-role - 許可ポリシー:
AdministratorAccess

マネージメントコンソールのIAMロールの画面から操作を説明します。
ロールを作成を実行する

- 信頼されたエンティティの選択
- 信頼されたエンティティタイプ:
AWSのサービスを選択 - ユースケース:
Roles Anywhereを選択
- 信頼されたエンティティタイプ:
w500]- 許可を追加
AdministratorAccessポリシーを選択
- 名前、確認、および作成
- ロール名に、
noppy-mac-admin-roleを設定する。 ロールを作成でロールを作成する
- ロール名に、
- 作成したロールのARNをメモ帳などに控える
- ロール一覧から作成したロールをクリックし詳細に移動する
- ロール詳細画面の
ARN情報を控えておく
ロールの信頼関係に信頼アンカーのCondition句を追加する
特定の信頼アンカーの場合のみ許可するよう、作成したIAMロールの信頼関係にcondition句を追加します。
- ロール画面から今作成した
noppy-mac-admin-roleをクリックする 信頼関係のタブをおし、信頼ポリシーを編集で編集画面に移動する- 信頼ポリシーに以下のように、
Condition,ArnEquals,aws:SourceArn句を追加する
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rolesanywhere.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity", "sts:TagSession" ], "Condition": { "StringEquals": { "aws:PrincipalTag/x509Issuer/O": "NoppyCA" <== 自己認証局(CA)の証明書に設定した組織名 }, "ArnEquals": { "aws:SourceArn": "<作成した信頼アンカーのARN>" } } } ] }
Roles Anywhereのプロファイルを作成する
最後に、Roles Anywhareのプロファイルを作成します。
プロファイルでは、以下を設定します。
- プロファイル名:
noppy-noppy-mac-admin-profile - ロール:
noppy-mac-admin-role - Session duration:
1 hour※デフォルト設定

マネージメントコンソールのRoles Anywhereの画面から操作を説明します。
プロファイルを作成ボタンから作成を行う

- 以下を入力してプロファイルを作成する。
- プロファイル名:
noppy-noppy-mac-admin-profile - ロール:
noppy-mac-admin-role
- プロファイル名:

aws_signing_helperでの設定
aws_signing_helperでの動作確認
まずは、aws_signing_helperを単独で実行して一時認証情報が取得できるか確認します。

必要な情報は以下になります。
- クライアント証明書のファイルパス:
./mac-client-cert.pem - クライアントの秘密鍵のファイルパス:
./mac-client-private-key.pem - 信頼アンカーのARN
- プロファイルのARN
- IAMロールのARN
実行例は以下のとおりです。実行して画面に一時認証情報としてAccessKeyId、SecretAccessKey、SessionTokenが表示されれば認証は成功です。
aws_signing_helper credential-process \ --certificate ./mac-client-cert.pem \ --private-key ./mac-client-private-key.pem \ --trust-anchor-arn "<信頼アンカーのARN>" \ --profile-arn "<プロファイルのARN>" \ --role-arn "<IAMロールのARN>"
クライアントの秘密鍵と証明書をmacOSのキーチェーンに保管して安全に利用する
秘密鍵やクライアント証明書は、フォルダのなかに格納したままにせず、macOSのキーチェーンに保管するのがセキュリティ上望ましいです。
ここでは以下のユーザーガイドに記載されているmacOSキーチェーンと統合してaws_signing_helper を利用する手順を説明します。
クライアント証明書と秘密鍵をPFXファイル形式に変換する
キーチェーンに登録するには、クライアントの秘密鍵と証明書をPFX形式でパックする必要があります。
PFXファイルは、秘密鍵や証明書(公開鍵証明書、中間証明書など)をまとめて一つのパスワードで保護されたファイルに格納するための形式です。
このPFXファイルはopensslコマンドで以下のように作成することができます。
実行時にPFXファイルのパスワードを求められるので任意のパスワードを設定します。このパスワードはキーチェーンへのインポート時に利用します。
openssl pkcs12 -export \ -inkey ./mac-client-private-key.pem \ -in ./mac-client-cert.pem \ -out mac-client.pfx
カスタムキーチェーンを作成する
ユーザーガイドの説明にしたがってカスタムキーチェーンを作成します。
CREDENTIAL_HELPER_KEYCHAIN_PASSWORD="<ログインパスワード>" security create-keychain -p ${CREDENTIAL_HELPER_KEYCHAIN_PASSWORD} credential-helper.keychain security unlock-keychain -p ${CREDENTIAL_HELPER_KEYCHAIN_PASSWORD} credential-helper.keychain EXISTING_KEYCHAINS=$(security list-keychains | cut -d '"' -f2) security list-keychains -s credential-helper.keychain $(echo ${EXISTING_KEYCHAINS} | awk -v ORS=" " '{print $1}')
command + スペースで、キーチェーンで検索し、「キーチェーンアクセス」を開くと作成したcredential-helperが表示されているのが確認できると思います。

PFXファイルをインポートする
以下のコマンドで作成したPFXファイルから秘密鍵とクライアント証明書をキーチェーンにインポートします。
インポートすると「キーチェーンアクセス」に証明書と鍵が追加されたことが確認できると思います。
UNWRAPPING_PASSWORD="<PFXファイル作成時に指定したパスワード>" security import ./mac-client.pfx -T ~/bin/aws_signing_helper -P ${UNWRAPPING_PASSWORD} -k credential-helper.keychain
AWS CLIから実行する
AWS CLIからaws_signing_helperを利用しRoles Anywhereを利用した一時認証情報を利用できるようにする。
vi ~/.aws/config
- configの設定例(先ほど動作確認した aws_signing_helperのコマンドほぼそのまま記載)
[default]
credential_process = aws_signing_helper credential-process
--trust-anchor-arn <信頼アンカーのARN>
--profile-arn <プロファイルのARN>
--role-arn <ロールのARN>
region = ap-northeast-1
output = json
- 動作テスト
aws sts get-caller-identity
(アドバンスド)特定のクライアント証明書のみ許可する
現状の設定では、設定した信頼アンカーの認証局が発行したクライアント証明書は全て許可されてしまいます。
そこで、特定のクライアント証明書、正確にはクライアント証明書で設定されている識別情報を元に特定の識別情報の証明書のみ許可するようにします。
ユーザーガイドでは以下のページに説明が記載されています。
今回は、クライアント証明書のサブジェクトのCNの文字列が特定の文字列(noppymacbookair)の時のみ許可するようにします。
IAMロールの信頼関係ポリシーのCondition句の変更
IAMロール(noppy-mac-admin-role)の信頼関係設定のConditionのStringEqualsに、以下の要素を追加します。
"aws:PrincipalTag/x509Subject/CN": "noppymacbookair"
信頼関係ポリシー全体は以下の通りになります。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rolesanywhere.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity", "sts:TagSession" ], "Condition": { "StringEquals": { "aws:PrincipalTag/x509Issuer/O": "NoppyCA", "aws:PrincipalTag/x509Subject/CN": "noppymacbookair" <==追加した行 }, "ArnEquals": { "aws:SourceArn": "<作成した信頼アンカーのARN>" } } } ] }