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

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

共同作成者 netapp-aruldeepa

明示的な 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"
}

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

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

ポッドのアイデンティティ

Amazon EKS ポッドアイデンティティの関連付けは、Amazon EC2 インスタンスプロファイルが Amazon EC2 インスタンスに認証情報を提供するのと同様に、アプリケーションの認証情報を管理する機能を提供します。

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

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

aws eks create-addon --cluster-name <EKS_CLUSTER_NAME> --addon-name 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