PureBasic AWS IAM: List Policies

Back to Index

Lists all the managed policies that are available in your AWS account, including your own customer-defined managed policies and all AWS managed policies.

Documentation: https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicies.html

CURL Command

curl -X GET https://iam.amazonaws.com/ \
  -d "Action=ListPolicies" \
  -d "Version=2010-05-08"

PureBasic Example

IncludeFile "CkStringBuilder.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkXml.pb"
IncludeFile "CkAuthAws.pb"

Procedure ChilkatExample()

    rest.i = CkRest::ckCreate()
    If rest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success.i

    authAws.i = CkAuthAws::ckCreate()
    If authAws.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkAuthAws::setCkAccessKey(authAws, "AWS_ACCESS_KEY")
    CkAuthAws::setCkSecretKey(authAws, "AWS_SECRET_KEY")
    CkAuthAws::setCkRegion(authAws, "us-east-1")
    CkAuthAws::setCkServiceName(authAws, "iam")
    CkRest::ckSetAuthAws(rest,authAws)

    ;  URL: https://iam.amazonaws.com/
    bTls.i = 1
    port.i = 443
    bAutoReconnect.i = 1
    success = CkRest::ckConnect(rest,"iam.amazonaws.com",port,bTls,bAutoReconnect)
    If success <> 1
        Debug "ConnectFailReason: " + Str(CkRest::ckConnectFailReason(rest))
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        ProcedureReturn
    EndIf

    CkRest::ckAddQueryParam(rest,"Action","ListPolicies")
    CkRest::ckAddQueryParam(rest,"Version","2010-05-08")

    sbResponseBody.i = CkStringBuilder::ckCreate()
    If sbResponseBody.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkRest::ckFullRequestNoBodySb(rest,"GET","/",sbResponseBody)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkStringBuilder::ckDispose(sbResponseBody)
        ProcedureReturn
    EndIf

    respStatusCode.i = CkRest::ckResponseStatusCode(rest)
    If respStatusCode >= 400
        Debug "Response Status Code = " + Str(respStatusCode)
        Debug "Response Header:"
        Debug CkRest::ckResponseHeader(rest)
        Debug "Response Body:"
        Debug CkStringBuilder::ckGetAsString(sbResponseBody)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkStringBuilder::ckDispose(sbResponseBody)
        ProcedureReturn
    EndIf

    xmlResponse.i = CkXml::ckCreate()
    If xmlResponse.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkXml::ckLoadSb(xmlResponse,sbResponseBody,1)

    ListPoliciesResponse_xmlns.s
    tagPath.s
    IsTruncated.s
    Marker.s
    i.i
    count_i.i
    PolicyName.s
    DefaultVersionId.s
    PolicyId.s
    Path.s
    Arn.s
    AttachmentCount.i
    CreateDate.s
    UpdateDate.s
    RequestId.s

    ListPoliciesResponse_xmlns = CkXml::ckGetAttrValue(xmlResponse,"xmlns")
    IsTruncated = CkXml::ckGetChildContent(xmlResponse,"ListPoliciesResult|IsTruncated")
    Marker = CkXml::ckGetChildContent(xmlResponse,"ListPoliciesResult|Marker")
    i = 0
    count_i = CkXml::ckNumChildrenHavingTag(xmlResponse,"ListPoliciesResult|Policies|member")
    While i < count_i
        CkXml::setCkI(xmlResponse, i)
        PolicyName = CkXml::ckGetChildContent(xmlResponse,"ListPoliciesResult|Policies|member[i]|PolicyName")
        DefaultVersionId = CkXml::ckGetChildContent(xmlResponse,"ListPoliciesResult|Policies|member[i]|DefaultVersionId")
        PolicyId = CkXml::ckGetChildContent(xmlResponse,"ListPoliciesResult|Policies|member[i]|PolicyId")
        Path = CkXml::ckGetChildContent(xmlResponse,"ListPoliciesResult|Policies|member[i]|Path")
        Arn = CkXml::ckGetChildContent(xmlResponse,"ListPoliciesResult|Policies|member[i]|Arn")
        AttachmentCount = CkXml::ckGetChildIntValue(xmlResponse,"ListPoliciesResult|Policies|member[i]|AttachmentCount")
        CreateDate = CkXml::ckGetChildContent(xmlResponse,"ListPoliciesResult|Policies|member[i]|CreateDate")
        UpdateDate = CkXml::ckGetChildContent(xmlResponse,"ListPoliciesResult|Policies|member[i]|UpdateDate")
        i = i + 1
    Wend
    RequestId = CkXml::ckGetChildContent(xmlResponse,"ResponseMetadata|RequestId")


    CkRest::ckDispose(rest)
    CkAuthAws::ckDispose(authAws)
    CkStringBuilder::ckDispose(sbResponseBody)
    CkXml::ckDispose(xmlResponse)


    ProcedureReturn
EndProcedure

Sample XML Response Body

<?xml version="1.0" encoding="utf-8" ?>
<ListPoliciesResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
    <ListPoliciesResult>
        <IsTruncated>true</IsTruncated>
        <Marker>EXAMPLEkakv9BCuUNFDtxWSyfzetYwEx2ADc8dnzfvERF5S6YMvXKx41t6gCl/eeaCX3Jo94/bKqezEAg8TEVS
    99EKFLxm3jtbpl25FDWEXAMPLE</Marker>
        <Policies>
            <member>
                <PolicyName>ExamplePolicy</PolicyName>
                <DefaultVersionId>v1</DefaultVersionId>
                <PolicyId>AGPACKCEVSQ6C2EXAMPLE</PolicyId>
                <Path>/</Path>
                <Arn>arn:aws:iam::123456789012:policy/ExamplePolicy</Arn>
                <AttachmentCount>2</AttachmentCount>
                <CreateDate>2014-09-15T17:36:14Z</CreateDate>
                <UpdateDate>2014-09-15T20:31:47Z</UpdateDate>
            </member>
            <member>
                <PolicyName>PowerUserAccess</PolicyName>
                <DefaultVersionId>v1</DefaultVersionId>
                <PolicyId>AGPACKCEVSQ6C2EXAMPLE</PolicyId>
                <Path>/</Path>
                <Arn>arn:aws:iam::aws:policy/PowerUserAccess</Arn>
                <AttachmentCount>0</AttachmentCount>
                <CreateDate>2014-08-21T20:25:01Z</CreateDate>
                <UpdateDate>2014-08-21T20:25:01Z</UpdateDate>
            </member>
            <member>
                <PolicyName>AdministratorAccess</PolicyName>
                <DefaultVersionId>v1</DefaultVersionId>
                <PolicyId>AGPACKCEVSQ6C2EXAMPLE</PolicyId>
                <Path>/</Path>
                <Arn>arn:aws:iam::aws:policy/AdministratorAccess</Arn>
                <AttachmentCount>1</AttachmentCount>
                <CreateDate>2014-08-21T20:11:25Z</CreateDate>
                <UpdateDate>2014-08-21T20:11:25Z</UpdateDate>
            </member>
            <member>
                <PolicyName>ReadOnlyAccess</PolicyName>
                <DefaultVersionId>v1</DefaultVersionId>
                <PolicyId>AGPACKCEVSQ6C2EXAMPLE</PolicyId>
                <Path>/</Path>
                <Arn>arn:aws:iam::aws:policy/ReadOnlyAccess</Arn>
                <AttachmentCount>6</AttachmentCount>
                <CreateDate>2014-08-21T20:31:44Z</CreateDate>
                <UpdateDate>2014-08-21T20:31:44Z</UpdateDate>
            </member>
        </Policies>
    </ListPoliciesResult>
    <ResponseMetadata>
        <RequestId>6207e832-3eb7-11e4-9d0d-6f969EXAMPLE</RequestId>
    </ResponseMetadata>
</ListPoliciesResponse>