aws-sdk-ruby v3 没有以正确的 json 格式提供 iam 策略
aws-sdk-ruby v3 not giving the iam policy in proper json format
我想使用 aws-sdk 和 ruby 检索与 iam 角色和策略关联的策略文档。使用 aws cli,我得到了正确的输出,但使用 aws sdk 和 ruby 得到加密 json 输出。
aws iam get-role-policy --role-name=ddp-lambda-s3-ec2 --policy-name=ddp-assumerole-solutionsdev-talos
require 'aws-sdk'
role_name = "ddp-lambda-s3-ec2"
iamclient = Aws::IAM::Client.new()
resp = iamclient.get_role_policy({
role_name: role_name, # required
policy_name: "ddp-assumerole-solutionsdev-talos", # required
})
puts resp.policy_document
使用 aws cli 获得正确的输出:
$ aws iam get-role-policy --role-name=ddp-lambda-s3-ec2 --policy-name=ddp-assumerole-solutionsdev-talos
{
"RoleName": "ddp-lambda-s3-ec2",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": {
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::443233333122:role/ddp_talos_role",
"Effect": "Allow"
}
},
"PolicyName": "ddp-assumerole-solutionsdev-talos"
}
但是当我 运行 以上代码时,我得到以下输出:
$ ruby iam.rb
%7B%0D%0A%20%20%20%20%22Version%22%3A%20%222012-10-17%22%2C%0D%0A%20%20%20%20%22Statement%22%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20%22Effect%22%3A%20%22Allow%22%2C%0D%0A%20%20%20%20%20%20%20%20%22Action%22%3A%20%22sts%3AAssumeRole%22%2C%0D%0A%20%20%20%20%20%20%20%20%22Resource%22%3A%20%22arn%3Aaws%3Aiam%3A%3A443299236587%3Arole%2Fddp_talos_role%22%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A
阅读 API 文档总是有用的,尤其是当它没有失败但 returns 出现意外情况时。你看到了吗?
...Policies returned by this API are URL-encoded compliant with RFC 3986. You can use a URL decoding method to convert the policy back to plain JSON text... (source)
URI.decode
你的结果给出了你正在寻找的正确 JSON...
我想使用 aws-sdk 和 ruby 检索与 iam 角色和策略关联的策略文档。使用 aws cli,我得到了正确的输出,但使用 aws sdk 和 ruby 得到加密 json 输出。
aws iam get-role-policy --role-name=ddp-lambda-s3-ec2 --policy-name=ddp-assumerole-solutionsdev-talos
require 'aws-sdk'
role_name = "ddp-lambda-s3-ec2"
iamclient = Aws::IAM::Client.new()
resp = iamclient.get_role_policy({
role_name: role_name, # required
policy_name: "ddp-assumerole-solutionsdev-talos", # required
})
puts resp.policy_document
使用 aws cli 获得正确的输出:
$ aws iam get-role-policy --role-name=ddp-lambda-s3-ec2 --policy-name=ddp-assumerole-solutionsdev-talos
{
"RoleName": "ddp-lambda-s3-ec2",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": {
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::443233333122:role/ddp_talos_role",
"Effect": "Allow"
}
},
"PolicyName": "ddp-assumerole-solutionsdev-talos"
}
但是当我 运行 以上代码时,我得到以下输出:
$ ruby iam.rb
%7B%0D%0A%20%20%20%20%22Version%22%3A%20%222012-10-17%22%2C%0D%0A%20%20%20%20%22Statement%22%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20%22Effect%22%3A%20%22Allow%22%2C%0D%0A%20%20%20%20%20%20%20%20%22Action%22%3A%20%22sts%3AAssumeRole%22%2C%0D%0A%20%20%20%20%20%20%20%20%22Resource%22%3A%20%22arn%3Aaws%3Aiam%3A%3A443299236587%3Arole%2Fddp_talos_role%22%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A
阅读 API 文档总是有用的,尤其是当它没有失败但 returns 出现意外情况时。你看到了吗?
...Policies returned by this API are URL-encoded compliant with RFC 3986. You can use a URL decoding method to convert the policy back to plain JSON text... (source)
URI.decode
你的结果给出了你正在寻找的正确 JSON...