Perfiles de confianza para usuarios y cargas de trabajo federados

Conceder acceso sin gestionar credenciales. Utilice perfiles de confianza para usuarios federados con atributos SAML o identidades de carga de trabajo en recursos informáticos.

Puede utilizar perfiles de confianza para conceder a diferentes identidades de IBM Cloud® acceso a los recursos de su cuenta. Otorgue automáticamente a los usuarios federados acceso a su cuenta con condiciones basadas en atributos SAML desde su directorio corporativo. O bien, utilice perfiles de confianza para establecer una autorización detallada para las aplicaciones que se ejecutan en recursos informáticos. De este modo, no es necesario crear ID de servicio o claves de API para los recursos de cálculo. También puede establecer confianza con servicios de IBM Cloud o ID de servicio en otra cuenta para conceder acceso entre cuentas.

No es necesario que un usuario sea miembro de la cuenta para asumir un perfil de confianza. Un usuario puede utilizar el perfil si el proveedor de identidad del usuario ( IdP ) coincide con un IdP utilizado en las condiciones de confianza.

Al crear inicialmente un perfil de confianza, puede crear condiciones de confianza con los siguientes tipos de entidades: usuarios federados, recursos informáticos, ID de servicio o servicios de IBM Cloud. Una vez creado el perfil de confianza, puede añadir más condiciones para combinar varios tipos de entidades en el mismo perfil.

Puede utilizar Activity Tracker para supervisar qué recursos informáticos de usuarios federados, ID de servicio y servicios de IBM Cloud aplican un perfil de confianza. Para obtener más información, consulte Supervisión de sesiones de inicio de sesión para perfiles de confianza.

Antes de empezar

Si tiene el acceso siguiente, puede crear perfiles de confianza:

  • Propietario de la cuenta
  • Rol de administrador sobre todos los servicios de gestión de cuentas
  • Rol de administrador sobre el servicio de identidad de IAM. Para obtener más información, consulte Servicio de identidad IAM.

Establecer la confianza con los usuarios federados en la consola

Siga estos pasos para definir qué usuarios federados pueden acceder a recursos específicos:

  1. Habilite la autenticación de un proveedor de identidad externo.

  2. En la consola de IBM Cloud, pulse Gestionar > Acceso (IAM) y seleccione Perfiles de confianza.

  3. Pulse Crear.

  4. Describa su perfil proporcionando un nombre, un correo electrónico y una descripción, y haga clic en Continuar.

    En el correo electrónico, puede añadir un ID de correo electrónico personal o una lista de distribución.

    En la descripción, proporcione una lista de acciones disponibles para este perfil de confianza.

  5. Puede crear el perfil de confianza antes de añadir detalles seleccionando Decidir más tarde. O bien, establezca la confianza completando los siguientes pasos:

    1. Seleccione Usuarios federados como un tipo de entidad de confianza en la lista.

    2. Seleccione Usuarios federados por IBMid o **Usuarios federados por IBM Cloud App ID como método de autenticación e introduzca el proveedor de identidad predeterminado (**IdP ) que activó en el paso 1.

      Si los usuarios para los que está creando un perfil de confianza utilizan IBM Cloud App ID, cree el perfil de confianza como un usuario de App ID y de igual modo para IBMid. De este modo, sus propios atributos SAML le pueden dar una idea de cómo estructurar las condiciones de perfil de confianza. Otros usuarios con el mismo IdP pueden tener atributos SAML diferentes. Utilice sus propios atributos solo como sugerencia. Para utilizar atributos en una reclamación que son diferentes a los suyos, introdúzcalos manualmente. {: tip}

      1. Seleccione Usuarios federados por IBMid, Usuarios federados por IBM Cloud App ID, o **Usuarios federados por IBM Cloud SAML como método de autenticación e introduzca el proveedor de identidad predeterminado (**IdP ) que activó en el paso 1.
    3. Añada condiciones basadas en los datos de IdP para definir cómo y cuándo pueden aplicar el perfil los usuarios federados.

      • Si pulsa Añadir una condición, puede definir varias condiciones. Los usuarios federados deben cumplir todas las condiciones que se incluyen en el perfil de confianza. Para obtener más información sobre los campos que se utilizan para crear condiciones, consulte Propiedades de condición IAM.
      • Pulse Ver datos del proveedor de identidades (IdP) para buscar nombres y valores de atributos en sus propios datos personales del IdP. Para obtener más información, consulte Utilización de datos de IdP para crear perfiles de confianza.
    4. Defina la duración de la sesión durante cuánto tiempo un usuario puede aplicar el perfil antes de que se deba volver a autenticar.

  6. Pulse Continuar.

  7. (Opcional) Asigne acceso al perfil de confianza.

  8. O bien, haga clic en Crear sin asignar ningún acceso.

Para obtener más información sobre los campos que se utilizan para crear condiciones para perfiles de confianza, consulte Propiedades de condición IAM.

Establecer la confianza con los recursos informáticos en la consola

Siga estos pasos para configurar un mejor control sobre cómo otorgar acceso a los recursos de cálculo.

IBM Cloud Kubernetes Service solo da soporte a los perfiles de confianza de las versiones 1.21 y posteriores. Los clústeres de IBM Cloud Kubernetes Service gratuitos solo crean versiones anteriores. Tiene la opción de crear clústeres con una versión anterior con el plan estándar; por lo tanto, asegúrese de seleccionar la versión 1.21 o posterior.

  1. En la consola de IBM Cloud, pulse Gestionar > Acceso (IAM) y seleccione Perfiles de confianza.

  2. Pulse Crear perfil.

  3. Describa el perfil proporcionando un nombre y una descripción y, a continuación, pulse Continuar.

  4. Puede crear el perfil de confianza antes de añadir detalles seleccionando Decidir más tarde. O bien, establezca la confianza completando los siguientes pasos:

    1. Seleccione Recursos de cálculo y seleccione un tipo de servicio de cálculo en la lista.

    2. Si selecciona la opción para Todos los recursos de servicio, para definir varias condiciones para filtrar los recursos del tipo de servicio de cálculo seleccionado, pulse Añadir una condición. Estas condiciones se basan en atributos como, por ejemplo, grupos de recursos o ubicación, y se aplican a todos los recursos existentes y futuros. Los recursos deben cumplir todas las condiciones que se incluyen en el perfil de confianza.

      Los nombres de espacio de nombres de Kubernetes y de cuenta de servicio que especifique no es necesario que ya existan. Cualquier espacio de nombres o cuenta de servicio futuros con estos nombres puede establecer la confianza. Para listar los espacios de nombres existentes, inicie una sesión en el clúster y ejecute kubectl get ns. Para listar las cuentas de servicio existentes, inicie sesión en el clúster y ejecute kubectl get sa -n <namespace>. También puede introducir default para ambos.

    3. Si selecciona Recursos específicos, puede establecer la confianza con una o varias instancias de recursos informáticos existentes directamente sin condiciones. Por ejemplo, un clúster de Kubernetes.

  5. Pulse Continuar.

  6. (Opcional) Asigne acceso al perfil de confianza.

  7. O bien, haga clic en Crear sin asignar ningún acceso.

Para obtener más información sobre los campos que se utilizan para crear condiciones para perfiles de confianza, consulte Propiedades de condición IAM.

Establecimiento de la confianza con los servicios IBM Cloud en la consola

Un servicio IBM Cloud de su cuenta o de otra cuenta puede necesitar un token para ejecutar una operación en su cuenta.

Ejemplo 1
Una instancia del servicio Project en otra cuenta puede asumir un perfil de confianza para desplegar de forma segura una arquitectura en su cuenta sin necesidad de rotación de claves. Para obtener más información, consulte Uso de perfiles de confianza para autorizar un proyecto a desplegar una arquitectura.
Ejemplo 2
Un catálogo privado es una instancia del servicio Gestión de catálogos que se identifica mediante un CRN. Es posible que desee validar los productos de su catálogo privado en una cuenta separada de la que contiene su catálogo. Puede dar acceso a un catálogo privado para crear recursos para validación en una cuenta de destino creando un perfil de confianza en la cuenta de destino. A continuación, se establece la confianza con el catálogo utilizando el CRN del catálogo para vincular la instancia de servicio al perfil de confianza. Para más información, consulte Incorporación de software a su catálogo privado.

