This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.18.5. STS での手動モードの使用
STS での手動モードは、Amazon Web Services (AWS) については テクノロジープレビュー として利用できます。
AWS Secure Token Service (STS) のサポートはテクノロジープレビュー機能としてのみご利用いただけます。テクノロジープレビュー機能は Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。Red Hat は実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
このクレデンシャルストラテジーは、新しい OpenShift Container Platform クラスターでのみサポートされており、インストール中に設定する必要があります。この機能を使用するために、既存のクラスターが別のクレデンシャルストラテジーを使用するように再設定することはできません。
STS での手動モードでは、個別の OpenShift Container Platform クラスターコンポーネントは AWS Secure Token Service (STS) を使用して、短期的かつ権限が制限されたセキュリティー認証情報を提供する IAM ロールをコンポーネントに割り当てます。これらの認証情報は、AWS API 呼び出しを行う各コンポーネントに固有の IAM ロールに関連付けられます。
新規および更新された認証情報の要求の自動化は、適切に設定された AWS IAM OpenID Connect (OIDC) アイデンティティープロバイダーを AWS IAM ロールと組み合わせて使用して実行されます。OpenShift Container Platform は AWS IAM で信頼されるサービスアカウントトークンに署名し、Pod に展開し、認証に使用することができます。トークンは 1 時間後に更新されます。
図18.1 STS 認証フロー
STS で手動モードを使用すると、個別の OpenShift Container Platform コンポーネントに提供される AWS 認証情報の内容が変更されます。
有効期間の長い認証情報を使用した AWS シークレット形式
STS での AWS シークレット形式
18.5.1. STS での手動モードに設定された OpenShift Container Platform クラスターのインストール リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform バージョン 4.7 で STS での手動モードを使用して CCO を使用するように設定されたクラスターをインストールするには、以下を実行します。
18.5.1.1. AWS リソースの手動作成 リンクのコピーリンクがクリップボードにコピーされました!
STS を使用して手動モードで CCO を使用するように設定された OpenShift Container Platform クラスターをインストールするには、まず必要な AWS リソースを手動で作成する必要があります。
手順
ServiceAccountオブジェクトに署名するためにプライベートキーを生成します。openssl genrsa -out sa-signer 4096
$ openssl genrsa -out sa-signer 4096Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServiceAccountオブジェクトのパブリックキーを生成します。openssl rsa -in sa-signer -pubout -out sa-signer.pub
$ openssl rsa -in sa-signer -pubout -out sa-signer.pubCopy to Clipboard Copied! Toggle word wrap Toggle overflow S3 バケットを作成し、OIDC 設定を保持します。
aws s3api create-bucket --bucket <oidc_bucket_name> --region <aws_region> --create-bucket-configuration LocationConstraint=<aws_region>
$ aws s3api create-bucket --bucket <oidc_bucket_name> --region <aws_region> --create-bucket-configuration LocationConstraint=<aws_region>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記<aws_region>の値がus-east-1の場合は、LocationConstraintパラメーターを指定しません。S3 バケット URL を保持します。
OPENID_BUCKET_URL="https://<oidc_bucket_name>.s3.<aws_region>.amazonaws.com"
OPENID_BUCKET_URL="https://<oidc_bucket_name>.s3.<aws_region>.amazonaws.com"Copy to Clipboard Copied! Toggle word wrap Toggle overflow OIDC 設定をビルドします。
以下の情報が含まれる
keys.jsonという名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<public_signing_key_id>は、以下を実行してパブリックキーで生成されます。openssl rsa -in sa-signer.pub -pubin --outform DER | openssl dgst -binary -sha256 | openssl base64 | tr '/+' '_-' | tr -d '='
$ openssl rsa -in sa-signer.pub -pubin --outform DER | openssl dgst -binary -sha256 | openssl base64 | tr '/+' '_-' | tr -d '='Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、パブリックキーを DER 形式に変換し、バイナリー表現で SHA-256 チェックサムを実行し、データを base64 エンコーディングでエンコードしてから、base64 でエンコードされた出力を base64URL エンコーディングに変更します。
<public_signing_key_modulus>は、以下を実行してパブリックキーで生成されます。openssl rsa -pubin -in sa-signer.pub -modulus -noout | sed -e 's/Modulus=//' | xxd -r -p | base64 -w0 | tr '/+' '_-' | tr -d '='
$ openssl rsa -pubin -in sa-signer.pub -modulus -noout | sed -e 's/Modulus=//' | xxd -r -p | base64 -w0 | tr '/+' '_-' | tr -d '='Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、パブリックキーのモジュラスを出力します。モジュラスの 16 進数表現を抽出し、ASCII 16 進数をバイナリーに変換し、データを base64 エンコーディングでエンコードしてから、base64 でエンコードされた出力を base64URL エンコーディングに変更します。
<public_signing_key_exponent>は、以下を実行してパブリックキーで生成されます。printf "%016x" $(openssl rsa -pubin -in sa-signer.pub -noout -text | grep Exponent | awk '{ print $2 }') | awk '{ sub(/(00)+/, "", $1); print $1 }' | xxd -r -p | base64 -w0 | tr '/+' '_-' | tr -d '='$ printf "%016x" $(openssl rsa -pubin -in sa-signer.pub -noout -text | grep Exponent | awk '{ print $2 }') | awk '{ sub(/(00)+/, "", $1); print $1 }' | xxd -r -p | base64 -w0 | tr '/+' '_-' | tr -d '='Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、パブリックキー指数の 10 進数表現を抽出し、必要に応じてこれを
0が埋め込まれた状態で 16 進数で出力し、先頭の00ペアを削除し、ASCII 16 進をバイナリーに変換し、データを base64 エンコーディングでエンコードしてから、URL で使用できる文字のみを使用するように base64 でエンコードされた出力を変更します。
以下の情報が含まれる
openid-configurationという名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OIDC 設定をアップロードします。
aws s3api put-object --bucket <oidc_bucket_name> --key keys.json --body ./keys.json
$ aws s3api put-object --bucket <oidc_bucket_name> --key keys.json --body ./keys.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow aws s3api put-object --bucket <oidc_bucket_name> --key '.well-known/openid-configuration' --body ./openid-configuration
$ aws s3api put-object --bucket <oidc_bucket_name> --key '.well-known/openid-configuration' --body ./openid-configurationCopy to Clipboard Copied! Toggle word wrap Toggle overflow ここで、
<oidc_bucket_name>は、OIDC 設定を保持するために作成された S3 バケットです。AWS IAM OpenID Connect (OIDC) アイデンティティープロバイダーがこれらのファイルを読み取ることを許可します。
aws s3api put-object-acl --bucket <oidc_bucket_name> --key keys.json --acl public-read
$ aws s3api put-object-acl --bucket <oidc_bucket_name> --key keys.json --acl public-readCopy to Clipboard Copied! Toggle word wrap Toggle overflow aws s3api put-object-acl --bucket <oidc_bucket_name> --key '.well-known/openid-configuration' --acl public-read
$ aws s3api put-object-acl --bucket <oidc_bucket_name> --key '.well-known/openid-configuration' --acl public-readCopy to Clipboard Copied! Toggle word wrap Toggle overflow AWS IAM OIDC アイデンティティープロバイダーを作成します。
OIDC 設定をホストするサーバーから証明書チェーンを取得します。
echo | openssl s_client -servername $<oidc_bucket_name>.s3.$<aws_region>.amazonaws.com -connect $<oidc_bucket_name>.s3.$<aws_region>.amazonaws.com:443 -showcerts 2>/dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}'$ echo | openssl s_client -servername $<oidc_bucket_name>.s3.$<aws_region>.amazonaws.com -connect $<oidc_bucket_name>.s3.$<aws_region>.amazonaws.com:443 -showcerts 2>/dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow チェーンのルートで証明書のフィンガープリントを計算します。
export BUCKET_FINGERPRINT=$(openssl x509 -in cert<number>.pem -fingerprint -noout | sed -e 's/.*Fingerprint=//' -e 's/://g')
$ export BUCKET_FINGERPRINT=$(openssl x509 -in cert<number>.pem -fingerprint -noout | sed -e 's/.*Fingerprint=//' -e 's/://g')Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここで、
<number>は保存されたファイルの最も大きな数になります。たとえば、保存したファイル内で2が最大値であれば、cert2.pemを使用します。アイデンティティープロバイダーを作成します。
aws iam create-open-id-connect-provider --url $OPENID_BUCKET_URL --thumbprint-list $BUCKET_FINGERPRINT --client-id-list openshift sts.amazonaws.com
$ aws iam create-open-id-connect-provider --url $OPENID_BUCKET_URL --thumbprint-list $BUCKET_FINGERPRINT --client-id-list openshift sts.amazonaws.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
返される、新規作成されたアイデンティティープロバイダーの ARN を保持します。この ARN は後に
<aws_iam_openid_arn>として参照されます。
IAM ロールを生成します。
このリリースイメージ内で、デプロイするクラウドをターゲットとする
CredentialsRequestCR をすべて特定します。oc adm release extract quay.io/openshift-release-dev/ocp-release:4.<y>.<z>-x86_64 --credentials-requests --cloud=aws
$ oc adm release extract quay.io/openshift-release-dev/ocp-release:4.<y>.<z>-x86_64 --credentials-requests --cloud=awsCopy to Clipboard Copied! Toggle word wrap Toggle overflow ここで、
<y>および<z>は、インストールしている OpenShift Container Platform のバージョンに対応する番号になります。それぞれの
CredentialsRequestCR について、以前に作成した IAM アイデンティティープロバイダーを使用してWeb identityの IAM ロールを作成し、必要なパーミッションを付与し、以前に作成したアイデンティティープロバイダーを信頼する信頼関係を確立します。たとえば、
0000_30_machine-api-operator_00_credentials-request.yamlのCredentialsRequestCR の openshift-machine-api-operator は、以下のようにクラスター用に作成された OIDC プロバイダーからのアイデンティティーを許可する IAM ロールを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここで、
<aws_iam_openid_arn>は、返される、新規に作成されたアイデンティティープロバイダーの ARN です。特定のクラスターの
ServiceAccountオブジェクトのみがロールを持てるようにロールをさらに制限するには、.Role.AssumeRolePolicyDocument.Statement[].Conditionフィールドを各コンポーネントの特定のServiceAccountオブジェクトに更新して、各ロールの信頼関係を変更します。cluster-image-registry-operatorロールの信頼関係を、以下の条件を持つように変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow openshift-ingress-operatorの信頼関係を、以下の条件を持つように変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow openshift-cluster-csi-driversの信頼関係を、以下の条件を持つように変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow openshift-machine-apiの信頼関係を、以下の条件を持つように変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
各 IAM ロールについて、IAM ポリシーを対応する
CredentialsRequestオブジェクトからの必要なパーミッションを反映するロールに割り当てます。たとえば、
openshift-machine-apiの場合、以下のような IAM ポリシーを割り当てます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform インストーラーを実行する準備をします。
install-config.yamlファイルを作成します。./openshift-install create install-config
$ ./openshift-install create install-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 手動モードで CCO を使用してインストールするようにクラスターを設定します。
echo "credentialsMode: Manual" >> install-config.yaml
$ echo "credentialsMode: Manual" >> install-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow インストールマニフェストを作成します。
./openshift-install create manifests
$ ./openshift-install create manifestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow tlsディレクトリーを作成し、以前に生成されたプライベートキーをここにコピーします。注記ターゲットファイル名は
./tls/bound-service-account-signing-key.keyである必要があります。mkdir tls ; cp <path_to_service_account_signer> ./tls/bound-service-account-signing-key.key
$ mkdir tls ; cp <path_to_service_account_signer> ./tls/bound-service-account-signing-key.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow cluster-authentication-02-config.yamlというファイル名で、カスタムAuthenticationCR を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow リリースイメージから抽出される各
CredentialsRequestCR について、各CredentialsRequestに示されるターゲット namespace とターゲット名のあるシークレットを作成し、それぞれのコンポーネントについて以前に作成された AWS IAM ロール ARN の置き換えを行います。openshift-machine-apiのシークレットマニフェストの例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.5.1.2. インストーラーの実行 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform インストーラーを実行します。
./openshift-install create cluster
$ ./openshift-install create clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.5.1.3. インストールの検証 リンクのコピーリンクがクリップボードにコピーされました!
- OpenShift Container Platform クラスターに接続します。
クラスターに
root認証情報がないことを確認します。oc get secrets -n kube-system aws-creds
$ oc get secrets -n kube-system aws-credsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力は以下のようになります。
Error from server (NotFound): secrets "aws-creds" not found
Error from server (NotFound): secrets "aws-creds" not foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンポーネントが、CCO によって作成される認証情報を使用するのではなく、シークレットマニフェストで指定された IAM ロールを持つことを確認します。
Image Registry Operator を使用したコマンドの例
oc get secrets -n openshift-image-registry installer-cloud-credentials -o json | jq -r .data.credentials | base64 --decode
$ oc get secrets -n openshift-image-registry installer-cloud-credentials -o json | jq -r .data.credentials | base64 --decodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力には、コンポーネントによって使用されるロールおよび Web アイデンティティートークンが表示され、以下のように表示されるはずです。
Image Registry Operator を使用した出力例
[default] role_arn = arn:aws:iam::123456789:role/openshift-image-registry-installer-cloud-credentials web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token
[default] role_arn = arn:aws:iam::123456789:role/openshift-image-registry-installer-cloud-credentials web_identity_token_file = /var/run/secrets/openshift/serviceaccount/tokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow