Requisitos:
- Cuenta consumidor (cuenta_consumidor)
- Usuario consumidor en la cuenta consumidor (jorge-usuario)
- Cuenta secretos (cuenta_secretos)
- Clave de KMS administrada por el cliente en la cuenta de secretos (jorge-kms-key)
- Secreto de Secrets Manager usando clave de cifrado jorge-kms-key en la cuenta secretos (jorge-secreto)
1) Crear en IAM cuenta consumidor una nueva política y agregársela al usuario que va a consumir el secreto: (si la cuenta es admin no es necesario)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "secretsmanager:GetSecretValue",
// ARN DEL SECRETO
"Resource": "arn:aws:secretsmanager:tu-region:cuenta_secretos:secret:jorge-secreto"
},
{
"Effect": "Allow",
"Action": "kms:Decrypt",
// ARN DEL DE LA LLAVE KMS
"Resource": "arn:aws:kms:tu-region:cuenta_secretos:key/jorge-kms-key"
}
]
}
2) Crear en la
cuenta de secretos una llave KMS puedes editar la política en el CLI agregando los statemets:
,
{
"Sid": "AllowUseOfTheKey",
"Effect": "Allow",
"Principal": {
// ARN DEL USUARIO
"AWS": "arn:aws:iam::cuenta_consumidor:user/jorge-usuario"
},
"Action": [
"kms:Decrypt",
"kms:DescribeKey"
],
"Resource": "arn:aws:kms:tu-region:cuenta_secreto:key/jorge-kms-key"
}
3) Crear un secreto en la cuenta de secretos, que use la llave KMS del paso anterior "jorge-kms-key", además hay que editar la política del secreto y dejarla de la siguiente manera:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
// ARN DEL USUARIO
"AWS": "arn:aws:iam::cuenta_consumidor:user/jorge-usuario"
},
"Action": "secretsmanager:GetSecretValue",
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"secretsmanager:VersionStage": "AWSCURRENT"
}
}
}
]
}
4) Obtener el secreto con AWS CLI:
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:tu-region:cuenta_secretos:secret:jorge-secreto --version-stage AWSCURRENT
5) O desde boto3:
import boto3
def lambda_handler(event, context):
print('lambda_handler!')
region_name = "ru-region"
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
get_secret_value_response = client.get_secret_value(
SecretId='arn del secreto',
VersionStage='AWSCURRENT' # Importante! u opcional?
)
print('get_secret_value_response', get_secret_value_response)
Con esto termina! Buena suerte.
Referencias:
- https://aws.amazon.com/es/premiumsupport/knowledge-center/secrets-manager-share-between-accounts/