La compartición de recursos entre cuentas mediante perfiles de confianza funciona para un conjunto limitado de servicios y no es un método general para el acceso entre cuentas a los servicios.

Complete los siguientes pasos para definir cómo un servicio de IBM Cloud puede acceder a recursos específicos de su cuenta:

  1. Solicite al administrador del servicio el Nombre del Recurso en la Nube (CRN) que identifica de forma única la instancia del servicio. El CRN se utiliza para autorizar operaciones.

    El administrador del servicio puede encontrar el CRN accediendo al icono del menú de navegación Menú de navegación > Lista de recursos y haciendo clic en el nombre del servicio al que se dirige. En la sección Detalles, copie el CRN. Para un catálogo privado CRN, vaya a Gestionar > Catálogos > Catálogos privados y seleccione el catálogo privado. Haga clic en Acciones... > Editar detalles del catálogo para encontrar el CRN del catálogo.

  2. En la consola de IBM Cloud, pulse Gestionar > Acceso (IAM) y seleccione Perfiles de confianza.

  3. Pulse Crear perfil.

  4. Defina su perfil proporcionando un nombre y una descripción, y haga clic en Continuar.

    En la descripción, proporcione una lista de acciones disponibles para el perfil de confianza.

  5. Puede crear el perfil de confianza antes de añadir detalles seleccionando Decidir más tarde. O bien, establezca la confianza completando los siguientes pasos:

    1. Seleccione IBM Cloud® services.
    2. Introduzca el CRN que le proporcionó el administrador del servicio.

    IBM Cloud son identidades estáticas que no utilizan condiciones para establecer la confianza. En su lugar, se establece la confianza utilizando el CRN para crear un vínculo directo con la entidad de confianza.

  6. Pulse Continuar.

  7. (Opcional) Asigne acceso al perfil de confianza.

  8. O bien, haga clic en Crear sin asignar ningún acceso.

Establecer la confianza con los ID de servicio en la consola

Puede utilizar perfiles de confianza para dar a un ID de servicio acceso cruzado entre cuentas y acceso a los servicios de infraestructura clásicos de llamada. Para dar acceso a un ID de servicio de una cuenta a una cuenta de destino, cree el perfil de confianza en la cuenta de destino. Complete los siguientes pasos para definir cómo un ID de servicio puede acceder a recursos específicos en su cuenta:

  1. Pida a un administrador de la otra cuenta el valor que identifica el ID de servicio.

    Un administrador puede encontrar el valor del ID de servicio yendo a Gestionar > Acceso (IAM) > ID de servicio, y seleccionando el ID de servicio al que desea dirigirse. Haga clic en Detalles y copie el ID que empieza por ServiceId.

  2. En la consola de IBM Cloud, pulse Gestionar > Acceso (IAM) y seleccione Perfiles de confianza.

  3. Pulse Crear perfil.

  4. Defina su perfil proporcionando un nombre y una descripción, y haga clic en Continuar.

    En la descripción, proporcione una lista de acciones disponibles para este perfil de confianza.

  5. Puede crear el perfil de confianza antes de añadir detalles seleccionando Decidir más tarde. O bien, establezca la confianza completando los siguientes pasos:

    1. Seleccionar ID de servicio
    2. Introduzca el valor de ID de servicio que le proporcionó el administrador.
  6. Pulse Continuar.

  7. (Opcional) Asigne acceso al perfil de confianza.

  8. O bien, haga clic en Crear sin asignar ningún acceso.

Los ID de servicio son identidades estáticas que no utilizan condiciones para establecer la confianza. En su lugar, se establece la confianza utilizando el valor ID de los metadatos del ID de servicio para crear un vínculo directo con la entidad de confianza.

Asignación de acceso al perfil de confianza

Después de establecer la confianza con usuarios federados, recursos informáticos, un servicio IBM Cloud o un ID de servicio, puede asignar el acceso.

