コード例 #1
0
def test_get_aws_security_credentials_credentials_not_found_in_aws_creds_uri(mocker, capsys):
    config = get_fake_config()
    mocker.patch('mount_efs.urlopen')

    with pytest.raises(SystemExit) as ex:
        mount_efs.get_aws_security_credentials(config, True, 'us-east-1', 'default', AWSCREDSURI)

    assert 0 != ex.value.code

    out, err = capsys.readouterr()
    assert 'Unsuccessful retrieval of AWS security credentials at' in err
コード例 #2
0
def test_get_aws_security_credentials_not_found(mocker, capsys):
    mocker.patch.dict(os.environ, {})
    mocker.patch('os.path.exists', return_value=False)
    mocker.patch('mount_efs.urlopen')

    with pytest.raises(SystemExit) as ex:
        mount_efs.get_aws_security_credentials()

    assert 0 != ex.value.code

    out, err = capsys.readouterr()
    assert 'AWS Access Key ID and Secret Access Key are not found in AWS credentials file' in err
コード例 #3
0
def test_get_aws_security_credentials_no_credentials_found(mocker, capsys):
    mocker.patch.dict(os.environ, {})
    mocker.patch('os.path.exists', return_value=False)
    mocker.patch('mount_efs.urlopen')

    with pytest.raises(SystemExit) as ex:
        mount_efs.get_aws_security_credentials(True, 'us-east-1', None)

    assert 0 != ex.value.code

    out, err = capsys.readouterr()
    assert 'AWS Access Key ID and Secret Access Key are not found in AWS credentials file' in err
    assert 'from ECS credentials relative uri, or from the instance security credentials service' in err
コード例 #4
0
def test_get_aws_security_credentials_credentials_not_found_in_files(mocker, capsys):
    mocker.patch.dict(os.environ, {})
    mocker.patch('os.path.exists', return_value=False)
    mocker.patch('mount_efs.urlopen')

    with pytest.raises(SystemExit) as ex:
        mount_efs.get_aws_security_credentials(True, 'default')

    assert 0 != ex.value.code

    out, err = capsys.readouterr()
    assert 'AWS security credentials not found in' in err
    assert 'under named profile [default]' in err
コード例 #5
0
def test_get_aws_security_credentials_credentials_not_found_in_files_and_botocore_not_present(mocker, capsys):
    config = get_fake_config()
    mocker.patch.dict(os.environ, {})
    mocker.patch('os.path.exists', return_value=False)
    mocker.patch('mount_efs.urlopen')
    mount_efs.BOTOCORE_PRESENT = False

    with pytest.raises(SystemExit) as ex:
        mount_efs.get_aws_security_credentials(config, True, 'us-east-1', 'default')

    assert 0 != ex.value.code

    out, err = capsys.readouterr()
    assert 'AWS security credentials not found in' in err
    assert 'under named profile [default]' in err
コード例 #6
0
def _test_get_aws_security_credentials_get_instance_metadata_role_name(
        mocker,
        is_name_str=True,
        token_effects=[MockUrlLibResponse(data="ABCDEFG==")]):
    config = get_fake_config()
    mocker.patch.dict(os.environ, {})
    mocker.patch("os.path.exists", return_value=False)
    response = json.dumps({
        "Code": "Success",
        "LastUpdated": "2019-10-25T14:41:42Z",
        "Type": "AWS-HMAC",
        "AccessKeyId": ACCESS_KEY_ID_VAL,
        "SecretAccessKey": SECRET_ACCESS_KEY_VAL,
        "Token": SESSION_TOKEN_VAL,
        "Expiration": "2019-10-25T21:17:24Z",
    })
    if is_name_str:
        role_name_data = b"FAKE_IAM_ROLE_NAME"
    else:
        role_name_data = "FAKE_IAM_ROLE_NAME"

    side_effects = (token_effects + [MockUrlLibResponse(data=role_name_data)] +
                    token_effects + [MockUrlLibResponse(data=response)])
    mocker.patch("mount_efs.urlopen", side_effect=side_effects)

    credentials, credentials_source = mount_efs.get_aws_security_credentials(
        config, True, "us-east-1", None)

    assert credentials["AccessKeyId"] == ACCESS_KEY_ID_VAL
    assert credentials["SecretAccessKey"] == SECRET_ACCESS_KEY_VAL
    assert credentials["Token"] == SESSION_TOKEN_VAL
    assert credentials_source == "metadata:"
