Amazon web services 对CloudWatch计费指标的只读AWS CLI访问
我需要向某人提供只读AWS CLI访问我们的CloudWatch计费度量。我不知道该怎么做,因为CloudWatch没有任何可以控制访问的特定资源。这意味着IAM策略中没有需要指定的ARN,因此,策略中的任何资源指定都是“*”。可以找到有关CloudWatch ARN限制的更多信息。我研究了如何使用“aws门户”,但我相信“aws门户”名称空间是用于控制台的。任何方向或想法都非常感谢 在当前的CloudWatch ARN限制下,IAM策略看起来是这样的Amazon web services 对CloudWatch计费指标的只读AWS CLI访问,amazon-web-services,amazon-iam,amazon-cloudwatch-metrics,Amazon Web Services,Amazon Iam,Amazon Cloudwatch Metrics,我需要向某人提供只读AWS CLI访问我们的CloudWatch计费度量。我不知道该怎么做,因为CloudWatch没有任何可以控制访问的特定资源。这意味着IAM策略中没有需要指定的ARN,因此,策略中的任何资源指定都是“*”。可以找到有关CloudWatch ARN限制的更多信息。我研究了如何使用“aws门户”,但我相信“aws门户”名称空间是用于控制台的。任何方向或想法都非常感谢 在当前的CloudWatch ARN限制下,IAM策略看起来是这样的 { "Version": "2012-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"cloudwatch:DescribeMetricData",
"cloudwatch:GetMetricData"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
正如您所说,您将无法在CloudWatch中实现这一点。根据报告: CloudWatch没有任何特定资源可供您控制对。。。例如,您不能仅为特定的一组EC2实例或特定的负载平衡器授予用户对CloudWatch数据的访问权限。使用IAM授予的权限涵盖您使用或使用CloudWatch监视的所有云资源 另一种选择可能是:
import boto3
from datetime import datetime, timedelta
def lambda_handler(event, context):
try:
bucket_name = "so-billing-metrics"
filename = '-'.join(['billing', datetime.now().strftime("%Y-%m-%d-%H")])
region_name = "us-east-1"
dimensions = {'Name': 'Currency', 'Value':'USD'}
metric_name = 'EstimatedCharges'
namespace = 'AWS/Billing'
start_time = datetime.now() - timedelta(hours = 1)
end_time = datetime.now()
# Create CloudWatch client
cloudwatch = boto3.client('cloudwatch', region_name=region_name)
# Get billing metrics for the last hour
metrics = cloudwatch.get_metric_statistics(
Dimensions=[dimensions],
MetricName=metric_name,
Namespace=namespace,
StartTime=start_time,
EndTime=end_time,
Period=60,
Statistics=['Sum'])
# Save data to temp file
with open('/tmp/billingmetrics', 'wb') as f:
# Write header and data
f.write("Timestamp, Cost")
for entry in metrics['Datapoints']:
f.write(",".join([entry['Timestamp'].strftime('%Y-%m-%d %H:%M:%S'), str(entry['Sum']), entry['Unit']]))
# Upload temp file to S3
s3 = boto3.client('s3')
with open('/tmp/billingmetrics', 'rb') as data:
s3.upload_fileobj(data, bucket_name, filename)
except Exception as e:
print str(e)
return 0
return 1
注意:您需要确保Lambda函数具有写入S3和从cloudwatch读取的相关权限