Cette page explique comment afficher, comprendre et appliquer les recommandations de rôle Cloud Storage pour les buckets Cloud Storage. Les recommandations de rôle vous aident à appliquer le principe du moindre privilège en vous assurant que les comptes principaux ne disposent que des autorisations dont ils ont réellement besoin.
Avant de commencer
Activer les API IAM and Recommender.
Comprenez les recommandations de rôle.
Rôles IAM requis
Cette section décrit les rôles et autorisations IAM dont vous avez besoin pour utiliser les recommandations de rôle au niveau du bucket.
Afficher les recommandations
Pour obtenir les autorisations dont vous avez besoin pour afficher les recommandations de rôle au niveau du bucket, demandez à votre administrateur de vous accorder les rôles IAM suivants dans le projet:
- Lecteur de rôles (
roles/iam.roleViewer
) - Lecteur de l'outil de recommandation IAM (
roles/recommender.iamViewer
) - Administrateur de l'espace de stockage (
roles/storage.admin
)
Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.
Ces rôles prédéfinis contiennent les autorisations requises pour afficher les recommandations de rôle au niveau du bucket. Pour afficher les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
-
iam.roles.get
-
iam.roles.list
-
recommender.iamPolicyRecommendations.get
-
recommender.iamPolicyRecommendations.list
-
recommender.iamPolicyInsights.get
-
recommender.iamPolicyInsights.list
-
storage.buckets.getIamPolicy
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Appliquer et ignorer les recommandations
Pour obtenir les autorisations nécessaires pour afficher, appliquer et ignorer les recommandations de rôle au niveau du bucket, demandez à votre administrateur de vous accorder les rôles IAM suivants dans le projet:
- Lecteur de rôles (
roles/iam.roleViewer
) - Administrateur de l'outil de recommandation IAM (
roles/recommender.iamAdmin
) - Administrateur de l'espace de stockage (
roles/storage.admin
)
Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.
Ces rôles prédéfinis contiennent les autorisations requises pour afficher, appliquer et ignorer les recommandations de rôles au niveau du bucket. Pour afficher les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
-
iam.roles.get
-
iam.roles.list
-
recommender.iamPolicyRecommendations.get
-
recommender.iamPolicyRecommendations.list
-
recommender.iamPolicyInsights.get
-
recommender.iamPolicyInsights.list
-
recommender.iamPolicyLateralMovementInsights.get
-
recommender.iamPolicyLateralMovementInsights.list
-
recommender.iamPolicyRecommendations.update
-
storage.buckets.getIamPolicy
-
storage.buckets.setIamPolicy
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Lire et appliquer les recommandations
Vous pouvez examiner et appliquer les recommandations de rôle au niveau du bucket à l'aide de la CLI Google Cloud et de l'API Recommender.
gcloud
Examinez les recommandations :
Pour afficher les recommandations au niveau du bucket, exécutez la commande gcloud recommender recommendations list
en filtrant uniquement les recommandations du bucket Cloud Storage:
gcloud recommender recommendations list \
--location=LOCATION \
--recommender=google.iam.policy.Recommender \
--project=PROJECT_ID \
--format=FORMAT \
--filter="recommenderSubtype:REMOVE_ROLE_STORAGE_BUCKET OR recommenderSubtype:REPLACE_ROLE_STORAGE_BUCKET"
Remplacez les valeurs suivantes :
LOCATION
: région où se trouvent vos buckets Cloud Storage (par exemple,us
ouus-central1
).PROJECT_ID
: ID du projet Google Cloud contenant vos buckets Cloud Storage. Les ID de projet sont des chaînes alphanumériques, telles quemy-project
.FORMAT
: format de la réponse. Utilisezjson
ouyaml
.
La réponse est semblable à l'exemple suivant. Dans cet exemple, tous les utilisateurs authentifiés (allAuthenticatedUsers
) disposent du rôle "Lecteur des anciens objets Storage" (roles/storage.legacyObjectReader
) sur le bucket mybucket
.
Toutefois, ce rôle n'a pas été utilisé au cours des 90 derniers jours. Par conséquent, nous vous recommandons de révoquer ce rôle:
[ { "associatedInsights": [ { "insight": "projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb" } ], "associatedResourceNames": [ "//storage.googleapis.com/my-bucket" ], "content": { "operationGroups": [ { "operations": [ { "action": "remove", "path": "/iamPolicy/bindings/*/members/*", "pathFilters": { "/iamPolicy/bindings/*/condition/expression": "", "/iamPolicy/bindings/*/members/*": "allAuthenticatedUsers", "/iamPolicy/bindings/*/role": "roles/storage.legacyObjectReader" }, "resource": "//storage.googleapis.com/my-bucket", "resourceType": "storage.googleapis.com/Bucket" } ] } ] }, "description": "This role has not been used during the observation window.", "etag": "\"7caf4103d7669e12\"", "lastRefreshTime": "2022-05-24T07:00:00Z", "name": "projects/123456789012/locations/us/recommenders/google.iam.policy.Recommender/recommendations/fbc885b7-f0a8-47e6-90fe-6141aa2c4257", "primaryImpact": { "category": "SECURITY", "securityProjection": { "details": { "revokedIamPermissionsCount": 1 } } }, "priority": "P1", "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET", "stateInfo": { "state": "ACTIVE" } } ]
Examinez attentivement la recommandation et réfléchissez à la manière dont elle modifiera l'accès du compte principal aux ressources Google Cloud. Pour savoir comment consulter les recommandations à partir de gcloud CLI, consultez la section Examiner les recommandations sur cette page.
Pour appliquer une recommandation, procédez comme suit :
Utilisez la commande
gcloud recommender recommendations mark-claimed
pour définir l'état de la recommandation surCLAIMED,
, ce qui empêche la recommandation de changer lorsque vous l'appliquez :gcloud recommender recommendations mark-claimed \ RECOMMENDATION_ID \ --location=LOCATION \ --recommender=google.iam.policy.Recommender \ --project=PROJECT_ID \ --format=FORMAT \ --etag=ETAG \ --state-metadata=STATE_METADATA
Remplacez les valeurs suivantes :
-
RECOMMENDATION_ID
: identifiant unique de la recommandation. Cette valeur apparaît à la fin du champname
de la recommandation. Par exemple, si le champname
estprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, l'ID de recommandation estfb927dc1-9695-4436-0000-f0f285007c0f
. -
LOCATION
: région où se trouve votre bucket Cloud Storage, par exemple,us
ouus-central1
. -
PROJECT_ID
: ID du projet Google Cloud contenant vos buckets Cloud Storage. Les ID de projet sont des chaînes alphanumériques, commemy-project
. -
FORMAT
: format de la réponse. Utilisezjson
ouyaml
. -
ETAG
: valeur du champetag
dans la recommandation, telle que"dd0686e7136a4cbb"
. Notez que cette valeur peut inclure des guillemets. -
STATE_METADATA
: facultatif. Paires clé/valeur séparées par des virgules contenant votre choix de métadonnées relatives à la recommandation. Exemple :--state-metadata=reviewedBy=alice,priority=high
. Les métadonnées remplacent le champstateInfo.stateMetadata
de la recommandation.
Si la commande aboutit, la réponse affiche la recommandation à l'état
CLAIMED
, comme indiqué dans l'exemple suivant. Pour plus de clarté, l'exemple omet la plupart des champs :... "priority": "P1", "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET", "stateInfo": { "state": "CLAIMED" } ...
-
Obtenez la règle d'autorisation pour le bucket, puis modifiez et définissez la règle d'autorisation afin qu'elle reflète la recommandation.
Mettez à jour l'état de la recommandation sur
SUCCEEDED
si vous avez appliqué la recommandation ou surFAILED
si vous ne pouvez pas appliquer la recommandation :gcloud recommender recommendations COMMAND \ RECOMMENDATION_ID \ --location=LOCATION \ --recommender=google.iam.policy.Recommender \ --project=PROJECT_ID \ --format=FORMAT \ --etag=ETAG \ --state-metadata=STATE_METADATA
Remplacez les valeurs suivantes :
-
COMMAND
: utilisezmark-succeeded
si vous avez appliqué la recommandation oumark-failed
si vous n'avez pas pu l'appliquer. -
RECOMMENDATION_ID
: identifiant unique de la recommandation. Cette valeur apparaît à la fin du champname
de la recommandation. Par exemple, si le champname
estprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, l'ID de recommandation estfb927dc1-9695-4436-0000-f0f285007c0f
. -
LOCATION
: région où se trouve votre bucket Cloud Storage, par exemple,us
ouus-central1
. -
PROJECT_ID
: ID du projet Google Cloud contenant vos buckets Cloud Storage. Les ID de projet sont des chaînes alphanumériques, commemy-project
. -
FORMAT
: format de la réponse. Utilisezjson
ouyaml
. -
ETAG
: valeur du champetag
dans la recommandation, telle que"dd0686e7136a4cbb"
. Notez que cette valeur peut inclure des guillemets. -
STATE_METADATA
: facultatif. Paires clé/valeur séparées par des virgules contenant votre choix de métadonnées relatives à la recommandation. Exemple :--state-metadata=reviewedBy=alice,priority=high
. Les métadonnées remplacent le champstateInfo.stateMetadata
de la recommandation.
Par exemple, si vous avez marqué la recommandation comme réussie, la réponse affiche la recommandation avec l'état
SUCCEEDED
. Pour plus de clarté, cet exemple omet la plupart des champs :... "priority": "P1", "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET", "stateInfo": { "state": "SUCCEEDED" } ...
-
REST
Ces instructions partent du principe que vous avez authentifié et défini la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS
.
Examinez les recommandations :
Pour lister toutes les recommandations disponibles pour vos buckets Cloud Storage, utilisez la méthode recommendations.list
de l'API de l'outil de recommandation.
Avant d'utiliser les données de la requête, effectuez les remplacements suivants:
PROJECT_ID
: ID du projet Google Cloud contenant vos buckets Cloud Storage. Les ID de projet sont des chaînes alphanumériques, telles quemy-project
.LOCATION
: région où se trouvent vos buckets Cloud Storage (par exemple,us
ouus-central1
).-
PAGE_SIZE
: facultatif. Nombre maximal de résultats à renvoyer pour cette requête. Si cette valeur n'est pas spécifiée, le serveur détermine le nombre de résultats à renvoyer. Si le nombre de recommandations est supérieur à la taille de la page, la réponse contient un jeton de pagination que vous pouvez utiliser pour récupérer la page de résultats suivante. -
PAGE_TOKEN
: facultatif. Jeton de pagination renvoyé dans une réponse précédente de cette méthode. Si spécifié, la liste de recommandations commence à la fin de la requête précédente.
Méthode HTTP et URL :
GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations?filter=recommenderSubtype%20%3D%20REMOVE_ROLE_STORAGE_BUCKET%20OR%20recommenderSubtype%20%3D%20REPLACE_ROLE_STORAGE_BUCKET&pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN
Pour envoyer votre requête, développez l'une des options suivantes :
La réponse est semblable à l'exemple suivant. Dans cet exemple, tous les utilisateurs authentifiés (allAuthenticatedUsers
) disposent du rôle "Lecteur des anciens objets Storage" (roles/storage.legacyObjectReader
) sur le bucket mybucket
.
Toutefois, ce rôle n'a pas été utilisé au cours des 90 derniers jours. Par conséquent, nous vous recommandons de révoquer ce rôle dans la recommandation du rôle:
{ "recommendations": [ "name": "projects/123456789012/locations/us/recommenders/google.iam.policy.Recommender/recommendations/fbc885b7-f0a8-47e6-90fe-6141aa2c4257", "description": "This role has not been used during the observation window.", "lastRefreshTime": "2022-05-24T07:00:00Z", "primaryImpact": { "category": "SECURITY", "securityProjection": { "details": { "revokedIamPermissionsCount": 1 } } }, "content": { "operationGroups": [ { "operations": [ { "action": "remove", "resourceType": "storage.googleapis.com/Bucket", "resource": "//storage.googleapis.com/my-bucket", "path": "/iamPolicy/bindings/*/members/*", "pathFilters": { "/iamPolicy/bindings/*/condition/expression": "", "/iamPolicy/bindings/*/members/*": "allAuthenticatedUsers", "/iamPolicy/bindings/*/role": "roles/storage.legacyObjectReader" } } ] } ] }, "stateInfo": { "state": "ACTIVE" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET", "associatedInsights": [ { "insight": "projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb" } ], "priority": "P1" ] }
Examinez attentivement la recommandation et réfléchissez à la manière dont elle modifiera l'accès du compte principal aux ressources Google Cloud. Pour savoir comment consulter les recommandations à partir de l'API REST, consultez la section Examiner les recommandations sur cette page.
Pour appliquer une recommandation, procédez comme suit :
Définissez l'état de la recommandation sur
CLAIMED
:Pour marquer une recommandation comme
CLAIMED
, ce qui empêche sa modification lorsque vous l'appliquez, utilisez la méthoderecommendations.markClaimed
de l'API de l'outil de recommandation.Avant d'utiliser les données de la requête, effectuez les remplacements suivants:
PROJECT_ID
: ID du projet Google Cloud contenant vos buckets Cloud Storage. Les ID de projet sont des chaînes alphanumériques, telles quemy-project
.LOCATION
: région où se trouve votre bucket Cloud Storage, par exemple,us
ouus-central1
.RECOMMENDATION_ID
: identifiant unique de la recommandation. Cette valeur s'affiche à la fin du champname
de la recommandation. Par exemple, si le champname
estprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, l'ID de la recommandation estfb927dc1-9695-4436-0000-f0f285007c0f
.ETAG
: valeur du champetag
dans la recommandation, telle que"dd0686e7136a4cbb"
. Utilisez des barres obliques inverses pour échapper les guillemets (par exemple,"\"df7308cca9719dcc\""
).STATE_METADATA
: facultatif. Objet contenant des paires clé/valeur avec les métadonnées de votre choix concernant la recommandation. Exemple :{"reviewedBy": "alice", "priority": "high"}
. Les métadonnées remplacent le champstateInfo.stateMetadata
de la recommandation.
Méthode HTTP et URL :
POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markClaimed
Corps JSON de la requête :
{ "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }
Pour envoyer votre requête, développez l'une des options suivantes :
La réponse affiche la recommandation à l'état
CLAIMED
, comme illustré dans l'exemple suivant. Pour plus de clarté, cet exemple omet la plupart des champs :... "stateInfo": { "state": "CLAIMED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET", ...
Obtenez la stratégie d'autorisation pour le projet, puis modifiez la stratégie d'autorisation afin qu'elle reflète la recommandation.
Mettez à jour l'état de la recommandation sur
SUCCEEDED
si vous avez appliqué la recommandation ou surFAILED
si vous ne pouvez pas appliquer la recommandation :SUCCEEDED
Pour marquer une recommandation comme
SUCCEEDED
et indiquer que vous avez pu l'appliquer, utilisez la méthoderecommendations.markSucceeded
de l'API de l'outil de recommandation.Avant d'utiliser les données de la requête, effectuez les remplacements suivants:
PROJECT_ID
: ID du projet Google Cloud contenant vos buckets Cloud Storage. Les ID de projet sont des chaînes alphanumériques, telles quemy-project
.LOCATION
: région où se trouve votre bucket Cloud Storage, par exemple,us
ouus-central1
.RECOMMENDATION_ID
: identifiant unique de la recommandation. Cette valeur s'affiche à la fin du champname
de la recommandation. Par exemple, si le champname
estprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, l'ID de la recommandation estfb927dc1-9695-4436-0000-f0f285007c0f
.ETAG
: valeur du champetag
dans la recommandation, telle que"dd0686e7136a4cbb"
. Utilisez des barres obliques inverses pour échapper les guillemets (par exemple,"\"df7308cca9719dcc\""
).STATE_METADATA
: facultatif. Objet contenant des paires clé/valeur avec les métadonnées de votre choix concernant la recommandation. Exemple :{"reviewedBy": "alice", "priority": "high"}
. Les métadonnées remplacent le champstateInfo.stateMetadata
de la recommandation.
Méthode HTTP et URL :
POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markSucceeded
Corps JSON de la requête :
{ "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }
Pour envoyer votre requête, développez l'une des options suivantes :
La réponse affiche la recommandation à l'état
SUCCEEDED
, comme illustré dans l'exemple suivant. Pour plus de clarté, cet exemple omet la plupart des champs :... "stateInfo": { "state": "SUCCEEDED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET", ...
FAILED
Pour marquer une recommandation comme
FAILED
et indiquer que vous n'avez pas pu l'appliquer, utilisez la méthoderecommendations.markFailed
de l'API de l'outil de recommandation.Avant d'utiliser les données de la requête, effectuez les remplacements suivants:
PROJECT_ID
: ID du projet Google Cloud contenant vos buckets Cloud Storage. Les ID de projet sont des chaînes alphanumériques, telles quemy-project
.LOCATION
: région où se trouve votre bucket Cloud Storage, par exemple,us
ouus-central1
.RECOMMENDATION_ID
: identifiant unique de la recommandation. Cette valeur s'affiche à la fin du champname
de la recommandation. Par exemple, si le champname
estprojects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
, l'ID de la recommandation estfb927dc1-9695-4436-0000-f0f285007c0f
.ETAG
: valeur du champetag
dans la recommandation, telle que"dd0686e7136a4cbb"
. Utilisez des barres obliques inverses pour échapper les guillemets (par exemple,"\"df7308cca9719dcc\""
).STATE_METADATA
: facultatif. Objet contenant des paires clé/valeur avec les métadonnées de votre choix concernant la recommandation. Exemple :{"reviewedBy": "alice", "priority": "high"}
. Les métadonnées remplacent le champstateInfo.stateMetadata
de la recommandation.
Méthode HTTP et URL :
POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markFailed
Corps JSON de la requête :
{ "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }
Pour envoyer votre requête, développez l'une des options suivantes :
La réponse affiche la recommandation à l'état
FAILED
, comme illustré dans l'exemple suivant. Pour plus de clarté, cet exemple omet la plupart des champs :... "stateInfo": { "state": "FAILED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET", ...
Comprendre les recommandations
Chaque recommandation inclut des informations pour vous aider à comprendre pourquoi elle a été émise.
Pour en savoir plus sur les champs d'une recommandation, consultez la documentation de référence Recommendation
.
Pour afficher l'utilisation des autorisations sur laquelle cette recommandation est fondée, consultez les insights sur les stratégies associés à la recommandation.
Ces insights sont répertoriés dans le champ associatedInsights
. Pour afficher un insight de stratégie associé à la recommandation, procédez comme suit :
- Copiez l'ID d'insight associé. L'ID d'insight correspond à tout ce qui suit
insights/
dans le champinsight
. Par exemple, si le champinsight
indiqueprojects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb
, l'ID d'insight est7849add9-73c0-419e-b169-42b3671173fb
. - Suivez les instructions pour obtenir un insight sur les stratégies en utilisant l'ID d'insight que vous avez copié.
Étapes suivantes
- Apprenez-en plus sur l'outil de recommandation.
- Découvrez comment utiliser les insights sur les règles pour les buckets Cloud Storage.