コード例 #7
0
def test_get_aws_security_credentials_do_not_use_iam():
    config = get_fake_config()
    credentials, credentials_source = mount_efs.get_aws_security_credentials(
        config, False, "us-east-1", "test_profile")

    assert not credentials
    assert not credentials_source
コード例 #8
0
def _test_get_aws_security_credentials_get_instance_metadata_role_name(mocker, is_name_str=True, is_imds_v2=False):
    mocker.patch.dict(os.environ, {})
    mocker.patch('os.path.exists', return_value=False)
    response = json.dumps({
        'Code': 'Success',
        'LastUpdated': '2019-10-25T14:41:42Z',
        'Type': 'AWS-HMAC',
        'AccessKeyId': ACCESS_KEY_ID_VAL,
        'SecretAccessKey': SECRET_ACCESS_KEY_VAL,
        'Token': SESSION_TOKEN_VAL,
        'Expiration': '2019-10-25T21:17:24Z'
    })
    if is_name_str:
        role_name_data = b'FAKE_IAM_ROLE_NAME'
    else:
        role_name_data = 'FAKE_IAM_ROLE_NAME'
    if is_imds_v2:
        side_effects = [HTTPError('url', 401, 'Unauthorized', None, None)]
        mocker.patch('mount_efs.get_aws_ec2_metadata_token', return_value='ABCDEFG==')
    else:
        side_effects = []
    side_effects = side_effects + [MockUrlLibResponse(data=role_name_data), MockUrlLibResponse(data=response)]
    mocker.patch('mount_efs.urlopen', side_effect=side_effects)

    credentials, credentials_source = mount_efs.get_aws_security_credentials(True, None)

    assert credentials['AccessKeyId'] == ACCESS_KEY_ID_VAL
    assert credentials['SecretAccessKey'] == SECRET_ACCESS_KEY_VAL
    assert credentials['Token'] == SESSION_TOKEN_VAL
    assert credentials_source == 'metadata:'
コード例 #9
0
def _test_get_aws_security_credentials_get_instance_metadata_role_name(mocker, is_name_str=True, token_timeout=False):
    config = get_fake_config()
    mocker.patch.dict(os.environ, {})
    mocker.patch('os.path.exists', return_value=False)
    response = json.dumps({
        'Code': 'Success',
        'LastUpdated': '2019-10-25T14:41:42Z',
        'Type': 'AWS-HMAC',
        'AccessKeyId': ACCESS_KEY_ID_VAL,
        'SecretAccessKey': SECRET_ACCESS_KEY_VAL,
        'Token': SESSION_TOKEN_VAL,
        'Expiration': '2019-10-25T21:17:24Z'
    })
    if is_name_str:
        role_name_data = b'FAKE_IAM_ROLE_NAME'
    else:
        role_name_data = 'FAKE_IAM_ROLE_NAME'

    if token_timeout:
        token_effects = [socket.timeout]
    else:
        token_effects = [MockUrlLibResponse(data='ABCDEFG==')]

    side_effects = token_effects + [MockUrlLibResponse(data=role_name_data)] + token_effects + [MockUrlLibResponse(data=response)]
    mocker.patch('mount_efs.urlopen', side_effect=side_effects)

    credentials, credentials_source = mount_efs.get_aws_security_credentials(config, True, 'us-east-1', None)

    assert credentials['AccessKeyId'] == ACCESS_KEY_ID_VAL
    assert credentials['SecretAccessKey'] == SECRET_ACCESS_KEY_VAL
    assert credentials['Token'] == SESSION_TOKEN_VAL
    assert credentials_source == 'metadata:'
