Buscar este blog

Aviso

El autor de éste blog no se hace responsable de los posibles daños o perdidas de información, que pudieran ocasionarse en su sistema o su vida por la aplicación de la información aquí contenida.

miércoles, 26 de agosto de 2020

Compartir secretos entre cuentas AWS

 

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/

Más populares

Archivo del blog