mirror of
https://github.com/ansible/awx.git
synced 2026-02-02 01:58:09 -03:30
66 lines
2.0 KiB
Python
66 lines
2.0 KiB
Python
import boto3
|
|
from botocore.exceptions import ClientError
|
|
|
|
from .plugin import CredentialPlugin
|
|
from .plugin import translate_function as _
|
|
|
|
|
|
secrets_manager_inputs = {
|
|
'fields': [
|
|
{
|
|
'id': 'aws_access_key',
|
|
'label': _('AWS Access Key'),
|
|
'type': 'string',
|
|
},
|
|
{
|
|
'id': 'aws_secret_key',
|
|
'label': _('AWS Secret Key'),
|
|
'type': 'string',
|
|
'secret': True,
|
|
},
|
|
],
|
|
'metadata': [
|
|
{
|
|
'id': 'region_name',
|
|
'label': _('AWS Secrets Manager Region'),
|
|
'type': 'string',
|
|
'help_text': _('Region which the secrets manager is located'),
|
|
},
|
|
{
|
|
'id': 'secret_name',
|
|
'label': _('AWS Secret Name'),
|
|
'type': 'string',
|
|
},
|
|
],
|
|
'required': ['aws_access_key', 'aws_secret_key', 'region_name', 'secret_name'],
|
|
}
|
|
|
|
|
|
def aws_secretsmanager_backend(**kwargs):
|
|
secret_name = kwargs['secret_name']
|
|
region_name = kwargs['region_name']
|
|
aws_secret_access_key = kwargs['aws_secret_key']
|
|
aws_access_key_id = kwargs['aws_access_key']
|
|
|
|
session = boto3.session.Session()
|
|
client = session.client(
|
|
service_name='secretsmanager', region_name=region_name, aws_secret_access_key=aws_secret_access_key, aws_access_key_id=aws_access_key_id
|
|
)
|
|
|
|
try:
|
|
get_secret_value_response = client.get_secret_value(SecretId=secret_name)
|
|
except ClientError as e:
|
|
raise e
|
|
# Secrets Manager decrypts the secret value using the associated KMS CMK
|
|
# Depending on whether the secret was a string or binary, only one of these fields will be populated
|
|
if 'SecretString' in get_secret_value_response:
|
|
secret = get_secret_value_response['SecretString']
|
|
|
|
else:
|
|
secret = get_secret_value_response['SecretBinary']
|
|
|
|
return secret
|
|
|
|
|
|
aws_secretmanager_plugin = CredentialPlugin('AWS Secrets Manager lookup', inputs=secrets_manager_inputs, backend=aws_secretsmanager_backend)
|