Puede asignar acceso a la infraestructura clásica sólo si su cuenta está vinculada a una cuenta de Softlayer.

  1. Asignar acceso.
    • Asigne acceso al perfil de confianza añadiéndole a uno o más grupos de acceso. De este modo, puede utilizar las políticas que existen en los grupos de acceso que ha creado.
      1. Seleccione Grupos de acceso y seleccione todos los grupos a los que desee añadir el perfil de confianza. Solo puede asignar usuarios a los grupos de acceso sobre los tiene acceso de gestión.
      2. Pulse Añadir.
    • Asigne acceso al perfil de confianza con una política de acceso.
      1. Seleccione Política de acceso. En función del nivel de acceso, puede asignar políticas de IAM y permisos de la infraestructura clásica.
      2. Seleccione un único servicio o un grupo de servicios, como Todos los servicios habilitados para identidad y acceso, Todos los servicios de gestión de cuentas o Todos los servicios de gestión de cuentas de IAM. A continuación, pulse Siguiente.
      3. Alcance el acceso a Todos los recursos o a Recursos específicos en función de los atributos seleccionados. A continuación, pulse Siguiente.
      4. Seleccione la combinación que desee de roles y permisos para definir el ámbito de acceso y pulse Revisar.
      5. Pulse Añadir para añadir la configuración de política a su resumen.
      6. Puede asignar el acceso de Infraestructura clásica seleccionando un usuario, un dispositivo o un servicio y, a continuación, una combinación cualquiera de permisos granulares.
  2. Pulse Crear.

Personalizar la experiencia de la consola

Como administrador de un perfil de confianza, puede personalizar los elementos de navegación que aparecen en el banner de la consola IBM Cloud para los usuarios que aplican un perfil de confianza. Esta capacidad ayuda a agilizar la experiencia de la consola ocultando los elementos de navegación a los que los usuarios no necesitan acceder e impidiendo que los usuarios exploren áreas en las que carecen de permisos.

Para personalizar la navegación de la consola para un perfil de confianza, siga estos pasos:

  1. En la consola IBM Cloud, haga clic en Gestionar > Acceso (IAM), y haga clic en Perfiles de confianza.
  2. Seleccione el perfil de confianza que desea personalizar y haga clic en Experiencia de consola.
  3. Seleccione la página de destino que desea utilizar como página de destino predeterminada y haga clic en Guardar.
  4. Seleccione los elementos de navegación que desea incluir en el banner de consola.
  5. Seleccione los catálogos privados en los que el perfil de confianza puede acceder a productos específicos y haga clic en Guardar.

Establecimiento de la confianza con usuarios federados utilizando la CLI

Siga estos pasos para definir qué usuarios federados pueden acceder a recursos específicos:

  1. Habilite la autenticación de un proveedor de identidad externo.

  2. Cree un perfil de confianza ejecutando el mandato siguiente:

    ibmcloud iam trusted-profile-create my-profile -d "sample trusted profile"
    

    Para obtener más información, consulte la referencia CLI.

  3. Para crear condiciones para su perfil de confianza, ejecute el mandato ibmcloud iam trusted-profile-rule-create:

    ibmcloud iam trusted-profile-rule-create my-profile --name my-rule --type Profile-SAML --conditions claim:cn,operator:EQUALS,value:my_user --realm-name https://w3id.sso.ibm.com/auth/sps/samlidp2/saml20 --expiration 1200
    

    Para obtener más información, consulte la referencia CLI.

  4. Cree una política de acceso con el rol Viewer para todos los recursos de la cuenta ejecutando el mandato siguiente:

    ibmcloud iam trusted-profile-policy-create --roles Viewer
    

    Para obtener más información, consulte la referencia CLI.

Establecimiento de la confianza con recursos de cálculo utilizando la CLI

Siga estos pasos para configurar un mejor control sobre cómo otorgar acceso a los recursos de cálculo.

