Introducción a AWS Secrets Manager
En esta clase sobre AWS Secrets Manager, aprenderás:
- Introduccion a AWS Secrets Manager
- Almacenamiento de un Secret
- Recuperación de un Secret
- Replicación de un Secret a otra región
- Eliminación de un Secret
- Rotación automática de un Secret
AWS Secrets Manager
Comandos utilizados en clase
- Cómo instalar Boto3 en una instancia con Amazon Linux 2
$ pip3 install boto3
- Cómo verificar si Boto3 esta instalado en una instancia con Amazon Linux 2
$ python3 -c "import boto3; print(boto3.__version__)"
- Crea un archivo
retrieve_secret.py
y guarda este script python
# -*- coding: utf-8 -*-
import boto3
import json
import os
from botocore.exceptions import NoCredentialsError, PartialCredentialsError
def get_secret():
secret_name = "MyTestSecret"
region_name = os.getenv('AWS_REGION', 'us-east-1’)
# Crear un cliente de Secrets Manager
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
try:
get_secret_value_response = client.get_secret_value(
SecretId=secret_name
)
except NoCredentialsError:
print("Error: No se encontraron las credenciales de AWS.")
return
except PartialCredentialsError:
print("Error: Credenciales incompletas de AWS.")
return
except client.exceptions.ResourceNotFoundException:
print("El secreto no se encontró.")
return
except client.exceptions.InvalidRequestException as e:
print("El request no es válido:", e)
return
except client.exceptions.InvalidParameterException as e:
print("El parámetro no es válido:", e)
return
# Decodificar y retornar el secreto
secret = get_secret_value_response['SecretString']
secret_dict = json.loads(secret)
print("El valor del secreto es:", secret_dict)
if __name__ == "__main__":
get_secret()
- IAM Identity policy que debe tener tu user o role iam para acceder al secreto
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": [
"arn:aws:secretsmanager:us-east-1:<cuenta-aws>:secret:<tu-screto>"
]
}
]
}
- IAM Resource policy que debe tener tu secreto para que un principal acceda
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<cuenta-aws>:role/<tu-role-aws>"
},
"Action": "secretsmanager:GetSecretValue",
"Resource": "arn:aws:secretsmanager:us-east-2:<cuenta-aws>:secret:<tu-screto>"
}
]
}