Crie uma função do IAM e o AWS Secret
Você pode configurar pods do Kubernetes para acessar recursos da AWS autenticando como uma função do AWS IAM em vez de fornecer credenciais explícitas da AWS.
|
Para autenticar usando uma função do AWS IAM, você deve ter um cluster do Kubernetes implantado usando o EKS. |
Crie o segredo do AWS Secrets Manager
Como o Trident estará emitindo APIs em um vserver do FSX para gerenciar o armazenamento para você, ele precisará de credenciais para fazer isso. A maneira segura de passar essas credenciais é através de um segredo do AWS Secrets Manager. Portanto, se você ainda não tiver um, precisará criar um segredo do AWS Secrets Manager que contenha as credenciais da conta vsadmin.
Este exemplo cria um segredo do AWS Secrets Manager para armazenar credenciais do Trident CSI:
aws secretsmanager create-secret --name trident-secret --description "Trident CSI credentials"\
--secret-string "{\"username\":\"vsadmin\",\"password\":\"<svmpassword>\"}"
Criar política do IAM
O Trident também precisa de permissões da AWS para ser executado corretamente. Portanto, você precisa criar uma política que dê ao Trident as permissões de que ele precisa.
Os exemplos a seguir criam uma política do IAM usando a AWS CLI:
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"
-
Exemplo JSON de política*:
{
"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"
}
Criar identidade de pod ou função IAM para associação de conta de serviço (IRSA)
Você pode configurar uma conta de serviço do Kubernetes para assumir uma função de Gerenciamento de Identidade e Acesso (IAM) da AWS com a função de Identidade do Pod do EKS ou a função de IAM para Associação de Conta de Serviço (IRSA). Quaisquer Pods configurados para usar a conta de serviço podem acessar qualquer serviço da AWS para o qual a função tenha permissão de acesso.
As associações de identidade do Amazon EKS Pod fornecem a capacidade de gerenciar credenciais para seus aplicativos, de forma semelhante à maneira como os perfis de instância do Amazon EC2 fornecem credenciais para instâncias do Amazon EC2.
Instale o Pod Identity no seu cluster EKS:
Você pode criar uma identidade de Pod por meio do console da AWS ou usando o seguinte comando da AWS CLI:
aws eks create-addon --cluster-name <EKS_CLUSTER_NAME> --addon-name eks-pod-identity-agent
Para mais informações consulte "Configurar o agente de identidade do pod do Amazon EKS" .
Crie trust-relationship.json:
Crie trust-relationship.json para permitir que o EKS Service Principal assuma essa função para a Identidade do Pod. Em seguida, crie uma função com esta política de confiança:
aws iam create-role \ --role-name fsxn-csi-role --assume-role-policy-document file://trust-relationship.json \ --description "fsxn csi pod identity role"
arquivo trust-relationship.json:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "pods.eks.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:TagSession"
]
}
]
}
Anexe a política de função à função do IAM:
Anexe a política de função da etapa anterior à função do IAM que foi criada:
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:111122223333:policy/fsxn-csi-policy \ --role-name fsxn-csi-role
Crie uma associação de identidade de pod:
Crie uma associação de identidade de pod entre a função do IAM e a conta de serviço do Trident (trident-controller)
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
Usando a AWS CLI:
aws iam create-role --role-name AmazonEKS_FSxN_CSI_DriverRole \ --assume-role-policy-document file://trust-relationship.json
-
arquivo trust-relation.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"
}
}
}
]
}
Atualize os seguintes valores no trust-relationship.json
arquivo:
-
<account_id> - seu ID de conta da AWS
-
<oidc_provider> - o OIDC do seu cluster EKS. Você pode obter o oidc_provider executando:
aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer"\ --output text | sed -e "s/^https:\/\///"
Anexar a função do IAM com a política do IAM:
Depois que a função tiver sido criada, anexe a política (que foi criada na etapa acima) à função usando este comando:
aws iam attach-role-policy --role-name my-role --policy-arn <IAM policy ARN>
Verifique se o provedor OICD está associado:
Verifique se seu provedor de OIDC está associado ao cluster. Você pode verificá-lo usando este comando:
aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
Se a saída estiver vazia, use o seguinte comando para associar o IAM OIDC ao cluster:
eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve
Se você estiver usando eksctl, use o exemplo a seguir para criar uma função do IAM para uma conta de serviço no EKS:
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