IBM Cloud Kubernetes Service solo da soporte a los perfiles de confianza de las versiones 1.21 y posteriores. Los clústeres de IBM Cloud Kubernetes Service gratuitos solo crean versiones anteriores. Tiene la opción de crear clústeres con una versión anterior con el plan estándar; por lo tanto, asegúrese de seleccionar la versión 1.21 o posterior.

  1. Cree un perfil de confianza ejecutando el mandato siguiente:

    ibmcloud iam trusted-profile-create sample-compute-profile -d "sample trusted profile for compute resources"
    

    Para obtener más información, consulte la referencia CLI.

  2. Cree condiciones para su perfil de confianza utilizando el mandato ibmcloud iam trusted-profile-rule-create:

    ibmcloud iam trusted-profile-rule-create sample-compute-profile --name cr-rule --type Profile-CR --conditions claim:namespace,operator:EQUALS,value:default --conditions claim:crn,operator:EQUALS,value:crn:test:bluemix:public:containers-kubernetes:us-south:a/test:: --cr-type IKS_SA
    

    Para obtener más información, consulte la referencia CLI.

    También puede crear un enlace directo:

    ibmcloud iam trusted-profile-link-create sample-compute-profile --name my_link --cr-type IKS_SA --link-name default  --link-namespace default --link-crn my_compute_resource_crn
    

    Para obtener más información, consulte la referencia CLI.

  3. Cree una política de acceso ejecutando el mandato siguiente:

    ibmcloud iam trusted-profile-policy-create --roles Viewer
    

    Para obtener más información, consulte la referencia CLI.

Establecimiento de la confianza con los servicios de IBM Cloud mediante la CLI

Un servicio IBM Cloud en otra cuenta puede necesitar un token para ejecutar una operación en su cuenta. Complete los siguientes pasos para definir cómo un servicio de IBM Cloud puede acceder a recursos específicos de su cuenta:

  1. Solicite al administrador del servicio en otra cuenta el CRN que identifica de forma exclusiva la instancia del servicio. El CRN se utiliza para autorizar operaciones.

    El administrador del servicio puede encontrar el CRN accediendo al icono del menú de navegación Menú de navegación > Lista de recursos y haciendo clic en el servicio al que se dirige. En la sección Detalles, copie el CRN.

  2. Cree la relación de confianza con un vínculo directo:

    ibmcloud iam trusted-profile-link-create sample-cloudservice-profile --name my_cloudservice_link --link-crn `crn:version:cname:ctype:service-name:location:scope:service-instance:resource-type:resource`
    

    Para obtener más información, consulte la referencia CLI.

  3. Cree una política de acceso ejecutando el mandato siguiente:

    ibmcloud iam trusted-profile-policy-create --roles Viewer
    

    Para obtener más información, consulte la referencia CLI.

Establecimiento de la confianza con los ID de servicio mediante la CLI

Complete los siguientes pasos para definir cómo un ID de servicio puede acceder a recursos específicos en su cuenta:

Puede utilizar perfiles de confianza para otorgar a un ID de servicio acceso entre cuentas y acceso para llamar a servicios de Classic Infrastructure.

  1. Pida a un administrador de la otra cuenta el valor que identifica el ID de servicio.

    Un administrador puede encontrar el valor del ID de servicio yendo a Gestionar > Acceso (IAM) > ID de servicio y seleccionando el ID de servicio al que desea dirigirse. Haga clic en Detalles y copie el ID que empieza por ServiceId.

  2. Cree la relación de confianza con un vínculo directo:

    ibmcloud iam trusted-profile-link-create sample-serviceid-profile --name my_serviceid_link --link-crn `crn:version:cname:ctype:service-name:location:scope:service-instance:resource-type:resource`
    

    Para obtener más información, consulte la referencia CLI.

  3. Cree una política de acceso ejecutando el mandato siguiente:

    ibmcloud iam trusted-profile-policy-create --roles Viewer
    

    Para obtener más información, consulte la referencia CLI.

Asignación de acceso al perfil de confianza mediante la CLI

Después de establecer la confianza con usuarios federados, recursos informáticos, un servicio IBM Cloud o un ID de servicio, puede asignar el acceso.

Puede asignar acceso a la infraestructura clásica sólo si su cuenta está vinculada a una cuenta de Softlayer.

Utilice el comando trusted-profile-policy-create para asignar una política de acceso al perfil de confianza. El siguiente ejemplo asigna una política con el rol de Administrador en todos los servicios de Gestión de Cuentas:

ibmcloud iam trusted-profile-policy-create Profile-36f5c562-1t36-4442-b7f0-2663c85386f1 --roles Administrator --attributes serviceType=service

Establecimiento de la confianza con usuarios federados utilizando la API

