Crie uma função do IAM e um segredo da AWS.
Você pode configurar pods do Kubernetes para acessar recursos da AWS autenticando-se 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ê precisa ter um cluster Kubernetes implantado usando o EKS. |
Criar segredo do AWS Secrets Manager
Como o Trident emitirá APIs contra um servidor virtual FSx para gerenciar o armazenamento para você, ele precisará de credenciais para fazer isso. A forma segura de transmitir essas credenciais é por meio de um segredo do AWS Secrets Manager. Portanto, se você ainda não possui uma, 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 funcionar corretamente. Portanto, você precisa criar uma política que conceda ao Trident as permissões necessárias.
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 de 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 do AWS Identity and Access Management (IAM) com a Identidade do Pod do EKS ou a função do IAM para associação de conta de serviço (IRSA). Qualquer Pod configurado para usar a conta de serviço poderá acessar qualquer serviço da AWS para o qual a função tenha permissões de acesso.
As associações de identidade de pods do Amazon EKS permitem 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 através 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 obter mais informações, consulte"Configure o agente de identidade do Amazon EKS Pod." .
Criar trust-relationship.json:
Crie o arquivo trust-relationship.json para permitir que o Service Principal do EKS 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 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
Criar uma associação de identidade de pod:
Crie uma associação de identidade de pod entre a função IAM e a conta de serviço 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
Utilizando a AWS CLI:
aws iam create-role --role-name AmazonEKS_FSxN_CSI_DriverRole \ --assume-role-policy-document file://trust-relationship.json
Arquivo 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"
}
}
}
]
}
Atualize os seguintes valores em trust-relationship.json arquivo:
-
<account_id> - Seu ID de conta da AWS
-
<oidc_provider> - O OIDC do seu cluster EKS. Você pode obter o provedor oidc executando o seguinte comando:
aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer"\ --output text | sed -e "s/^https:\/\///"
Associe a função IAM à política IAM:
Após a criação da função, associe a política (criada na etapa anterior) à função usando este comando:
aws iam attach-role-policy --role-name my-role --policy-arn <IAM policy ARN>
Verifique se o provedor do OICD está associado:
Verifique se o seu provedor OIDC está associado ao seu cluster. Você pode verificar isso 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 seu cluster:
eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve
Se você estiver usando o eksctl, utilize o exemplo a seguir para criar uma função 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