Skip to main content
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

IAMロールとAWSシークレットを作成する

明示的な AWS 認証情報を提供する代わりに、 AWS IAM ロールとして認証することで、 Kubernetes ポッドが AWS リソースにアクセスするように設定できます。

メモ AWS IAM ロールを使用して認証するには、EKS を使用して Kubernetes クラスタを導入する必要があります。

AWS Secrets Manager シークレットを作成する

Trident はストレージを管理するために FSx vserver に対して API を発行するため、そのためには資格情報が必要になります。これらの認証情報を渡す安全な方法は、AWS Secrets Manager シークレットを使用することです。したがって、まだお持ちでない場合は、vsadmin アカウントの認証情報を含む AWS Secrets Manager シークレットを作成する必要があります。

この例では、Trident CSIの資格情報を保存するためのAWS Secrets Managerシークレットを作成します:

aws secretsmanager create-secret --name trident-secret --description "Trident CSI credentials"\
  --secret-string "{\"username\":\"vsadmin\",\"password\":\"<svmpassword>\"}"

IAM ポリシーを作成する

Tridentを正しく実行するには、AWS権限も必要です。したがって、Tridentに必要な権限を付与するポリシーを作成する必要があります。

次の例では、AWS CLI を使用して IAM ポリシーを作成します:

aws iam create-policy --policy-name AmazonFSxNCSIDriverPolicy --policy-document file://policy.json
  --description "This policy grants access to Trident CSI to FSxN and Secrets manager"

ポリシー JSON の例

{
  "Statement": [
    {
      "Action": [
        "fsx:DescribeFileSystems",
        "fsx:DescribeVolumes",
        "fsx:CreateVolume",
        "fsx:RestoreVolumeFromSnapshot",
        "fsx:DescribeStorageVirtualMachines",
        "fsx:UntagResource",
        "fsx:UpdateVolume",
        "fsx:TagResource",
        "fsx:DeleteVolume"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Action": "secretsmanager:GetSecretValue",
      "Effect": "Allow",
      "Resource": "arn:aws:secretsmanager:<aws-region>:<aws-account-id>:secret:<aws-secret-manager-name>*"
    }
  ],
  "Version": "2012-10-17"
}

Pod Identity またはサービス アカウントの関連付け(IRSA)用の IAM ロールを作成する

EKS Pod Identity を持つ AWS Identity and Access Management (IAM) ロール、またはサービスアカウントの関連付け (IRSA) の IAM ロールを引き受けるように Kubernetes サービスアカウントを設定できます。サービスアカウントを使用するように設定されたすべてのポッドは、ロールがアクセス権限を持つすべての AWS サービスにアクセスできるようになります。

Pod アイデンティティ

Amazon EKS Pod Identity associationsは、Amazon EC2インスタンスプロファイルがAmazon EC2インスタンスにクレデンシャルを提供するのと同様に、アプリケーションのクレデンシャルを管理する機能を提供します。

EKS クラスタに Pod Identity をインストールします

AWS コンソールまたは次の AWS CLI コマンドを使用して、Pod identity を作成できます。

aws eks create-addon --cluster-name <EKS_CLUSTER_NAME> --addon-name eks-pod-identity-agent

詳細については、"Amazon EKS Pod Identity Agent を設定する"を参照してください。

trust-relationship.json を作成

EKS サービス プリンシパルが Pod Identity に対してこのロールを引き受けることができるように、trust-relationship.json を作成します。次に、この信頼ポリシーを持つロールを作成します:

aws iam create-role \
  --role-name fsxn-csi-role --assume-role-policy-document file://trust-relationship.json \
  --description "fsxn csi pod identity role"

trust-relationship.json ファイル

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "pods.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}

IAM ロールにロールポリシーをアタッチします

前の手順のロールポリシーを、作成した IAM ロールにアタッチします:

aws iam attach-role-policy \
  --policy-arn arn:aws:iam::aws:111122223333:policy/fsxn-csi-policy \
  --role-name fsxn-csi-role

ポッド ID の関連付けを作成します

IAMロールとTridentサービスアカウント(trident-controller)の間にポッドIDの関連付けを作成する

aws eks create-pod-identity-association \
  --cluster-name <EKS_CLUSTER_NAME> \
  --role-arn arn:aws:iam::111122223333:role/fsxn-csi-role \
  --namespace trident --service-account trident-controller
サービス アカウントの関連付け(IRSA)の IAM ロール

AWS CLI の使用

aws iam create-role --role-name AmazonEKS_FSxN_CSI_DriverRole \
  --assume-role-policy-document file://trust-relationship.json

trust-relationship.json ファイル:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::<account_id>:oidc-provider/<oidc_provider>"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "<oidc_provider>:aud": "sts.amazonaws.com",
          "<oidc_provider>:sub": "system:serviceaccount:trident:trident-controller"
        }
      }
    }
  ]
}
`trust-relationship.json` ファイルで次の値を更新します:
  • <account_id> - AWSアカウントID

  • <oidc_provider> - EKS クラスタの OIDC。oidc_provider は次のコマンドを実行して取得できます:

    aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer"\
      --output text | sed -e "s/^https:\/\///"

IAM ロールを IAM ポリシーにアタッチします

ロールが作成されたら、次のコマンドを使用して、(上記の手順で作成された)ポリシーをロールにアタッチします:

aws iam attach-role-policy --role-name my-role --policy-arn <IAM policy ARN>

OICD プロバイダーが関連付けられていることを確認します

OIDC プロバイダーがクラスターに関連付けられていることを確認します。次のコマンドを使用して確認できます:

aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4

出力が空の場合は、次のコマンドを使用して IAM OIDC をクラスタに関連付けます:

eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve

eksctl を使用している場合、次の例を使用して EKS のサービス アカウントの IAM ロールを作成します:

eksctl create iamserviceaccount --name trident-controller --namespace trident \
  --cluster <my-cluster> --role-name AmazonEKS_FSxN_CSI_DriverRole --role-only \
  --attach-policy-arn <IAM-Policy ARN> --approve