AWS
我们与 AWS 的集成可根据您的配置将 AWS 资源导出到 Port。 您可以将集成定义为按计划运行和按事件运行。
我们与 AWS 的集成支持实时事件处理,因此可以在 Port 内部准确、实时地呈现 AWS 基础设施。
💡 AWS 输出程序常见用例
例如,我们的 AWS 导出器可让您利用 AWS 账户中的数据轻松丰富软件目录:
- 映射账户中的资源,包括 S3数据桶、lambda函数、SQS队列、RDS DB实例、ECS服务和许多其他资源类型。
- 被用于关系可在 Port 内创建完整、易懂的 AWS 账户地图。
工作原理
Port 的 AWS 输出程序可以检索AWS Cloud Control API 支持的所有资源。
开源 AWS 导出器允许您将 AWS 中的数据提取、转换、加载(ETL)到所需的软件目录数据模型中。
出口程序是使用安装在账户上的AWS serverless application 部署的。
The serverless application 需要一个JSON configuration file 来描述将数据加载到开发者门户的 ETL 流程,还需要一个具有必要权限的IAM policy 来列出和读取配置的资源。
导出器利用JQ JSON processor 对 AWS 对象中的现有字段和值进行选择、修改、连接、转换和其他操作。
导出器 config.json
文件
通过 config.json
文件,您可以指定要从 AWS 账户导出的确切资源,以及要在 Port 中填写数据的实体和属性。
下面是config.json
文件的示例片段,演示了将`lambda 函数'数据从账户导入软件目录的 ETL 过程:
{
"resources": [
{
"kind": "AWS::Lambda::Function",
"selector": {
"aws": {
"regions": ["us-east-1", "us-west-1"]
}
},
"port": {
"entity": {
"mappings": [
{
"identifier": ".FunctionName",
"title": ".FunctionName",
"blueprint": "function",
"properties": {
"memory": ".MemorySize",
"timeout": ".Timeout",
"runtime": ".Runtime"
}
}
]
}
}
}
]
}
结构
-
config.json "文件的根键是 "resources "键;
-
kind "键是 AWS 云控制 API 中资源类型的指定符,遵循 "service-providers::service-name::data-type-name "格式:
"resources": [
{
"kind": "AWS::Lambda::Function",
...
::tip 要使用 AWS CLI 生成受支持的资源类型列表,请结合以下命令的结果:
aws cloudformation list-types --type RESOURCE --visibility PUBLIC --provisioning-type FULLY_MUTABLE
aws cloudformation list-types --type RESOURCE --visibility PUBLIC --provisioning-type IMMUTABLE
aws cloudformation list-types --type RESOURCE --visibility PRIVATE --provisioning-type FULLY_MUTABLE
aws cloudformation list-types --type RESOURCE --visibility PRIVATE --provisioning-type IMMUTABLE
要确定是否支持特定的 <RESOURCE_TYPE>
,请使用此命令(需要 JQ,输出为 true
或 false
):
aws cloudformation describe-type --type RESOURCE --type-name <RESOURCE_TYPE> --query "ProvisioningType" | jq -c '. == "FULLY_MUTABLE" or . == "IMMUTABLE"'
更多信息,请阅读here :
-
selector "键可以让你准确地筛选出指定 "类型 "中的哪些对象将被收录到软件目录中;
-
选择器 "中的 "查询 "键是一个 JQ 布尔值查询。如果对某个对象的评估值为 false,则不会同步该对象;
-
选择器 "中的 "aws "键允许你指定要同步的 "区域 "列表。
"resources": [
{
"kind": "AWS::Lambda::Function",
"selector": {
"query": "true",
"aws": {
"regions": [
"us-east-1",
"us-west-1"
]
}
},
"port":
...
一些被用于的示例:
-
要同步默认区域中指定 "类型 "的所有对象,请勿指定 "选择器";
-
同步不属于 AWS Amplify 服务的所有 lambdas:
query: .FunctionName | startswith("amplify") | not
-
等等
信息
-
对于某些资源,您必须提供额外的信息。例如,为了同步特定负载平衡器的所有
AWS ELB 监听器
,请使用regions_config
和resources_models
键:"selector": {
"aws": {
"regions": [
"eu-west-1"
],
"regions_config": {
"eu-west-1": {
"resources_models": [
"{\"LoadBalancerArn\": \"<AWS_ELB_ARN>\"}"
]
}
}
}
}
带有所需属性的特殊资源表可在here 上找到:
-
Port"、"实体 "和 "映射 "键打开了用于将 AWS 资源字段映射到Port实体的部分,"映射 "键是一个数组,其中每个对象都与entity 的结构相匹配。
-
除了
blueprint
必须是静态字符串外,每个映射值都是 JQ 查询。 -
映射中的 "itemsToParse "键使从单个 AWS 资源创建多个实体成为可能。
- 任何 JQ 表达式都可以在这里被用于,只要它的 evaluated 值是一个项目数组。
- 项目 "将作为一个键添加到 JQ 上下文中,该键包含对 "itemsToParse "中指定的数组中的项目的引用。对于对象数组,可以使用
.item.KEY_NAME
语法访问对象中的键。
"resources": [
{
"kind": "AWS::Lambda::Function",
"selector": {
"aws": {
"regions": [
"us-east-1",
"us-west-1"
]
}
},
"port": {
"entity": {
"mappings": [
{
"identifier": ".FunctionName",
"title": ".FunctionName",
"blueprint": "function",
"properties": {
"memory": ".MemorySize",
"timeout": ".Timeout",
"runtime": ".Runtime"
}
},
{
"itemsToParse": ".Layers",
"identifier": ".item",
"title": ".item",
"blueprint": "functionLayer",
"properties": {}
}
]
}
}
}
...
- 当资源之间存在关系时,资源的顺序很重要。
AWS 输出程序将按照
config.json
中的顺序同步资源,因此请确保按照逻辑顺序对资源进行排序。 例如,如果您有从 SNS Topic 到 lambda 函数的关系,请将 Lambda 函数配置放在前面。 - 从本质上讲,AWS 输出程序将保持未映射属性的值不变。有关不同实体创建策略的进一步解释,请访问here 。
更改配置
默认情况下,出口程序会在安装时将预先配置好的 config.json
文件保存到AWS S3 Bucket
。S3 存储桶名为 port-aws-exporter-<AWS_REGION>-<AWS_ACCOUNT_ID>
,由出口程序创建。
更改配置(例如更改某个属性的映射):
- 从数据桶中创建一个
config.json
文件副本,进行所需的更改,并将其保存到本地。 - 使用 AWS CLI 将文件上传到数据桶,替换现有文件。
用您的 Values 替换<BUCKET_NAME>
和<PATH_TO_CONFIG_FILE>
,然后运行以下命令:
aws s3api put-object --bucket "<BUCKET_NAME>" --key "config.json" --body "<PATH_TO_CONFIG_FILE>"
IAM 政策
AWS 导出器使用AWS IAM Policy
,其中指定了要导出的 AWS 资源(在config.json
中配置的资源)的 list
和 read
权限 。
例如,要导出 "lambda 函数",需要创建一个定义如下的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"lambda:GetFunction",
"lambda:GetFunctionCodeSigningConfig",
"lambda:ListFunctions"
],
"Resource": "*"
}
]
}
处理程序
的权限。使用以下命令获取特定 <RESOURCE_TYPE>
的资源操作(需要 AWS CLI 和 JQ):
aws cloudformation describe-type --type RESOURCE --type-name <RESOURCE_TYPE> --query "Schema" | jq -c 'fromjson | .handlers | with_entries(select([.key] | inside(["list", "read"]))) | map(.permissions) | flatten'
更多详细信息,请访问here 。
Port证书secret
为了管理 Port 中的实体,出口程序需要访问您的 Port 凭据,这些凭据通过AWS Secrets Manager
secret 提供给出口程序。
secret值应采用以下格式:
{ "id": "<CLIENT_ID>", "clientSecret": "<CLIENT_SECRET>" }
与邮政信箱类似,您可以创建和管理自己的secret,也可以委托出口商管理。 无论哪种方式,您都需要在secret准备就绪后,自行将 Port 的凭据添加到secret中。
导出器 AWS 无服务器应用程序
出口商 AWS 无服务器应用程序 "是您安装出口商CloudFormation stack 的方式。
堆栈由几个部分组成:
- S3 bucket - 应保存
config.json
的位置; - ASM secret - 应保存 Port 凭据(客户 ID 和 secret)的位置 ,以便输出程序与 Port 的 API 交互;
- Lambda function - 您可以调用以运行输出程序代码的资源。IAM policy 连接到 Lambda 函数的执行角色;
- SQS queue - 事件队列,供输出程序使用。请阅读here ,了解如何使用导出器消费来自不同 AWS 服务的实时事件并对其采取行动;
- EventsBridge scheduled rule - 按计划运行输出程序的规则。
开始
继续访问Installation 部分,在您的 Port 环境中设置 AWS 输出程序。