コード例 #10
0
def test_get_aws_security_credentials_no_credentials_found(mocker, capsys):
    config = get_fake_config()
    mocker.patch.dict(os.environ, {})
    mocker.patch("os.path.exists", return_value=False)
    mocker.patch("mount_efs.urlopen")

    with pytest.raises(SystemExit) as ex:
        mount_efs.get_aws_security_credentials(config, True, "us-east-1", None)

    assert 0 != ex.value.code

    out, err = capsys.readouterr()
    assert (
        "AWS Access Key ID and Secret Access Key are not found in AWS credentials file"
        in err)
    assert (
        "from ECS credentials relative uri, or from the instance security credentials service"
        in err)
コード例 #11
0
def test_get_aws_security_credentials_get_ecs_from_option_url(mocker):
    response = json.dumps({
        'AccessKeyId': ACCESS_KEY_ID_VAL,
        'Expiration': 'EXPIRATION_DATE',
        'RoleArn': 'TASK_ROLE_ARN',
        'SecretAccessKey': SECRET_ACCESS_KEY_VAL,
        'Token': SESSION_TOKEN_VAL
    })
    mocker.patch('mount_efs.urlopen', return_value=MockUrlLibResponse(data=response))
    credentials, credentials_source = mount_efs.get_aws_security_credentials(True, None, AWSCREDSURI)

    assert credentials['AccessKeyId'] == ACCESS_KEY_ID_VAL
    assert credentials['SecretAccessKey'] == SECRET_ACCESS_KEY_VAL
    assert credentials['Token'] == SESSION_TOKEN_VAL
    assert credentials_source == 'ecs:' + AWSCREDSURI
コード例 #12
0
def test_get_aws_security_credentials_config_or_creds_file_found_creds_found_with_token_with_awsprofile(mocker):
    file_helper_resp = {
        'AccessKeyId': ACCESS_KEY_ID_VAL,
        'SecretAccessKey': SECRET_ACCESS_KEY_VAL,
        'Token': SESSION_TOKEN_VAL
    }

    mocker.patch.dict(os.environ, {})
    mocker.patch('os.path.exists', return_value=True)
    mocker.patch('mount_efs.credentials_file_helper', return_value=file_helper_resp)

    credentials, credentials_source = mount_efs.get_aws_security_credentials(True, 'test_profile')

    assert credentials['AccessKeyId'] == ACCESS_KEY_ID_VAL
    assert credentials['SecretAccessKey'] == SECRET_ACCESS_KEY_VAL
    assert credentials['Token'] is SESSION_TOKEN_VAL
    assert credentials_source == 'credentials:test_profile'
コード例 #13
0
def test_get_aws_security_credentials_config_or_creds_file_found_creds_found_without_token_no_awsprofile(
        mocker):
    file_helper_resp = {
        'AccessKeyId': ACCESS_KEY_ID_VAL,
        'SecretAccessKey': SECRET_ACCESS_KEY_VAL,
        'Token': None
    }

    mocker.patch.dict(os.environ, {})
    mocker.patch('os.path.exists', return_value=True)
    mocker.patch('mount_efs.credentials_file_helper',
                 return_value=file_helper_resp)

    credentials = mount_efs.get_aws_security_credentials()

    assert credentials['AccessKeyId'] == ACCESS_KEY_ID_VAL
    assert credentials['SecretAccessKey'] == SECRET_ACCESS_KEY_VAL
    assert credentials['Token'] is None
コード例 #14
0
def test_get_aws_security_credentials_get_ecs_from_option_url(mocker):
    config = get_fake_config()
    response = json.dumps({
        "AccessKeyId": ACCESS_KEY_ID_VAL,
        "Expiration": "EXPIRATION_DATE",
        "RoleArn": "TASK_ROLE_ARN",
        "SecretAccessKey": SECRET_ACCESS_KEY_VAL,
        "Token": SESSION_TOKEN_VAL,
    })
    mocker.patch("mount_efs.urlopen",
                 return_value=MockUrlLibResponse(data=response))
    credentials, credentials_source = mount_efs.get_aws_security_credentials(
        config, True, "us-east-1", None, AWSCREDSURI)

    assert credentials["AccessKeyId"] == ACCESS_KEY_ID_VAL
    assert credentials["SecretAccessKey"] == SECRET_ACCESS_KEY_VAL
    assert credentials["Token"] == SESSION_TOKEN_VAL
    assert credentials_source == "ecs:" + AWSCREDSURI
