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"
}
サービス アカウントの関連付け (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
詳細については、"Amazon EKS ポッドアイデンティティエージェントを設定する" 。
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
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