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 de 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"
}
Crie uma função do IAM para a conta de serviço
Depois de criar a política, use-a ao criar a função que será atribuída à conta de serviço em que o Trident será executado:
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
O exemplo a seguir cria uma função do IAM para a 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