IAM信頼済みプロファイルによるリソースの認可

仮想プライベートクラウド クラシック・インフラストラクチャー Satellite

信頼されたプロファイルを使用して、リソースへのアクセスまたはリソースのアクセスを設定する方法について説明します。

ibmcloud oc cluster master refresh コマンドを実行して、IAM トラステッド・プロファイルを有効にすることができます。

IAM で
最初に、IAM トラステッド・プロファイルを作成します。 次に、クラスターと突き合わせる条件 (クラスターの Kubernetes 名前空間やサービス・アカウントなど) を選択して、そのトラステッド・プロファイルを Red Hat OpenShift on IBM Cloud のコンピュート・リソースにリンクします。 最後に、アプリで使用する IBM Cloud サービスに対するアクセス・ポリシーを割り当てます。
クラスターで
Kubernetes サービスアカウントトークン使用量の予測 を利用することで、リンクされたクラスターの Kubernetes 名前空間 で実行され、そのネームスペースのアカウントを使用するアプリは、 アカウント公開鍵を交換して、 IBM Cloud のIAMアクセストークンを取得することができます。 アプリは、このアクセス・トークンを使用して、データベース、IBM Cloud、VPC インフラストラクチャーなど、Watson サービスへの API 要求を認証できます。 トラステッド・プロファイルのアクセス・ポリシーを介して、トークンによりアプリが実行できるアクションを制御します。

IAM トラステッドプロファイルの作成

アカウントに信頼済みプロファイルを作成するには、IAMドキュメントの 信頼済みプロファイルの作成を 参照してください。 信頼済みプロファイルを作成するには、アカウント所有者でなければならないことに注意してください。 さらに、以下のアクセス・ロールが必要である。

クラスタのデフォルトの信頼済みプロファイルを設定する

単一のクラスタに信頼済みプロファイルを設定するには、 ibmcloud oc experimental trusted-profile set コマンドを 実行します。

リソース・グループ内のすべてのクラスタに同じ信頼済みプロファイルを使用させたい場合は、 ibmcloud oc experimental trusted-profile default set コマンドを 実行します。

信頼できるプロフィールの詳細を確認する

同じリソース・グループ内のクラスタのデフォルトの信頼済みプロファイルを取得するには、 ibmcloud oc experimental trusted-profile default get コマンドを 実行します。

IBM Cloud サービスで認証するためのアプリケーション・ポッドの構成

Red Hat® OpenShift® on IBM Cloud® クラスター内で実行されるアプリケーションポッドに対し、 IBM Cloud (IAM) Identity and Access Management の「信頼済みプロファイル」を使用して、 IBM Cloud のサービスへのアクセス権を付与します。 開発者は、セットアップされた IAM トラステッド・プロファイルにリンクされているクラスター内の IBM Cloud サービスで認証を行うようにアプリケーション・ポッドを構成できます。

これらの手順を実行するには、管理者アクセス・ロールを持つ必要はありません。 ただし、以下の要件を満たす必要があります: ビューアー プラットフォーム アクセス ロール;IAM IBM Cloud におけるクラスターのライター サービス アクセス ロール; IAM 識別子サービス に対する Kubernetes Service および iam-identity.profile.linkToResource アクション iam-identity.profile.create

始める前に

IBM Cloud サービスで認証を行うようにアプリケーション・ポッドを構成するには、以下のようにします。

  1. サービスアカウントトークン使用量の予測 を使用するように、ポッドの設定ファイルを設計してください。

    1. containers セクションの volumeMounts セクションで、ID トークンをマウントします。
        ...
            volumeMounts:
            - mountPath: /var/run/secrets/tokens
              name: sa-token
        ```
    1. `volumes` セクションで、サービス・アカウント・トークン・ボリューム予測をセットアップします。
    
        `expirationSeconds` フィールドを変更して、トークンの有効期間を制御します。 IAM トークンを取得するには、サービス・アカウント・トークンの有効期限が 1 時間以下でなければなりません。
        {: tip}
    
        ```yaml {: codeblock}
        ...
        volumes:
          - name: sa-token
            projected:
              sources:
              - serviceAccountToken:
                  path: sa-token
                  expirationSeconds: 3600
                  audience: iam
        ...
        ```
    
  2. サービス・アカウント予測トークンを、IBM Cloud サービスへの後続の API 呼び出しに使用可能な IAM トークンと交換するようにアプリを設計します。 以下の認証要求の例を確認してください。 「 ${profile_id} 」を、クラスターがリンクされている信頼済みプロファイルのIDに置き換えてください。 利用可能なプロファイル ID を一覧表示するには、 アカウント ibmcloud iam tps コマンドや GET 'https://iam.cloud.ibm.com/v1/profiles/?account_id=<account_id>'`` を使用するか、 IAM コンソールで信頼済みプロファイルを表示することができます。

    curl -s -X POST \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -H "Accept: application/json" \
        -d grant_type=urn:ibm:params:oauth:grant-type:cr-token \
        -d cr_token=$(cat /var/run/secrets/tokens/sa-token) \
        -d profile_id=${profile_id} \
        https://iam.cloud.ibm.com/identity/token
    
  3. アプリをデプロイする前に、以下の Kubernetes ジョブの例を試して、トークン交換をテストします。 以下の Kubernetes ジョブでは、 curl ポッドが IBM Cloud IAM に対して API 要求を行い、クラスターの公開鍵が IAM アクセス・トークンと交換されたことを確認します。 アプリにより、トラステッド・プロファイルで許可されている他の IBM Cloud サービスが呼び出される場合もあります。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: token-exchange-job
      namespace: default
    spec:
      template:
        spec:
          containers:
          - name: curl
            image: curlimages/curl:7.77.0
            command: ["/bin/sh"]
            args: ["-c", "curl -s -H \"Content-Type: application/x-www-form-urlencoded\" -H \"Accept: application/json\" -d grant_type=urn:ibm:params:oauth:grant-type:cr-token -d cr_token=$(cat /var/run/secrets/tokens/sa-token) -d profile_id=<profile_id> https://iam.cloud.ibm.com/identity/token"]
            volumeMounts:
            - mountPath: /var/run/secrets/tokens
              name: sa-token
          restartPolicy: Never
          serviceAccountName: default
          volumes:
          - name: sa-token
            projected:
              sources:
              - serviceAccountToken:
                  path: sa-token
                  expirationSeconds: 3600
                  audience: iam
    
  4. ジョブをデプロイします。

    kubectl apply -f exchange-job.yaml
    
  5. ジョブの詳細を調べて、成功したことを確認します。

    oc describe job token-exchange-job
    
  6. job completed および succeeded メッセージの出力を調べて、ジョブが成功したことを確認します。

  7. ジョブが成功した場合は、フランクフルトの Activity Tracker グローバル・イベントを確認して、トラステッド・プロファイル要求の詳細を含むログ行を検証します。 ジョブが失敗した場合は、構成を確認して再試行してください。