Siga estos pasos para definir qué usuarios federados pueden acceder a recursos específicos:

  1. Habilite la autenticación de un proveedor de identidad externo.

  2. Cree un perfil de confianza especificando su ID de cuenta.

    curl -X POST 'https://iam.cloud.ibm.com/v1/profiles' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
    "name": "My Nice Profile",
    "description": "My Nice Profile - desc",
    "account_id": "ACCOUNT_ID"
    }'
    

    En la descripción, proporcione una lista de acciones disponibles para este perfil de confianza.

  3. Cree condiciones para su perfil de confianza. Para los usuarios federados, establezca el atributo type en Profile-SAML. realm-name es el URL de IdP. Para obtener más información, consulte la API de IAM Identity Services.

    curl -X POST 'https://iam.cloud.ibm.com/v1/profiles/PROFILE_ID/rules' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
    "type": "Profile-SAML",
    "realm_name": "https://www.example.org/my-nice-idp",
    "expiration": 43200,
    "conditions": [
    {
    "claim": "groups",
    "operator": "EQUALS",
    "value": "\"cloud-docs-dev\""
       }
       ]
    }'
    

    Hay un límite de 20 reglas de reclamación por perfil de confianza.

  4. (Opcional) Asigne acceso al perfil de confianza.

Establecer la confianza con los recursos informáticos mediante la API

Siga estos pasos para configurar un mejor control sobre cómo otorgar acceso a los recursos de cálculo.

IBM Cloud Kubernetes Service solo da soporte a los perfiles de confianza de las versiones 1.21 y posteriores. Los clústeres de IBM Cloud Kubernetes Service gratuitos solo crean versiones anteriores. Tiene la opción de crear clústeres con una versión anterior con el plan estándar; por lo tanto, asegúrese de seleccionar la versión 1.21 o posterior.

  1. Cree un perfil de confianza especificando su ID de cuenta.

    curl -X POST 'https://iam.cloud.ibm.com/v1/profiles' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
    "name": "My Nice Profile",
    "description": "My Nice Profile - desc",
    "account_id": "ACCOUNT_ID"
    }'
    

    En la descripción, proporcione una lista de acciones disponibles para este perfil de confianza.

  2. Cree una regla de reclamación para el perfil de confianza que sigue el principio de privilegio mínimo especificando condiciones que solo se dirigen a los recursos que necesitan acceso. Las condiciones se aplican a todos los recursos existentes y futuros. También puede crear un enlace directo con recursos específicos existentes.

    Crear condiciones
    Para los recursos informáticos, establezca el atributo type en Profile-CR. Para obtener más información, consulte la API de IAM Identity Services.
    curl -X POST 'https://iam.cloud.ibm.com/v1/profiles/PROFILE_ID/rules' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
    "type": "Profile-CR",
    "conditions": [
    {
    "claim": "namespace",
    "operator": "EQUALS",
    "value": "\"default123\""
       }
       ]
    }'
    

    Hay un límite de 20 reglas de reclamación por perfil de confianza.

    Crear un enlace directo
    Puede establecer un vínculo directo con recursos específicos ya existentes.
    curl -X POST 'https://iam.cloud.ibm.com/v1/profiles/PROFILE_ID/links' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
    "name": "my link",
    "cr_type": "VSI",
    "is_cross_account": true,
    "link": {
    "crn": "crn:v1:staging:public:iam-identity::a/18e3020749ce4744b0b472466d61fdb4::computeresource:Fake-Compute-Resource",
    "namespace": "default",
    "name": "my compute resource name"
    }
    }'
    
  3. (Opcional) Asigne acceso al perfil de confianza.

Asignación de acceso al perfil de confianza mediante la API

Después de establecer la confianza con usuarios federados, recursos informáticos, un servicio IBM Cloud o un ID de servicio, puede asignar el acceso.

Puede asignar acceso a la infraestructura clásica sólo si su cuenta está vinculada a una cuenta de Softlayer.

El siguiente ejemplo asigna una política con el rol de Administrador en todos los servicios de Gestión de Cuentas:

curl -X POST \
'https://iam.cloud.ibm.com/v1/policies' \
-H 'Authorization: $TOKEN'\
-H 'Content-Type: application/json'\
-d '{
  "type": "access",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9"
        }
      ]
    }'
  ],
  "roles":[
    {
      "role_id": "crn:v1:bluemix:public:iam::::role:Administrator"
    }
  ],
  "resources":[
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "$ACCOUNT_ID"
        },
        {
          "name": "serviceType",
          "value": "platform-service"
        }
      ]
    }
  ]
}'
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
        .name("iam_id")
        .value("Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9")
        .build();

