PSRule.Rules.CAF/README.md

326 строки
10 KiB
Markdown

# PSRule for Cloud Adoption Framework
A suite of rules to validate Azure resources against the Cloud Adoption Framework (CAF) using PSRule.
![ci-badge]
Features of PSRule for CAF include:
- [Ready to go](docs/features.md#ready-to-go) - Leverage configurable rules to validate Azure resources.
- [DevOps](docs/features.md#devops) - Validate resources and infrastructure code pre or post-deployment.
- [Cross-platform](docs/features.md#cross-platform) - Run on MacOS, Linux, and Windows.
## Support
This project uses GitHub Issues to track bugs and feature requests.
Please search the existing issues before filing new issues to avoid duplicates.
- For new issues, file your bug or feature request as a new [issue].
- For help, discussion, and support questions about using this project, join or start a [discussion].
If you have any problems with the [PSRule][engine] engine, please check the project GitHub [issues](https://github.com/Microsoft/PSRule/issues) page instead.
Support for this project/ product is limited to the resources listed above.
## Getting the modules
This project requires the `PSRule`, `PSRule.Rules.Azure` and `Az` PowerShell modules.
For details on each see [install].
You can download and install these modules from the PowerShell Gallery.
Module | Description | Downloads / instructions
------ | ----------- | ------------------------
PSRule.Rules.CAF | Validate Azure resources against the CAF. | [latest][module] / [instructions][install]
## Getting started
PSRule for CAF provides two methods for analyzing Azure resources:
- _Pre-flight_ - Before resources are deployed from Azure Resource Manager (ARM) templates.
- _In-flight_ - After resource are deployed to an Azure subscription.
For additional details see the [FAQ](docs/features.md#frequently-asked-questions-faq).
### Using with GitHub Actions
The following example shows how to setup Github Actions to validate templates pre-flight.
1. See [Creating a workflow file][create-workflow].
2. Reference `microsoft/ps-rule` with `modules: 'PSRule.Rules.CAF'`.
3. Create and configure `ps-rule.yaml` in the repository root directory.
Example workflow:
```yaml
# Example: .github/workflows/analyze-arm.yaml
#
# STEP 1: Template validation
#
name: Analyze templates
on:
- pull_request
jobs:
analyze_arm:
name: Analyze templates
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
# STEP 3: Run analysis against PSRule for Cloud Adoption Framework
- name: Test Azure Infrastructure as Code
uses: microsoft/ps-rule@v2.0.0
with:
modules: 'PSRule.Rules.CAF'
```
Example PSRule options:
```yaml
# Example: ps-rule.yaml
#
# PSRule configuration
#
# Please see the documentation for all configuration options:
# https://aka.ms/ps-rule/options
include:
module:
- PSRule.Rules.CAF
requires:
PSRule.Rules.CAF: '>=0.3.0'
output:
culture:
- en-US
configuration:
# Enable expansion for Bicep source files.
AZURE_BICEP_FILE_EXPANSION: true
# Enable expansion for template expansion.
AZURE_PARAMETER_FILE_EXPANSION: true
```
### Using with Azure Pipelines
The following example shows how to setup Azure Pipelines to validate templates pre-flight.
1. Install [PSRule extension][extension] for Azure DevOps marketplace.
2. Create a new YAML pipeline with the _Starter pipeline_ template.
3. Add the `PSRule analysis` task.
- Set `modules` to `PSRule.Rules.CAF`.
4. Create and configure `ps-rule.yaml` in the repository root directory.
Example pipeline:
```yaml
# Example: .pipelines/analyze-arm.yaml
#
# STEP 2: Template validation
#
jobs:
- job: 'analyze_arm'
displayName: 'Analyze templates'
pool:
vmImage: 'ubuntu-20.04'
steps:
# STEP 3: Run analysis against PSRule for Cloud Adoption Framework
- task: ps-rule-assert@1
displayName: Test Azure Infrastructure as Code
inputs:
modules: 'PSRule.Rules.CAF'
```
Example PSRule options:
```yaml
# Example: ps-rule.yaml
#
# PSRule configuration
#
# Please see the documentation for all configuration options:
# https://aka.ms/ps-rule/options
include:
module:
- PSRule.Rules.CAF
requires:
PSRule.Rules.CAF: '>=0.3.0'
output:
culture:
- en-US
configuration:
# Enable expansion for Bicep source files.
AZURE_BICEP_FILE_EXPANSION: true
# Enable expansion for template expansion.
AZURE_PARAMETER_FILE_EXPANSION: true
```
### Using locally
The following example shows how to setup PSRule locally to validate templates pre-flight.
1. Install the `PSRule.Rules.CAF` module and dependencies from the PowerShell Gallery.
2. Create and configure `ps-rule.yaml` in the repository root directory.
3. Run analysis against PSRule for Cloud Adoption Framework.
Example install command-line:
```powershell
# STEP 1: Install from the PowerShell Gallery
Install-Module -Name 'PSRule.Rules.CAF' -Scope CurrentUser -Repository PSGallery;
```
Example PSRule options:
```yaml
# Example: ps-rule.yaml
#
# PSRule configuration
#
# Please see the documentation for all configuration options:
# https://aka.ms/ps-rule/options
include:
module:
- PSRule.Rules.CAF
requires:
PSRule.Rules.CAF: '>=0.3.0'
output:
culture:
- en-US
configuration:
# Enable expansion for Bicep source files.
AZURE_BICEP_FILE_EXPANSION: true
# Enable expansion for template expansion.
AZURE_PARAMETER_FILE_EXPANSION: true
```
Example test command-line:
```powershell
# STEP 3: Test Azure Infrastructure as Code
Assert-PSRule -Module 'PSRule.Rules.CAF' -Format File -InputPath '.';
```
### Troubleshooting expansion
A number of issues can occur when expanding Azure templates or Bicep source files.
Or you may not get any results at all if expansion is not configured.
See the following topics:
- [Expanding source files - limitations](https://azure.github.io/PSRule.Rules.Azure/expanding-source-files/#limitations)
- [Using template](https://azure.github.io/PSRule.Rules.Azure/using-templates/)
- [Using Bicep source](https://azure.github.io/PSRule.Rules.Azure/using-bicep/)
### Export in-flight resource data
The following example shows how to setup PSRule locally to validate resources running in a subscription.
1. Install the `PSRule.Rules.CAF` module and dependencies from the PowerShell Gallery.
2. Connect and set context to an Azure subscription from PowerShell.
3. Export the resource data with the `Export-AzRuleData` cmdlet.
4. Run analysis against exported data.
For example:
```powershell
# STEP 1: Install PSRule.Rules.CAF from the PowerShell Gallery
Install-Module -Name 'PSRule.Rules.CAF' -Scope CurrentUser;
# STEP 2: Authenticate to Azure, only required if not currently connected
Connect-AzAccount;
# Confirm the current subscription context
Get-AzContext;
# STEP 3: Exports a resource graph stored as JSON for analysis
Export-AzRuleData -OutputPath 'out/templates/';
# STEP 4: Run analysis against exported data
Assert-PSRule -Module 'PSRule.Rules.CAF' -InputPath 'out/templates/';
```
## Rule reference
For a list of rules included in the `PSRule.Rules.CAF` module see:
- [Module rule reference](docs/rules/en/module.md)
Rules included in this module define a number of configurable values that can be set on an as need basis.
By default these values use the standards defined by the CAF.
A list of configurable values are included in the reference for each rule.
## Language reference
### Commands
This module uses commands from the `PSRule.Rules.Azure` module to export resource configuration data.
The `PSRule.Rules.Azure` module is included as a dependency of `PSRule.Rules.CAF`.
For details of `PSRule.Rules.Azure` commands see:
- [Export-AzRuleData](https://github.com/Microsoft/PSRule.Rules.Azure/blob/main/docs/commands/PSRule.Rules.Azure/en-US/Export-AzRuleData.md) - Export resource configuration data from Azure subscriptions.
- [Export-AzTemplateRuleData](https://github.com/Microsoft/PSRule.Rules.Azure/blob/main/docs/commands/PSRule.Rules.Azure/en-US/Export-AzTemplateRuleData.md) - Export resource configuration data from Azure templates.
## Changes and versioning
Modules in this repository will use the [semantic versioning](http://semver.org/) model to declare breaking changes from v1.0.0.
Prior to v1.0.0, breaking changes may be introduced in minor (0.x.0) version increments.
For a list of module changes please see the [change log](CHANGELOG.md).
> Pre-release module versions are created on major commits and can be installed from the PowerShell Gallery.
> Pre-release versions should be considered experimental.
> Modules and change log details for pre-releases will be removed as standard releases are made available.
## Contributing
This project welcomes contributions and suggestions.
If you are ready to contribute, please visit the [contribution guide](CONTRIBUTING.md).
## Code of Conduct
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
## Maintainers
- [Bernie White](https://github.com/BernieWhite)
## License
This project is [licensed under the MIT License](LICENSE).
[issue]: https://github.com/Microsoft/PSRule.Rules.CAF/issues
[discussion]: https://github.com/microsoft/PSRule.Rules.CAF/discussions
[install]: docs/install-instructions.md
[ci-badge]: https://dev.azure.com/bewhite/PSRule.Rules.CAF/_apis/build/status/PSRule.Rules.CAF-CI?branchName=main
[module]: https://www.powershellgallery.com/packages/PSRule.Rules.CAF
[engine]: https://github.com/Microsoft/PSRule
[chat]: https://gitter.im/PSRule/PSRule.Rules.CAF?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
[chat-badge]: https://img.shields.io/static/v1.svg?label=chat&message=on%20gitter&color=informational&logo=gitter
[create-workflow]: https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file
[extension]: https://marketplace.visualstudio.com/items?itemName=bewhite.ps-rule