我正在执行IAM政策
examples
对于AWS Go SDK,尝试执行与
Create Policy
示例——基本上,获取帐户中的所有IAM策略,获取默认策略版本,然后将json文档解组到结构中,以便轻松解析。
我已经完成了这一步,但我一直在研究go如何处理条件结构类型。在AWS策略文档版本响应中
StatementEntry
可以是
string
或
[]string
取决于文件。
最佳做法是什么?是否在错误处理中添加另一个结构并使用重试逻辑?
package main
import (
"encoding/json"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/iam"
"log"
"net/url"
)
type PolicyDocument struct {
Version string
Statement []StatementEntry
}
type StatementEntry struct {
Effect string
Action []string
Resource []string
}
func main() {
sess, _ := session.NewSession(&aws.Config{
Region: aws.String("us-west-2")},
)
svc := iam.New(sess)
fmt.Printf("%s - %s\n", arn, *result.Policy.Description)
results, _ := svc.ListPolicies(&iam.ListPoliciesInput{})
for _, policy := range results.Policies {
arn := policy.Arn
version := policy.DefaultVersionId
pv, _ := svc.GetPolicyVersion(&iam.GetPolicyVersionInput{
PolicyArn: arn,
VersionId: version,
})
decodedValue, err := url.QueryUnescape(aws.StringValue(pv.PolicyVersion.Document))
if err != nil {
log.Fatal(err)
return
}
//fmt.Println(decodedValue)
data := []byte(decodedValue)
var doc PolicyDocument
err1 := json.Unmarshal(data, &doc)
if err1 != nil {
log.Fatal(err1)
}
fmt.Printf("\n----\n%v\n---\n", doc)
}
}
实例
PolicyDocuments
这是:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ssm:PutParameter",
"ssm:DeleteParameter",
"ssm:DescribeInstancePatchStates",
"elasticloadbalancing:RegisterTargets",
"elasticloadbalancing:DescribeTargetHealth",
"elasticloadbalancing:DescribeTargetGroups",
"elasticloadbalancing:DeregisterTargets",
"ssm:GetParameter"
],
"Resource": "*"
}
]
}
还有这个
Resource []string
在
语句条目
):
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::SageMaker"
]
},
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::SageMaker/*"
]
}
]
}