PolicySubject policySubjects = new PolicySubject.Builder()
        .addAttributes(subjectAttribute)
        .build();

PolicyRole policyRoles = new PolicyRole.Builder()
        .roleId("crn:v1:bluemix:public:iam::::role:Administrator")
        .build();

ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
        .name("accountId")
        .value("exampleAccountId")
        .operator("stringEquals")
        .build();

ResourceAttribute serviceTypeResourceAttribute = new ResourceAttribute.Builder()
        .name("serviceType")
        .value("platform-service")
        .operator("stringEquals")
        .build();

PolicyResource policyResources = new PolicyResource.Builder()
        .addAttributes(accountIdResourceAttribute)
        .addAttributes(serviceTypeResourceAttribute)
        .build();

CreatePolicyOptions options = new CreatePolicyOptions.Builder()
        .type("access")
        .subjects(Arrays.asList(policySubjects))
        .roles(Arrays.asList(policyRoles))
        .resources(Arrays.asList(policyResources))
        .build();

Response<Policy> response = service.createPolicy(options).execute();
Policy policy = response.getResult();

System.out.println(policy);
const policySubjects = [
  {
    attributes: [
      {
        name: 'iam_id',
        value: "Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9",
      },
    ],
  },
];
const policyRoles = [
  {
    role_id: 'crn:v1:bluemix:public:iam::::role:Administrator',
  },
];
const accountIdResourceAttribute = {
  name: 'accountId',
  value: 'exampleAccountId',
  operator: 'stringEquals',
};
const serviceTypeResourceAttribute = {
  name: 'serviceType',
  value: 'platform-service',
  operator: 'stringEquals',
};
const policyResources = [
  {
    attributes: [accountIdResourceAttribute, serviceTypeResourceAttribute]
  },
];
const params = {
  type: 'access',
  subjects: policySubjects,
  roles: policyRoles,
  resources: policyResources,
};

iamPolicyManagementService.createPolicy(params)
  .then(res => {
    examplePolicyId = res.result.id;
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err)
  });
policy_subjects = PolicySubject(
  attributes=[SubjectAttribute(name='iam_id', value='Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9')])
policy_roles = PolicyRole(
  role_id='crn:v1:bluemix:public:iam::::role:Administrator')
account_id_resource_attribute = ResourceAttribute(
  name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
  name='serviceType', value='platform-service')
policy_resources = PolicyResource(
  attributes=[account_id_resource_attribute,
        service_type_resource_attribute])

policy = iam_policy_management_service.create_policy(
  type='access',
  subjects=[policy_subjects],
  roles=[policy_roles],
  resources=[policy_resources]
).get_result()

print(json.dumps(policy, indent=2))
subjectAttribute := &iampolicymanagementv1.SubjectAttribute{
  Name:  core.StringPtr("iam_id"),
  Value: core.StringPtr("Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9"),
}
policySubjects := &iampolicymanagementv1.PolicySubject{
  Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
  RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Administrator"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
  Name:     core.StringPtr("accountId"),
  Value:    core.StringPtr("ACCOUNT_ID"),
  Operator: core.StringPtr("stringEquals"),
}
serviceTypeResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
  Name:     core.StringPtr("serviceType"),
  Value:    core.StringPtr("platform-service"),
  Operator: core.StringPtr("stringEquals"),
}
policyResources := &iampolicymanagementv1.PolicyResource{
  Attributes: []iampolicymanagementv1.ResourceAttribute{
    *accountIDResourceAttribute, *serviceTypeResourceAttribute},
}

options := iamPolicyManagementService.NewCreatePolicyOptions(
  "access",
  []iampolicymanagementv1.PolicySubject{*policySubjects},
  []iampolicymanagementv1.PolicyRole{*policyRoles},
  []iampolicymanagementv1.PolicyResource{*policyResources},
)

policy, response, err := iamPolicyManagementService.CreatePolicy(options)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(policy, "", "  ")
fmt.Println(string(b))