コード例 #15
0
def test_get_aws_security_credentials_get_ecs_from_env_url(mocker):
    mocker.patch.dict(os.environ, {})
    mocker.patch('os.path.exists', return_value=False)
    response = json.dumps({
        'AccessKeyId': ACCESS_KEY_ID_VAL,
        'Expiration': 'EXPIRATION_DATE',
        'RoleArn': 'TASK_ROLE_ARN',
        'SecretAccessKey': SECRET_ACCESS_KEY_VAL,
        'Token': SESSION_TOKEN_VAL
    })
    mocker.patch.dict(os.environ, {'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': 'fake_uri'})
    mocker.patch('mount_efs.urlopen', return_value=MockUrlLibResponse(data=response))

    credentials, credentials_source = mount_efs.get_aws_security_credentials(True, None)

    assert credentials['AccessKeyId'] == ACCESS_KEY_ID_VAL
    assert credentials['SecretAccessKey'] == SECRET_ACCESS_KEY_VAL
    assert credentials['Token'] == SESSION_TOKEN_VAL
    assert credentials_source == 'ecs:fake_uri'
コード例 #16
0
def test_get_aws_security_credentials_get_instance_metadata_role_name_bytes(mocker):
    mocker.patch.dict(os.environ, {})
    mocker.patch('os.path.exists', return_value=False)
    response = json.dumps({
        'Code': 'Success',
        'LastUpdated': '2019-10-25T14:41:42Z',
        'Type': 'AWS-HMAC',
        'AccessKeyId': ACCESS_KEY_ID_VAL,
        'SecretAccessKey': SECRET_ACCESS_KEY_VAL,
        'Token': SESSION_TOKEN_VAL,
        'Expiration': '2019-10-25T21:17:24Z'
    })
    side_effects = [MockUrlLibResponse(data=b'FAKE_IAM_ROLE_NAME'), MockUrlLibResponse(data=response)]
    mocker.patch('mount_efs.urlopen', side_effect=side_effects)

    credentials, credentials_source = mount_efs.get_aws_security_credentials(True, None)

    assert credentials['AccessKeyId'] == ACCESS_KEY_ID_VAL
    assert credentials['SecretAccessKey'] == SECRET_ACCESS_KEY_VAL
    assert credentials['Token'] == SESSION_TOKEN_VAL
    assert credentials_source == 'metadata:'
コード例 #17
0
def test_get_aws_security_credentials_botocore_present_get_assumed_profile_credentials(mocker):
    config = get_fake_config()
    mocker.patch.dict(os.environ, {})
    mocker.patch('os.path.exists', return_value=False)
    mocker.patch('mount_efs.urlopen')
    mount_efs.BOTOCORE_PRESENT = True

    botocore_helper_resp = {
        'AccessKeyId': ACCESS_KEY_ID_VAL,
        'SecretAccessKey': SECRET_ACCESS_KEY_VAL,
        'Token': SESSION_TOKEN_VAL
    }
    botocore_get_assumed_profile_credentials_mock = mocker.patch('mount_efs.botocore_credentials_helper',
                                                                 return_value=botocore_helper_resp)

    credentials, credentials_source = mount_efs.get_aws_security_credentials(config, True, 'us-east-1', awsprofile='test-profile')
    assert credentials['AccessKeyId'] == ACCESS_KEY_ID_VAL
    assert credentials['SecretAccessKey'] == SECRET_ACCESS_KEY_VAL
    assert credentials['Token'] == SESSION_TOKEN_VAL
    assert credentials_source == 'named_profile:test-profile'
    utils.assert_called(botocore_get_assumed_profile_credentials_mock)
コード例 #18
0
def test_get_aws_security_credentials_iam(mocker):
    mocker.patch.dict(os.environ, {})
    mocker.patch('os.path.exists', return_value=False)
    response = json.dumps({
        'Code': 'Success',
        'LastUpdated': '2019-10-25T14:41:42Z',
        'Type': 'AWS-HMAC',
        'AccessKeyId': ACCESS_KEY_ID_VAL,
        'SecretAccessKey': SECRET_ACCESS_KEY_VAL,
        'Token': SESSION_TOKEN_VAL,
        'Expiration': '2019-10-25T21:17:24Z'
    })
    mocker.patch.dict(os.environ, {})
    mocker.patch('mount_efs.urlopen',
                 return_value=MockUrlLibResponse(data=response))

    credentials = mount_efs.get_aws_security_credentials()

    assert credentials['AccessKeyId'] == ACCESS_KEY_ID_VAL
    assert credentials['SecretAccessKey'] == SECRET_ACCESS_KEY_VAL
    assert credentials['Token'] == SESSION_TOKEN_VAL
