如何通过boto获取IAM Policy Document
How to get IAM Policy Document via boto
我正在尝试通过 boto 获取 aws IAM 策略的详细信息,以便能够通过脚本备份或复制 IAM 策略。
我搜索了 boto 2 和 3 的文档,但没有找到任何获取已配置策略的 json 数据的可能性。
我(成功)做了什么:
- 已通过 IAM 管理控制台创建策略
- 分配给角色
- 用于通过 boto 创建 ec2 实例
但我无法找到一种方法来检索关联的 JSON 数据(管理控制台中的 'Policy Document')以在 boto 中获取它。
我对 boto 的尝试:
import boto.iam
REGION_NAME = 'eu-west-1'
iam_conn = boto.iam.connect_to_region(REGION_NAME)
arn = 'arn:myproperlyformattedarn'
p = iam_conn.get_policy(arn)
print p
结果:
{
"get_policy_response": {
"response_metadata": {
"request_id": "XXXXX-XXXX-XXXX-XXXX-XXXX"
},
"get_policy_result": {
"policy": {
"update_date": "2016-04-15T12:51:21Z",
"create_date": "2016-04-15T12:51:21Z",
"is_attachable": "true",
"policy_name": "My_Policy_Name",
"default_version_id": "v1",
"attachment_count": "1",
"path": "/",
"arn": "arn:aws:iam::123456789:policy/VerticaTest_GetConfigsFromS3",
"policy_id": "XXXSOMELONGSTRINGXXXX"
}
}
}
}
我所追求的是这样的(管理控制台中的政策文件):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::mybucketname",
"arn:aws:s3:::mybucketname/*"
]
}
]
}
我想你可以使用以下方法:
get_policy(policy_arn)
Get policy information.
Parameters: policy_arn (string) – The ARN of the policy to get information for
get_policy_version(policy_arn, version_id)¶
Get policy information.
Parameters:
policy_arn (string) – The ARN of the policy to get information for a specific version
version_id (string) – The id of the version to get information for
请切换到 boto3,因为它有更好的支持和文档。
正如在 boto3 文档中,get_policy() 不会给你 policydocument.
我能得到的最好的是get_account_authorization_details()
我在 cli 下快速检查了一下,只需将所有命令替换为 boto3 就可以了。
aws iam get-account-authorization-details --filter 'LocalManagedPolicy'
请移至boto3。
从策略方面解决这个问题:识别策略 ARN,使用 ARN 识别策略 DefaultVersionId,使用 ARN 和 DefaultVersionId 检索 PolicyDocument。
import boto3
import json
arn = 'arn:aws:iam::aws:policy/AdministratorAccess'
iam = boto3.client('iam')
policy = iam.get_policy(
PolicyArn = arn
)
policy_version = iam.get_policy_version(
PolicyArn = arn,
VersionId = policy['Policy']['DefaultVersionId']
)
print(json.dumps(policy_version['PolicyVersion']['Document']))
print(json.dumps(policy_version['PolicyVersion']['Document']['Statement']))
运行 此代码并将输出通过管道传输到 "jq .",您将获得以下输出:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "*",
"Resource": "*",
"Effect": "Allow"
}
]
}
[
{
"Action": "*",
"Resource": "*",
"Effect": "Allow"
}
]
您在问题中特别要求了行动/声明。我打印了 'Document' 和 'Statement' 属性以显示差异。
http://boto3.readthedocs.io/en/latest/reference/services/iam.html#IAM.Client.get_policy
http://boto3.readthedocs.io/en/latest/reference/services/iam.html#IAM.Client.get_policy_version
我正在尝试通过 boto 获取 aws IAM 策略的详细信息,以便能够通过脚本备份或复制 IAM 策略。 我搜索了 boto 2 和 3 的文档,但没有找到任何获取已配置策略的 json 数据的可能性。
我(成功)做了什么:
- 已通过 IAM 管理控制台创建策略
- 分配给角色
- 用于通过 boto 创建 ec2 实例
但我无法找到一种方法来检索关联的 JSON 数据(管理控制台中的 'Policy Document')以在 boto 中获取它。
我对 boto 的尝试:
import boto.iam
REGION_NAME = 'eu-west-1'
iam_conn = boto.iam.connect_to_region(REGION_NAME)
arn = 'arn:myproperlyformattedarn'
p = iam_conn.get_policy(arn)
print p
结果:
{
"get_policy_response": {
"response_metadata": {
"request_id": "XXXXX-XXXX-XXXX-XXXX-XXXX"
},
"get_policy_result": {
"policy": {
"update_date": "2016-04-15T12:51:21Z",
"create_date": "2016-04-15T12:51:21Z",
"is_attachable": "true",
"policy_name": "My_Policy_Name",
"default_version_id": "v1",
"attachment_count": "1",
"path": "/",
"arn": "arn:aws:iam::123456789:policy/VerticaTest_GetConfigsFromS3",
"policy_id": "XXXSOMELONGSTRINGXXXX"
}
}
}
}
我所追求的是这样的(管理控制台中的政策文件):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::mybucketname",
"arn:aws:s3:::mybucketname/*"
]
}
]
}
我想你可以使用以下方法:
get_policy(policy_arn)
Get policy information.
Parameters: policy_arn (string) – The ARN of the policy to get information for
get_policy_version(policy_arn, version_id)¶
Get policy information.
Parameters:
policy_arn (string) – The ARN of the policy to get information for a specific version
version_id (string) – The id of the version to get information for
请切换到 boto3,因为它有更好的支持和文档。 正如在 boto3 文档中,get_policy() 不会给你 policydocument.
我能得到的最好的是get_account_authorization_details()
我在 cli 下快速检查了一下,只需将所有命令替换为 boto3 就可以了。
aws iam get-account-authorization-details --filter 'LocalManagedPolicy'
请移至boto3。
从策略方面解决这个问题:识别策略 ARN,使用 ARN 识别策略 DefaultVersionId,使用 ARN 和 DefaultVersionId 检索 PolicyDocument。
import boto3
import json
arn = 'arn:aws:iam::aws:policy/AdministratorAccess'
iam = boto3.client('iam')
policy = iam.get_policy(
PolicyArn = arn
)
policy_version = iam.get_policy_version(
PolicyArn = arn,
VersionId = policy['Policy']['DefaultVersionId']
)
print(json.dumps(policy_version['PolicyVersion']['Document']))
print(json.dumps(policy_version['PolicyVersion']['Document']['Statement']))
运行 此代码并将输出通过管道传输到 "jq .",您将获得以下输出:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "*",
"Resource": "*",
"Effect": "Allow"
}
]
}
[
{
"Action": "*",
"Resource": "*",
"Effect": "Allow"
}
]
您在问题中特别要求了行动/声明。我打印了 'Document' 和 'Statement' 属性以显示差异。
http://boto3.readthedocs.io/en/latest/reference/services/iam.html#IAM.Client.get_policy http://boto3.readthedocs.io/en/latest/reference/services/iam.html#IAM.Client.get_policy_version