コード例 #19
0
def test_get_aws_security_credentials_config_or_creds_file_found_creds_found_without_token_with_awsprofile(
    mocker, ):
    config = get_fake_config()
    file_helper_resp = {
        "AccessKeyId": ACCESS_KEY_ID_VAL,
        "SecretAccessKey": SECRET_ACCESS_KEY_VAL,
        "Token": None,
    }

    mocker.patch.dict(os.environ, {})
    mocker.patch("os.path.exists", return_value=True)
    mocker.patch("mount_efs.credentials_file_helper",
                 return_value=file_helper_resp)

    credentials, credentials_source = mount_efs.get_aws_security_credentials(
        config, True, "us-east-1", "test_profile")

    assert credentials["AccessKeyId"] == ACCESS_KEY_ID_VAL
    assert credentials["SecretAccessKey"] == SECRET_ACCESS_KEY_VAL
    assert credentials["Token"] is None
    assert credentials_source == "credentials:test_profile"
コード例 #20
0
def _test_get_aws_security_credentials_get_ecs_from_env_url(mocker):
    config = get_fake_config()
    mocker.patch.dict(os.environ, {})
    mocker.patch("os.path.exists", return_value=False)
    response = json.dumps({
        "AccessKeyId": ACCESS_KEY_ID_VAL,
        "Expiration": "EXPIRATION_DATE",
        "RoleArn": "TASK_ROLE_ARN",
        "SecretAccessKey": SECRET_ACCESS_KEY_VAL,
        "Token": SESSION_TOKEN_VAL,
    })
    mocker.patch.dict(os.environ,
                      {"AWS_CONTAINER_CREDENTIALS_RELATIVE_URI": "fake_uri"})

    mocker.patch("mount_efs.urlopen",
                 return_value=MockUrlLibResponse(data=response))

    credentials, credentials_source = mount_efs.get_aws_security_credentials(
        config, True, "us-east-1", None)

    assert credentials["AccessKeyId"] == ACCESS_KEY_ID_VAL
    assert credentials["SecretAccessKey"] == SECRET_ACCESS_KEY_VAL
    assert credentials["Token"] == SESSION_TOKEN_VAL
    assert credentials_source == "ecs:fake_uri"
コード例 #21
0
def test_get_aws_security_credentials_botocore_present_get_assumed_profile_credentials(
    mocker, ):
    config = get_fake_config()
    mocker.patch.dict(os.environ, {})
    mocker.patch("os.path.exists", return_value=False)
    mocker.patch("mount_efs.urlopen")
    mount_efs.BOTOCORE_PRESENT = True

    botocore_helper_resp = {
        "AccessKeyId": ACCESS_KEY_ID_VAL,
        "SecretAccessKey": SECRET_ACCESS_KEY_VAL,
        "Token": SESSION_TOKEN_VAL,
    }
    botocore_get_assumed_profile_credentials_mock = mocker.patch(
        "mount_efs.botocore_credentials_helper",
        return_value=botocore_helper_resp)

    credentials, credentials_source = mount_efs.get_aws_security_credentials(
        config, True, "us-east-1", awsprofile="test-profile")
    assert credentials["AccessKeyId"] == ACCESS_KEY_ID_VAL
    assert credentials["SecretAccessKey"] == SECRET_ACCESS_KEY_VAL
    assert credentials["Token"] == SESSION_TOKEN_VAL
    assert credentials_source == "named_profile:test-profile"
    utils.assert_called(botocore_get_assumed_profile_credentials_mock)
コード例 #22
0
def test_get_aws_security_credentials_do_not_use_iam():
    credentials, credentials_source = mount_efs.get_aws_security_credentials(
        False, 'test_profile')

    assert not credentials
    assert not credentials_source